Skip to content

fix: ship dSYMs in SentryObjC-Dynamic xcframework#8036

Merged
itaybre merged 10 commits into
mainfrom
fix/sentryobjc-dsyms
Jun 11, 2026
Merged

fix: ship dSYMs in SentryObjC-Dynamic xcframework#8036
itaybre merged 10 commits into
mainfrom
fix/sentryobjc-dsyms

Conversation

@itaybre

@itaybre itaybre commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Description

SentryObjC-Dynamic.xcframework ships without dSYM bundles because the custom swiftc relink step didn't extract them, and the assembly script didn't include them.

Root cause

The dynamic framework is built by re-linking a static library (libSentryObjC.a) as a dynamic library via swiftc -emit-library. Unlike Sentry-Dynamic.xcframework (which uses xcodebuild archive and gets dSYMs for free), this manual relink step never ran dsymutil to extract debug symbols.

Changes

Scripts:

  • build-dynamic-framework-sentryobjc.sh — run dsymutil to extract dSYMs after linking, then strip -x to remove debug symbols from the binary
  • assemble-xcframework-sentryobjc.sh — detect dSYM bundles alongside frameworks and pass them via -debug-symbols (absolute path) to xcodebuild -create-xcframework

CI workflows:

  • build-sentryobjc-static-slices.yml — also build the dynamic framework on the same runner so dsymutil can access the .o files from the xcodebuild archive step. Tar the framework + dSYM to preserve macOS framework symlinks through artifact upload
  • assemble-sentryobjc-dynamic-xcframework.yml — download and extract pre-built dynamic framework slices instead of re-linking from static libraries

Housekeeping:

  • file-filters.yml — replace stale workflow and script references with current SentryObjC build pipeline files

Fixes #8035

@itaybre itaybre added the ready-to-merge Use this label to trigger all PR workflows label Jun 10, 2026
@sentry

sentry Bot commented Jun 10, 2026

Copy link
Copy Markdown

📲 Install Builds

iOS

🔗 App Name App ID Version Configuration
SDK-Size io.sentry.sample.SDK-Size 9.17.0 (1) Release

⚙️ sentry-cocoa Build Distribution Settings

@codecov

codecov Bot commented Jun 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 87.307%. Comparing base (9787f05) to head (a6b87b2).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files

Impacted file tree graph

@@              Coverage Diff              @@
##              main     #8036       +/-   ##
=============================================
- Coverage   87.313%   87.307%   -0.006%     
=============================================
  Files          554       554               
  Lines        31986     31987        +1     
  Branches     13155     13163        +8     
=============================================
- Hits         27928     27927        -1     
- Misses        4010      4012        +2     
  Partials        48        48               

see 4 files with indirect coverage changes


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 9787f05...a6b87b2. Read the comment docs.

@github-actions

github-actions Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Performance metrics 🚀

  Plain With Sentry Diff
Startup time 1240.12 ms 1268.28 ms 28.15 ms
Size 24.14 KiB 1.18 MiB 1.15 MiB

Baseline results on branch: main

Startup times

Revision Plain With Sentry Diff
6c64f68 1235.80 ms 1272.35 ms 36.55 ms
ccf353a 1233.79 ms 1268.77 ms 34.98 ms
58e87fd 1234.27 ms 1262.09 ms 27.82 ms
9da166b 1222.40 ms 1250.24 ms 27.84 ms
adef457 1229.45 ms 1262.67 ms 33.22 ms
5e4d0a6 1230.40 ms 1255.44 ms 25.04 ms
ffb6adc 1218.60 ms 1247.47 ms 28.87 ms
09627e8 1223.68 ms 1261.95 ms 38.27 ms
bdd8e0e 1233.35 ms 1266.96 ms 33.60 ms
e3147fd 1227.15 ms 1257.79 ms 30.63 ms

App size

Revision Plain With Sentry Diff
6c64f68 24.14 KiB 1.17 MiB 1.14 MiB
ccf353a 24.14 KiB 1.17 MiB 1.15 MiB
58e87fd 24.14 KiB 1.17 MiB 1.14 MiB
9da166b 24.14 KiB 1.16 MiB 1.14 MiB
adef457 24.14 KiB 1.15 MiB 1.13 MiB
5e4d0a6 24.14 KiB 1.17 MiB 1.15 MiB
ffb6adc 24.14 KiB 1.15 MiB 1.12 MiB
09627e8 24.14 KiB 1.17 MiB 1.14 MiB
bdd8e0e 24.14 KiB 1.16 MiB 1.13 MiB
e3147fd 24.14 KiB 1.17 MiB 1.14 MiB

Previous results on branch: fix/sentryobjc-dsyms

Startup times

Revision Plain With Sentry Diff
d3e6e85 1235.87 ms 1260.63 ms 24.75 ms
7369a2e 1219.63 ms 1255.96 ms 36.32 ms

App size

Revision Plain With Sentry Diff
d3e6e85 24.14 KiB 1.18 MiB 1.16 MiB
7369a2e 24.14 KiB 1.18 MiB 1.15 MiB

@itaybre itaybre changed the title fix: add dSYM generation for SentryObjC xcframework fix: ship dSYMs in SentryObjC-Dynamic xcframework Jun 11, 2026
@itaybre itaybre force-pushed the fix/sentryobjc-dsyms branch from f377ad4 to 636015e Compare June 11, 2026 02:29
Comment thread CHANGELOG.md Outdated
@itaybre itaybre marked this pull request as ready for review June 11, 2026 03:05

@philprime philprime left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you for fixing this

Comment thread .github/workflows/build-sentryobjc-slices.yml
itaybre added 8 commits June 11, 2026 10:26
Generate dSYMs via dsymutil after linking the SentryObjC dynamic
framework binary, then strip debug symbols from the binary itself.
Include dSYMs when assembling the xcframework via -debug-symbols.

Fixes #8035
Replace stale workflow and script references with the
current SentryObjC build pipeline files.
Move the dynamic framework linking step into the static
slice build job so dsymutil can access the .o files from
the xcodebuild archive. Previously, the linking ran in a
separate assembly job where those object files were gone,
producing empty dSYMs that xcodebuild -create-xcframework
rejected.

Each per-SDK slice runner now also produces a dynamic
framework with a valid dSYM. The assembly job downloads
pre-built frameworks instead of re-linking from static
libraries.
xcodebuild -create-xcframework rejects relative paths
for -debug-symbols. Resolve to absolute before passing.
actions/upload-artifact flattens symlinks, breaking the
versioned macOS framework layout. Tar the framework and
dSYM before upload, extract after download.
The workflow now builds both static and dynamic slices,
so drop "static" from the name. Update all references in
release.yml, file-filters.yml, and build docs.
@itaybre itaybre force-pushed the fix/sentryobjc-dsyms branch from 07b2296 to c8c5f5b Compare June 11, 2026 13:27
@github-actions

Copy link
Copy Markdown
Contributor

🚨 Detected changes in high risk code 🚨

High-risk code can easily blow up and is hard to test. We had severe bugs in the past. Be extra careful when changing these files, and have an extra careful look at these:

  • .github/file-filters.yml

@itaybre itaybre enabled auto-merge (squash) June 11, 2026 13:48
@itaybre itaybre merged commit d6af355 into main Jun 11, 2026
254 checks passed
@itaybre itaybre deleted the fix/sentryobjc-dsyms branch June 11, 2026 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Use this label to trigger all PR workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SentryObjC artifacts ship no dSYMs

2 participants