iOS dSYMs
Upload your dSYMs and native sentry-cocoa crashes resolve to function, file and line. Swift names come back demangled.
1. Make a token
Settings → API tokens → new token with the write scope. A project-scoped token can only upload to its own project. Read-only tokens get 403.
2. Add a build phase
In Xcode, add a Run Script build phase to your app target. Run it for Release only. Put the token in OPENFAULT_TOKEN.
cd "$DWARF_DSYM_FOLDER_PATH" && for d in *.dSYM; do
zip -qr "/tmp/$d.zip" "$d"
curl -fsS -H "Authorization: Bearer $OPENFAULT_TOKEN" -F "file=@/tmp/$d.zip" \
"https://errors.example.com/api/0/projects/<org>/<project-slug>/files/dsyms/"
done
One dSYM per request keeps each upload under the 20 MiB request cap.
With sentry-cli
sentry-cli debug-files upload works too. It uploads in chunks, so there is no size cap per dSYM. Use the write token from step 1.
export SENTRY_URL=https://errors.example.com
export SENTRY_ORG=openfault # any value; one install is one org
export SENTRY_PROJECT=ios # your project's slug
export SENTRY_AUTH_TOKEN=of_... # the write token
sentry-cli debug-files upload "$DWARF_DSYM_FOLDER_PATH"
Leave off --include-sources; sources are not stored.
Uploaded dSYMs are listed under the project’s Settings, where you can delete them.
The endpoint
POST /api/0/projects/<org>/<project-slug>/files/dsyms/
Authorization: Bearer of_...
Content-Type: multipart/form-data
| Field | Value |
|---|---|
file | A zip of one or more .dSYM bundles, or a single Mach-O file. |
<org> can be any value; one install is one org. <project-slug> is your project’s slug. Uploading the same debug ID again replaces it.
The response lists each debug file it stored, with its debug ID, architecture and object name. A missing file field or an unreadable upload gets 400. An unknown project gets 404.
How resolution works
On ingest, each frame with platform cocoa is matched by address to a Mach-O image in the event’s debug_meta, then by that image’s debug ID to an uploaded dSYM. Matched frames get:
function, Swift demangledsymbol, the raw mangled namefilenameandabs_pathlineno
Inlined frames are expanded: the Symbolicated view shows the innermost function on top, and the Raw view shows the frames as the client sent them.
The original frame is kept in raw. Symbolication is best effort: a missing dSYM or a bad frame leaves that frame as it was, and never fails ingest.
Limits
curluploads are capped at 20 MiB of decoded data per request, gzip bodies included. Past that you get413. Upload one dSYM per request, or usesentry-cli.- Mach-O only. No ELF or PDB.