Skip to content

feat(build): Support dSYMs with IPA uploads - #3393

Open
jamieQ wants to merge 4 commits into
masterfrom
codex/ipa-dsym-upload
Open

feat(build): Support dSYMs with IPA uploads#3393
jamieQ wants to merge 4 commits into
masterfrom
codex/ipa-dsym-upload

Conversation

@jamieQ

@jamieQ jamieQ commented Aug 13, 2026

Copy link
Copy Markdown
Member

Adds support for a new --dsym option when uploading IPA files through the build command. This allows clients to associate app debug symbols with an IPA upload (which typically does not include them). Internally the uploader follows the existing logic to construct a synthetic XCArchive, but will copy the specified dSYM bundles it finds into that archive before uploading. This will give clients a better experience when they upload builds that have undergone "app thinning" since they will not have to perform the synthetic archive construction themselves.

Refs EME-1285

@github-actions

github-actions Bot commented Aug 13, 2026

Copy link
Copy Markdown
Contributor
Messages
📖 Do not forget to update Sentry-docs with your feature once the pull request gets approved.

Generated by 🚫 dangerJS against d476dc9

@linear-code

linear-code Bot commented Aug 14, 2026

Copy link
Copy Markdown

EME-1285

@jamieQ
jamieQ marked this pull request as ready for review August 14, 2026 15:30
@jamieQ
jamieQ requested review from a team and szokeasaurusrex as code owners August 14, 2026 15:30

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 0e998bd. Configure here.

Comment thread src/utils/build/apple.rs
Comment thread src/utils/build/apple.rs
let root = extracted
.as_ref()
.map_or(dsym_input, |temp_dir| temp_dir.path());
let bundles = discover_dsym_bundles(root, extracted.is_some())?;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Bug: The dSYM discovery logic inconsistently handles wrapper directories. It unwraps them for ZIP inputs but not for directory inputs, causing unexpected failures for valid directory structures.
Severity: LOW

Suggested Fix

Modify copy_dsym_input to handle directory and ZIP inputs consistently. Pass true for the allow_wrapper argument to discover_dsym_bundles for both input types, allowing the function to search within a single wrapper subdirectory regardless of input format.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: src/utils/build/apple.rs#L197

Potential issue: There is an inconsistency in how dSYM bundles are processed based on
the input type. When a ZIP file is provided, the `discover_dsym_bundles` function is
called with `allow_wrapper` set to `true`, allowing it to look inside a single top-level
"wrapper" directory. However, when a directory path is provided, `allow_wrapper` is
`false`, causing it to fail if bundles are nested inside a single subdirectory. This is
confusing because the same directory structure works when zipped but fails when passed
as a directory path, leading to a "No .dSYM bundles found in directory" error.

Did we get this right? 👍 / 👎 to inform future reviews.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants