sentry-react-native icon indicating copy to clipboard operation
sentry-react-native copied to clipboard

iOS debug files (`.dSYM`) for primary application package not automatically uploading using Expo plugin

Open estrattonbailey opened this issue 4 months ago • 4 comments

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.

Image

estrattonbailey avatar Oct 21 '25 21:10 estrattonbailey

RN-370

linear[bot] avatar Oct 21 '25 21:10 linear[bot]

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 .dSYM files for the main Bluesky bundle on its own.

To output the .dSYM files, our eas build command 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 .ipa and other artifacts.

This tarball alone does not include the .dSYM files. To include those, we need to add buildArtifactPaths to the eas.json config. NOW after running eas build, the tarball contains a Bluesky.app.dSYM.zip file.

Manual upload

So now our build outputs a tarball, which we uncompress. We can then eas submit the included .ipa, and separately upload the .dSYM.zip to 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.

estrattonbailey avatar Oct 21 '25 21:10 estrattonbailey

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

estrattonbailey avatar Oct 21 '25 21:10 estrattonbailey

Thank you for the detailed report @estrattonbailey 🙇 We will investigate this and iterate back.

antonis avatar Oct 23 '25 08:10 antonis