iOS debug files (`.dSYM`) for primary application package not automatically uploading using Expo plugin
What React Native libraries do you use?
React Native Web, Expo Application Services (EAS), Expo (mobile only)
Are you using sentry.io or on-premise?
sentry.io (SaS)
@sentry/react-native SDK Version
6.20.0
How does your development environment look like?
System:
OS: macOS 15.6
CPU: (10) arm64 Apple M1 Max
Memory: 99.55 MB / 64.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 20.18.3
path: /tmp/yarn--1761081184117-0.9973840234076763/node
Yarn:
version: 1.22.22
path: /tmp/yarn--1761081184117-0.9973840234076763/yarn
npm:
version: 10.8.2
path: /Users/estrattonbailey/.nvm/versions/node/v20.18.3/bin/npm
Watchman:
version: 2025.04.14.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.0
- iOS 26.0
- macOS 26.0
- tvOS 26.0
- visionOS 26.0
- watchOS 26.0
Android SDK:
API Levels:
- "28"
- "29"
- "31"
- "33"
- "34"
- "35"
Build Tools:
- 30.0.2
- 30.0.3
- 31.0.0
- 33.0.0
- 33.0.1
- 34.0.0
- 35.0.0
System Images:
- android-25 | Google APIs ARM 64 v8a
- android-25 | Google APIs Intel x86 Atom
- android-28 | Google ARM64-V8a Play ARM 64 v8a
- android-30 | Google Play Intel x86 Atom
- android-31 | Google APIs ARM 64 v8a
- android-33 | Google APIs ARM 64 v8a
- android-33 | Google Play ARM 64 v8a
- android-35 | Google Play ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2023.1 AI-231.9392.1.2311.11076708
Xcode:
version: 26.0.1/17A400
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.9
path: /usr/bin/javac
Ruby:
version: 3.4.5
path: /opt/homebrew/opt/ruby/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.0.2
wanted: ^20.0.2
react:
installed: 19.1.0
wanted: 19.1.0
react-native:
installed: 0.81.4
wanted: 0.81.4
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
iOS:
hermesEnabled: true
newArchEnabled: false
Sentry.init()
See full file here https://github.com/bluesky-social/social-app/blob/main/src/logger/sentry/setup/index.ts
import {init} from '@sentry/react-native'
import * as env from '#/env'
init({
enabled: !env.IS_DEV && !!env.SENTRY_DSN,
dsn: env.SENTRY_DSN,
environment: env.ENV, // production | development | testflight
dist: env.BUNDLE_IDENTIFIER,
release: env.RELEASE_VERSION,
ignoreErrors: [...],
sampleRate: env.IS_INTERNAL ? 1.0 : 0.1,
})
Steps to Reproduce
See our GitHub Action build step here https://github.com/bluesky-social/social-app/blob/main/.github/workflows/build-submit-ios.yml#L93-L101
- name: 🏗️ EAS Build
run: >
SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_RELEASE=${{ steps.env.outputs.EXPO_PUBLIC_RELEASE_VERSION }}
SENTRY_DIST=${{ steps.env.outputs.EXPO_PUBLIC_BUNDLE_IDENTIFIER }}
yarn use-build-number-with-bump
eas build -p ios
--profile ${{ inputs.profile || 'testflight' }}
--local --output build.ipa --non-interactive
During eas build, the xcode Build Phase that this library injects uploads debug files to Sentry.
Expected Result
We expect a Mach-O debug companion file to be uploaded for the Bluesky package.
Actual Result
We get a Mach-O executable for Bluesky, but no debug file. Other packages have both an executable and a debug file. See below for an example of a recent build.
I've been investigating this issue for the past day and have identified a solution that seems to work for us. I've implemented that and outlined the full details in https://github.com/bluesky-social/social-app/pull/9242, which I'll reproduce below.
Sentry definitely does its own work internally to get all the debug files. This happens during the
Upload Debug Symbols to Sentry, which is added by the Sentry Expo plugin to XCode's Build Phases. But it does not appear to find the.dSYMfiles for the mainBlueskybundle on its own.To output the
.dSYMfiles, oureas buildcommand has been updated from--output build.ipa(which outputs just the app bundle) to--output build.tar.gz. This produces a gzipped tarball that includes the.ipaand other artifacts.This tarball alone does not include the
.dSYMfiles. To include those, we need to addbuildArtifactPathsto theeas.jsonconfig. NOW after runningeas build, the tarball contains aBluesky.app.dSYM.zipfile.Manual upload
So now our build outputs a tarball, which we uncompress. We can then
eas submitthe included.ipa, and separately upload the.dSYM.zipto Sentry manually.
I'm sure we're missing something, but I'm not sure where to look. As noted in the PR, we were missing some required config (some additions to our Apple Privacy Manifest), but I believe we otherwise have Sentry configured in a standard fashion.
The manual upload seems to work fine for us for now, but I would love to have confirmation that this is a viable approach, or any ideas on what's missing that would allow Sentry to do this automatically.
If there's any other help or debugging I can provide, please let me know.
Working on some debug logs with SENTRY_LOG_LEVEL=debug, will post those when I have them.
Welp, guess they were swallowed at some point, so that wasn't much help. The full build is here: https://github.com/bluesky-social/social-app/actions/runs/18698396243/job/53321549688
Thank you for the detailed report @estrattonbailey 🙇 We will investigate this and iterate back.