Repository navigation
fix(ios): Preserve quoted Expo bundle script invocations - #6796
Merged
antonis merged 2 commits intoSep 29, 2026
Merged
Conversation
eliotgevers
force-pushed
the
fix/expo-ios-preserve-script-quotes
branch
from
September 28, 2026 20:58
6b8ceac to
50d3fa8
Compare
eliotgevers
force-pushed
the
fix/expo-ios-preserve-script-quotes
branch
from
September 28, 2026 21:04
7ec51fc to
0f49028
Compare
eliotgevers
marked this pull request as ready for review
September 28, 2026 21:04
eliotgevers
requested review from
alwx,
antonis and
lucas-zimerman
as code owners
September 28, 2026 21:04
antonis
approved these changes
Sep 29, 2026
antonis
left a comment
Contributor
There was a problem hiding this comment.
LGTM 🚀
Thank you for your contribution! This will ship with the next release.
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📢 Type of change
📜 Description
Preserve the outer double quotes when Expo's
react-native-xcode.shinvocation is already quoted. Trim surrounding whitespace and continue quoting older unquoted invocations once.Adding a second pair of quotes exposes a command substitution's resolved path to word splitting. In a project directory containing spaces, Sentry then receives a truncated React Native script path and the bundle phase fails.
Includes four regression cases and a changelog entry. No public API, dependency, wizard, or documentation changes are needed.
💡 Motivation and Context
Fixes #6795. This covers the remaining already-quoted-input case after #6604 while keeping its unquoted-template behavior.
The fix applies when generating the Sentry bundle invocation. Projects with an already-generated malformed phase need
npx expo prebuild --cleanto regenerate it; the existing conservative migration of custom/previous phases is unchanged.💚 How did you test it?
disableAutoUpload.yarn test: 2,038 SDK tests, 340 tools tests, and 1 sample test passed. Focused Expo plugin/shell tests: 146 passed.PLATFORM=ios yarn build,yarn circularDepCheck, and TypeScript/JavaScript lint passed. Fullyarn lintstopped at missingclang-format; Swift lint passed separately. Android replay-stub compilation was skipped by the build's iOS setting.Expo Quoting Repro: clean prebuild followed by execution of the generated Debug bundle phase through/bin/sh, using real Node resolution and installed scripts. Stock 8.28.0 exits 127 with a truncated path. The compiled candidate exits 0 and reaches React Native's script with bothdisableAutoUploadsettings. SDK 57.0.25's unquoted template was checked as a control.The generated Debug phase uses React Native's normal
SKIP_BUNDLINGbehavior. No full native compilation or Sentry upload was performed.📝 Checklist
sendDefaultPIIis enabled.🔮 Next steps
Implementation and the checks above were AI-assisted; final human review/testing under the contribution guide remains pending.
Upstream CI is awaiting maintainer approval for this fork. Changelog Preview stopped before processing the changelog because
actions/checkoutrefuses fork checkout in itspull_request_targetworkflow.