From 124dc1eea767f7051b5dd579d90d584205d51a2f Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 4 May 2026 14:49:07 +0200 Subject: [PATCH 1/5] Fix PNPM iOS Upload Debug Symbol fail in EAS Build --- packages/core/scripts/sentry-xcode-debug-files.sh | 8 +------- packages/core/scripts/sentry-xcode.sh | 7 +------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/core/scripts/sentry-xcode-debug-files.sh b/packages/core/scripts/sentry-xcode-debug-files.sh index 8bbd18a6f7..3533962cb3 100755 --- a/packages/core/scripts/sentry-xcode-debug-files.sh +++ b/packages/core/scripts/sentry-xcode-debug-files.sh @@ -29,7 +29,6 @@ RN_PROJECT_ROOT="${SENTRY_PROJECT_ROOT:-${PROJECT_DIR}/..}" [ -z "$SENTRY_PROPERTIES" ] && export SENTRY_PROPERTIES=sentry.properties [ -z "$SENTRY_DOTENV_PATH" ] && [ -f "$RN_PROJECT_ROOT/.env.sentry-build-plugin" ] && export SENTRY_DOTENV_PATH="$RN_PROJECT_ROOT/.env.sentry-build-plugin" -[ -z "$SENTRY_CLI_EXECUTABLE" ] && SENTRY_CLI_PACKAGE_PATH=$("$LOCAL_NODE_BINARY" --print "require('path').dirname(require.resolve('@sentry/cli/package.json'))") [ -z "$SOURCEMAP_FILE" ] && export SOURCEMAP_FILE="$DERIVED_FILE_DIR/main.jsbundle.map" if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then @@ -44,12 +43,7 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - CLI_FILE_TEXT=$(cat "$PNPM_BIN_PATH") - - # Filter where PNPM stored Sentry CLI - NODE_PATH_LINE=$(echo "$CLI_FILE_TEXT" | grep -oE 'NODE_PATH="[^"]+"' | head -n1) - NODE_PATH_VALUE=$(echo "$NODE_PATH_LINE" | sed -E 's/^NODE_PATH="([^"]+)".*/\1/') - SENTRY_CLI_PACKAGE_PATH=${NODE_PATH_VALUE%%/bin*} + SENTRY_CLI_PACKAGE_PATH="$PNPM_BIN_PATH" fi fi fi diff --git a/packages/core/scripts/sentry-xcode.sh b/packages/core/scripts/sentry-xcode.sh index ca83e7f2d9..c6d922f606 100755 --- a/packages/core/scripts/sentry-xcode.sh +++ b/packages/core/scripts/sentry-xcode.sh @@ -38,12 +38,7 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - CLI_FILE_TEXT=$(cat "$PNPM_BIN_PATH") - - # Filter where PNPM stored Sentry CLI - NODE_PATH_LINE=$(echo "$CLI_FILE_TEXT" | grep -oE 'NODE_PATH="[^"]+"' | head -n1) - NODE_PATH_VALUE=$(echo "$NODE_PATH_LINE" | sed -E 's/^NODE_PATH="([^"]+)".*/\1/') - SENTRY_CLI_PACKAGE_PATH=${NODE_PATH_VALUE%%/bin*} + SENTRY_CLI_PACKAGE_PATH="$PNPM_BIN_PATH" fi fi fi From c35ab54ccc3bd5cddeba029fdc389a49442fde15 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 4 May 2026 14:55:58 +0200 Subject: [PATCH 2/5] Fixes --- packages/core/scripts/sentry-xcode-debug-files.sh | 5 ++++- packages/core/scripts/sentry-xcode.sh | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/core/scripts/sentry-xcode-debug-files.sh b/packages/core/scripts/sentry-xcode-debug-files.sh index 3533962cb3..74120b470e 100755 --- a/packages/core/scripts/sentry-xcode-debug-files.sh +++ b/packages/core/scripts/sentry-xcode-debug-files.sh @@ -43,7 +43,10 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - SENTRY_CLI_PACKAGE_PATH="$PNPM_BIN_PATH" + FIRST_NODE_PATH=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^":]+).*/\1/') + if [ -n "$FIRST_NODE_PATH" ]; then + SENTRY_CLI_PACKAGE_PATH="${FIRST_NODE_PATH%/node_modules}/bin/sentry-cli" + fi fi fi fi diff --git a/packages/core/scripts/sentry-xcode.sh b/packages/core/scripts/sentry-xcode.sh index c6d922f606..2b6f598556 100755 --- a/packages/core/scripts/sentry-xcode.sh +++ b/packages/core/scripts/sentry-xcode.sh @@ -38,7 +38,10 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - SENTRY_CLI_PACKAGE_PATH="$PNPM_BIN_PATH" + FIRST_NODE_PATH=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^":]+).*/\1/') + if [ -n "$FIRST_NODE_PATH" ]; then + SENTRY_CLI_PACKAGE_PATH="${FIRST_NODE_PATH%/node_modules}/bin/sentry-cli" + fi fi fi fi From 6118dd8c9553dc30e07e3f105f04e6a2a61932dd Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 4 May 2026 16:21:38 +0200 Subject: [PATCH 3/5] Fix --- packages/core/scripts/sentry-xcode-debug-files.sh | 9 ++++++--- packages/core/scripts/sentry-xcode.sh | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/core/scripts/sentry-xcode-debug-files.sh b/packages/core/scripts/sentry-xcode-debug-files.sh index 74120b470e..9333b91688 100755 --- a/packages/core/scripts/sentry-xcode-debug-files.sh +++ b/packages/core/scripts/sentry-xcode-debug-files.sh @@ -43,9 +43,12 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - FIRST_NODE_PATH=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^":]+).*/\1/') - if [ -n "$FIRST_NODE_PATH" ]; then - SENTRY_CLI_PACKAGE_PATH="${FIRST_NODE_PATH%/node_modules}/bin/sentry-cli" + NODE_PATH_VALUE=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^"]*)"/\1/') + # Strip everything from the first `@sentry/cli/` onwards. If `%%` finds no match + # PREFIX equals NODE_PATH_VALUE and we leave SENTRY_CLI_PACKAGE_PATH unset. + SENTRY_CLI_PREFIX="${NODE_PATH_VALUE%%@sentry/cli/*}" + if [ -n "$NODE_PATH_VALUE" ] && [ "$SENTRY_CLI_PREFIX" != "$NODE_PATH_VALUE" ]; then + SENTRY_CLI_PACKAGE_PATH="${SENTRY_CLI_PREFIX}@sentry/cli/bin/sentry-cli" fi fi fi diff --git a/packages/core/scripts/sentry-xcode.sh b/packages/core/scripts/sentry-xcode.sh index 2b6f598556..f2e06e52f4 100755 --- a/packages/core/scripts/sentry-xcode.sh +++ b/packages/core/scripts/sentry-xcode.sh @@ -38,9 +38,12 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then PNPM_BIN_PATH="$PWD/../node_modules/@sentry/react-native/node_modules/.bin/sentry-cli" if [ -f "$PNPM_BIN_PATH" ]; then - FIRST_NODE_PATH=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^":]+).*/\1/') - if [ -n "$FIRST_NODE_PATH" ]; then - SENTRY_CLI_PACKAGE_PATH="${FIRST_NODE_PATH%/node_modules}/bin/sentry-cli" + NODE_PATH_VALUE=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^"]*)"/\1/') + # Strip everything from the first `@sentry/cli/` onwards. If `%%` finds no match + # PREFIX equals NODE_PATH_VALUE and we leave SENTRY_CLI_PACKAGE_PATH unset. + SENTRY_CLI_PREFIX="${NODE_PATH_VALUE%%@sentry/cli/*}" + if [ -n "$NODE_PATH_VALUE" ] && [ "$SENTRY_CLI_PREFIX" != "$NODE_PATH_VALUE" ]; then + SENTRY_CLI_PACKAGE_PATH="${SENTRY_CLI_PREFIX}@sentry/cli/bin/sentry-cli" fi fi fi From 50f61db0c2fb67b3caeda3803336140edcc295e5 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 4 May 2026 16:53:11 +0200 Subject: [PATCH 4/5] Fix --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc634f92b4..5837019405 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ > make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first. +## Unreleased + +### Fixes + +- Fix the issue with uploading iOS Debug Symbols in EAS Build when using pnpm ([#6076](https://github.com/getsentry/sentry-react-native/issues/6076)) + ## 8.10.0 ### Features From cef28981426e007d18f2ac4008bb7818cbd8eed7 Mon Sep 17 00:00:00 2001 From: Alexander Pantiukhov Date: Mon, 4 May 2026 16:56:41 +0200 Subject: [PATCH 5/5] Fix --- .../core/scripts/sentry-xcode-debug-files.sh | 16 ++++++++++------ packages/core/scripts/sentry-xcode.sh | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/packages/core/scripts/sentry-xcode-debug-files.sh b/packages/core/scripts/sentry-xcode-debug-files.sh index 9333b91688..fe65325aa6 100755 --- a/packages/core/scripts/sentry-xcode-debug-files.sh +++ b/packages/core/scripts/sentry-xcode-debug-files.sh @@ -44,12 +44,16 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then if [ -f "$PNPM_BIN_PATH" ]; then NODE_PATH_VALUE=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^"]*)"/\1/') - # Strip everything from the first `@sentry/cli/` onwards. If `%%` finds no match - # PREFIX equals NODE_PATH_VALUE and we leave SENTRY_CLI_PACKAGE_PATH unset. - SENTRY_CLI_PREFIX="${NODE_PATH_VALUE%%@sentry/cli/*}" - if [ -n "$NODE_PATH_VALUE" ] && [ "$SENTRY_CLI_PREFIX" != "$NODE_PATH_VALUE" ]; then - SENTRY_CLI_PACKAGE_PATH="${SENTRY_CLI_PREFIX}@sentry/cli/bin/sentry-cli" - fi + # Split on ':' and pick the first entry containing `@sentry/cli/`. Handling each + # entry separately avoids producing colon-joined garbage when the matching entry + # isn't the first one in NODE_PATH. + IFS=':' read -ra NODE_PATH_ENTRIES <<< "$NODE_PATH_VALUE" + for entry in "${NODE_PATH_ENTRIES[@]}"; do + if [[ "$entry" == *@sentry/cli/* ]]; then + SENTRY_CLI_PACKAGE_PATH="${entry%%@sentry/cli/*}@sentry/cli/bin/sentry-cli" + break + fi + done fi fi fi diff --git a/packages/core/scripts/sentry-xcode.sh b/packages/core/scripts/sentry-xcode.sh index f2e06e52f4..924b5141b2 100755 --- a/packages/core/scripts/sentry-xcode.sh +++ b/packages/core/scripts/sentry-xcode.sh @@ -39,12 +39,16 @@ if [ -z "$SENTRY_CLI_EXECUTABLE" ]; then if [ -f "$PNPM_BIN_PATH" ]; then NODE_PATH_VALUE=$(grep -oE 'NODE_PATH="[^"]+"' "$PNPM_BIN_PATH" | head -n1 | sed -E 's/^NODE_PATH="([^"]*)"/\1/') - # Strip everything from the first `@sentry/cli/` onwards. If `%%` finds no match - # PREFIX equals NODE_PATH_VALUE and we leave SENTRY_CLI_PACKAGE_PATH unset. - SENTRY_CLI_PREFIX="${NODE_PATH_VALUE%%@sentry/cli/*}" - if [ -n "$NODE_PATH_VALUE" ] && [ "$SENTRY_CLI_PREFIX" != "$NODE_PATH_VALUE" ]; then - SENTRY_CLI_PACKAGE_PATH="${SENTRY_CLI_PREFIX}@sentry/cli/bin/sentry-cli" - fi + # Split on ':' and pick the first entry containing `@sentry/cli/`. Handling each + # entry separately avoids producing colon-joined garbage when the matching entry + # isn't the first one in NODE_PATH. + IFS=':' read -ra NODE_PATH_ENTRIES <<< "$NODE_PATH_VALUE" + for entry in "${NODE_PATH_ENTRIES[@]}"; do + if [[ "$entry" == *@sentry/cli/* ]]; then + SENTRY_CLI_PACKAGE_PATH="${entry%%@sentry/cli/*}@sentry/cli/bin/sentry-cli" + break + fi + done fi fi fi