feat(build): Support dSYMs with IPA uploads - #3393
Conversation
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ 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.
| let root = extracted | ||
| .as_ref() | ||
| .map_or(dsym_input, |temp_dir| temp_dir.path()); | ||
| let bundles = discover_dsym_bundles(root, extracted.is_some())?; |
There was a problem hiding this comment.
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.

Adds support for a new
--dsymoption when uploading IPA files through thebuildcommand. 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