feat(core): Add disableAutoUpload option to Expo plugin#6195
Conversation
Closes #3552 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Semver Impact of This PR⚪ None (no version bump detected) 📋 Changelog PreviewThis is how your changes will appear in the changelog.
🤖 This preview updates automatically when you update the PR. |
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@sentry review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit e359bd2. Configure here.
Android (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| bc0d8cf+dirty | 412.37 ms | 466.26 ms | 53.89 ms |
| b9bebee+dirty | 438.86 ms | 452.21 ms | 13.35 ms |
| 5c1e987+dirty | 423.52 ms | 471.64 ms | 48.12 ms |
| 71abba0+dirty | 496.54 ms | 525.16 ms | 28.63 ms |
| 5569641+dirty | 406.43 ms | 428.51 ms | 22.08 ms |
| 3b6e9f9+dirty | 442.70 ms | 486.44 ms | 43.74 ms |
| 6177334+dirty | 408.16 ms | 441.14 ms | 32.98 ms |
| 2c735cc+dirty | 414.09 ms | 438.47 ms | 24.38 ms |
| ef27341+dirty | 412.94 ms | 443.98 ms | 31.04 ms |
| 0d9949d+dirty | 403.57 ms | 437.00 ms | 33.43 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| bc0d8cf+dirty | 48.30 MiB | 53.48 MiB | 5.18 MiB |
| b9bebee+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 5c1e987+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| 71abba0+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 5569641+dirty | 48.30 MiB | 53.48 MiB | 5.18 MiB |
| 3b6e9f9+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 6177334+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 2c735cc+dirty | 43.75 MiB | 48.08 MiB | 4.33 MiB |
| ef27341+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| 0d9949d+dirty | 43.75 MiB | 48.13 MiB | 4.37 MiB |
📲 Install BuildsAndroid
|
iOS (legacy) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3817909+dirty | 1183.90 ms | 1187.50 ms | 3.60 ms |
| 44c8b3f+dirty | 3823.85 ms | 1207.66 ms | -2616.19 ms |
| b0d3373+dirty | 3831.75 ms | 1227.29 ms | -2604.46 ms |
| 7d6fd3a+dirty | 1223.29 ms | 1229.57 ms | 6.28 ms |
| 6176a94+dirty | 3836.50 ms | 1217.64 ms | -2618.86 ms |
| 5c1e987+dirty | 1204.30 ms | 1222.15 ms | 17.85 ms |
| 3d377b5+dirty | 1218.48 ms | 1219.51 ms | 1.03 ms |
| 7d8c8bd+dirty | 3837.24 ms | 1215.51 ms | -2621.73 ms |
| 4966363+dirty | 3854.04 ms | 1231.55 ms | -2622.50 ms |
| 5fe1c6c+dirty | 1220.79 ms | 1217.63 ms | -3.16 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3817909+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 44c8b3f+dirty | 5.15 MiB | 6.66 MiB | 1.51 MiB |
| b0d3373+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 7d6fd3a+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 6176a94+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 5c1e987+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 3d377b5+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 7d8c8bd+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 4966363+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 5fe1c6c+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
iOS (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3817909+dirty | 1210.76 ms | 1215.64 ms | 4.89 ms |
| 44c8b3f+dirty | 3849.24 ms | 1209.94 ms | -2639.31 ms |
| b0d3373+dirty | 3842.49 ms | 1218.49 ms | -2624.00 ms |
| 7d6fd3a+dirty | 1210.89 ms | 1217.63 ms | 6.74 ms |
| 6176a94+dirty | 3854.15 ms | 1221.77 ms | -2632.38 ms |
| 5c1e987+dirty | 1208.43 ms | 1220.72 ms | 12.29 ms |
| 3d377b5+dirty | 1201.55 ms | 1201.80 ms | 0.25 ms |
| 7d8c8bd+dirty | 3847.98 ms | 1230.77 ms | -2617.21 ms |
| 4966363+dirty | 3863.07 ms | 1227.19 ms | -2635.88 ms |
| 5fe1c6c+dirty | 1201.36 ms | 1209.15 ms | 7.78 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| 3817909+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 44c8b3f+dirty | 5.15 MiB | 6.66 MiB | 1.51 MiB |
| b0d3373+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 7d6fd3a+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
| 6176a94+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 5c1e987+dirty | 3.38 MiB | 4.73 MiB | 1.35 MiB |
| 3d377b5+dirty | 3.38 MiB | 4.76 MiB | 1.38 MiB |
| 7d8c8bd+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 4966363+dirty | 5.15 MiB | 6.68 MiB | 1.53 MiB |
| 5fe1c6c+dirty | 3.38 MiB | 4.77 MiB | 1.39 MiB |
Android (new) Performance metrics 🚀
|
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b9bebee+dirty | 500.50 ms | 536.42 ms | 35.92 ms |
| 71abba0+dirty | 411.04 ms | 453.67 ms | 42.63 ms |
| 5569641+dirty | 465.92 ms | 532.22 ms | 66.30 ms |
| 3b6e9f9+dirty | 442.39 ms | 486.44 ms | 44.05 ms |
| 6177334+dirty | 404.80 ms | 456.74 ms | 51.94 ms |
| ef27341+dirty | 519.02 ms | 553.42 ms | 34.40 ms |
| 23598c3+dirty | 371.92 ms | 420.65 ms | 48.74 ms |
| a0d8cf8+dirty | 533.71 ms | 564.25 ms | 30.54 ms |
| 7ac3378+dirty | 410.67 ms | 442.60 ms | 31.92 ms |
| c004dae+dirty | 404.60 ms | 430.67 ms | 26.07 ms |
App size
| Revision | Plain | With Sentry | Diff |
|---|---|---|---|
| b9bebee+dirty | 48.30 MiB | 53.58 MiB | 5.28 MiB |
| 71abba0+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 5569641+dirty | 48.30 MiB | 53.48 MiB | 5.18 MiB |
| 3b6e9f9+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| 6177334+dirty | 48.30 MiB | 53.54 MiB | 5.23 MiB |
| ef27341+dirty | 48.30 MiB | 53.54 MiB | 5.24 MiB |
| 23598c3+dirty | 43.94 MiB | 49.02 MiB | 5.08 MiB |
| a0d8cf8+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
| 7ac3378+dirty | 43.94 MiB | 48.99 MiB | 5.05 MiB |
| c004dae+dirty | 48.30 MiB | 53.49 MiB | 5.19 MiB |
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 00340cc. Configure here.
…iters On re-prebuild, addDisableAutoUploadToExistingScript was prepending the export before the " delimiter that wraps shell script content in pbxproj files. This places it inside the delimiter, consistent with the fresh-prebuild path. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
| authToken?: string; | ||
| url?: string; | ||
| useNativeInit?: boolean; | ||
| disableAutoUpload?: boolean; |
There was a problem hiding this comment.
might be worth checking the warden checks, not sure why it didnt post as a comment
There was a problem hiding this comment.
Thank you for catching this @lucas-zimerman. Updated with eaa6ae2
…alse When disableAutoUpload was set to true and then changed back to false, the injected export/override was left in place on re-prebuild, silently keeping uploads disabled. Now both iOS and Android remove the injection when disableAutoUpload is false. Also removes the misleading "script already exists" warning that fired after successfully injecting the auto-upload export on iOS. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

📢 Type of change
📜 Description
Adds a
disableAutoUploadoption to the Expo plugin (withSentry) that disables source map and debug symbol uploads at build time.iOS: Injects
export SENTRY_DISABLE_AUTO_UPLOAD=trueinto both Xcode build phase shell scripts ("Bundle React Native code and images" and "Upload Debug Symbols to Sentry"). This means the env var is baked into the Xcode project afterexpo prebuild, so builds from the Xcode GUI work without needing env var access.Android: Overrides
project.ext.shouldSentryAutoUploadGeneralto returnfalseinbuild.gradle, bypassing theSystem.getenvcheck insentry.gradle.Both platforms handle re-prebuild (already configured projects) and are idempotent — running prebuild multiple times with the option enabled won't duplicate the injected code.
Note: This option permanently disables uploads for all builds from the generated native project. To re-enable uploads, remove the option and run
npx expo prebuild --clean. For per-build control, users should use theSENTRY_DISABLE_AUTO_UPLOADenv var instead.💡 Motivation and Context
Closes #3552
Expo managed workflow users building from the Xcode GUI after
expo prebuildcannot easily set theSENTRY_DISABLE_AUTO_UPLOADenvironment variable, which causes upload failure warnings during local development builds. While workarounds exist (CLI env var prefix, EAS build profiles), a first-class plugin option provides a better developer experience.💚 How did you test it?
disableAutoUpload: falseno-op\nvs literal\\nafter JSON round-trip)📝 Checklist
sendDefaultPIIis enableddisableAutoUploadExpo plugin option sentry-docs#17830🔮 Next steps