Crash Symbolication & dSYMs (iOS)
FireworkVideo is distributed as a prebuilt binary XCFramework. Because your app does not compile the SDK, Xcode never generates a dSYM for it during your build or archive, and the FireworkVideo.xcframework itself does not bundle a dSYMs/ folder. As a result, crash reporting tools (Embrace, Firebase Crashlytics, Sentry, Datadog, Bugsnag, etc.) will report "missing dSYM" for frames inside FireworkVideo unless you upload the SDK's dSYM yourself.
This page explains where to find the dSYMs and how to get them into your crash reporting tool.
Where to find the dSYMs
Every SDK release on GitHub ships a separate dSYMs-v<version>.zip asset next to the .xcframework.zip:
https://github.com/loopsocial/firework_ios_sdk/releases/download/v<version>/dSYMs-v<version>.zipFor example, for SDK 1.44.3:
https://github.com/loopsocial/firework_ios_sdk/releases/download/v1.44.3/dSYMs-v1.44.3.zipThe zip has the following layout:
dSYMs/
├── ios/
│ └── FireworkVideo.framework.dSYM <- upload this one
└── simulator/
└── FireworkVideo.framework.dSYM <- simulator only, not needed for production crashesThe dSYM must match the exact SDK version you ship. A dSYM is matched to a binary by UUID, so the dSYM for 1.44.2 cannot symbolicate crashes from 1.44.3. Download the zip whose version matches the version pinned in your Package.resolved / Podfile.lock, and repeat this whenever you bump the SDK.
You can verify the UUIDs match with dwarfdump:
# UUID of the binary you ship
dwarfdump --uuid FireworkVideo.xcframework/ios-arm64/FireworkVideo.framework/FireworkVideo
# UUID of the dSYM
dwarfdump --uuid dSYMs/ios/FireworkVideo.framework.dSYMOption 1: Upload manually
Download the zip for your SDK version, unzip it, and upload dSYMs/ios/FireworkVideo.framework.dSYM using your crash reporting tool's dSYM upload CLI or web UI. Refer to your vendor's documentation, for example:
Embrace:
embrace upload/ dSYM upload endpointFirebase Crashlytics:
upload-symbols -gsp GoogleService-Info.plist -p ios <path-to-dSYM>Sentry:
sentry-cli debug-files upload <path-to-dSYM>
This is the quickest way to unblock symbolication for a release that is already live.
Option 2: Fetch automatically during archive (recommended)
Most crash reporting SDKs install a Run Script build phase that uploads every dSYM found in $DWARF_DSYM_FOLDER_PATH when you archive. You can add a script before that phase which downloads the matching FireworkVideo dSYM into the same folder, so it is picked up by your existing upload step and stays in sync with the SDK version automatically.
In Xcode, select your app target > Build Phases > + > New Run Script Phase. Rename the phase to Fetch FireworkVideo dSYM (double-click the phase title) and paste the following script. Keep it after the built-in phases (Compile Sources, Link Binary With Libraries, Copy Bundle Resources — the default position for a new phase) and above your crash reporter's dSYM upload phase (e.g. "Embrace Symbol Upload", "Upload Crashlytics dSYMs", "Sentry Upload Debug Symbols"):
Disable User Script Sandboxing. Xcode 15+ enables ENABLE_USER_SCRIPT_SANDBOXING by default for new projects, which blocks this script from reading the build products directory and from accessing the network. In your app target's Build Settings, set User Script Sandboxing to No for every configuration you archive with. Otherwise the archive fails with errors like Sandbox: find(...) deny(1) file-read-data ... or Sandbox: curl(...) deny(1) network-outbound. Crash reporter upload scripts (Embrace, Crashlytics, Sentry) require the same setting.
Notes:
The script runs only when Debug Information Format is set to DWARF with dSYM File (
dwarf-with-dsym) for the current configuration — Xcode's default for Release — so it costs nothing on Debug builds and works with custom configuration names (e.g.Staging,Production). This is the same setting your crash reporter needs to produce your app's own dSYM.Leave Based on dependency analysis unchecked and the input/output file lists empty so the script runs on every archive.
The script reads the SDK version from the
FireworkVideo.frameworkthat was linked into the build, so it works for both Swift Package Manager and CocoaPods installations and never drifts from the version you actually ship.The script targets stable releases only. Pre-release versions (
x.y.z-beta.N) report their version asx.y.zinInfo.plist, so the download will not find a matching asset; the script then emits a build warning and lets the archive continue. Upload the dSYM manually (Option 1) for beta builds.Your build machine (including CI) needs network access to
github.com. The repository is public, so no token is required.If your archive pipeline uploads dSYMs from the
.xcarchiveinstead of a build phase (e.g. Fastlanedownload_dsyms/upload_symbols_to_crashlytics), point that step at the extracteddSYMs/ios/FireworkVideo.framework.dSYMas an additional path.
Static XCFramework
If you integrate the static variant manually (FireworkVideo-static-v<version>.xcframework.zip), no separate dSYM is needed: the static library's code is linked directly into your app binary, so its symbols are included in the dSYM that Xcode generates for your app during archive.
Reporting a crash to Firework
When reporting a crash inside the SDK to Firework support, please include:
The exact SDK version (from
Package.resolved/Podfile.lock)The full crash report. A fully symbolicated report (including the
FireworkVideoframes) is ideal. If theFireworkVideoframes are still unsymbolicated, also attach the original.ips/.crashfile with the binary images and load addresses preserved, so we can symbolicate those frames with the matching dSYM on our side.iOS version and device model
Reproduction steps, if known
Last updated
Was this helpful?