From 1e86de660e4c074cec40974bbf800449c3418bcb Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Thu, 22 Oct 2026 14:53:00 +0200 Subject: [PATCH 1/2] ci(e2e): Build the oldest RN E2E app with 0.73.11 instead of 0.71.19 RN 0.71's AGP 7.3.1 bundles D8 3.3.83, which crashes dexing sentry-android 8.61.1 (JDK 21 javac writes nameless MethodParameters entries). RN 0.73.11 uses AGP 8.1.1 (D8 8.1.65), which dexes it fine. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/e2e-v2.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index c0fda2cd86..7863747352 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -54,7 +54,7 @@ jobs: strategy: fail-fast: false # keeps matrix running if one fails matrix: - rn-version: ["0.71.19", "0.88.0"] + rn-version: ["0.73.11", "0.88.0"] rn-architecture: ["legacy", "new"] platform: ["android", "ios"] build-type: ["production"] @@ -63,7 +63,7 @@ jobs: include: # Use Xcode 16 (macos-15) for older RN versions - platform: ios - rn-version: "0.71.19" + rn-version: "0.73.11" runs-on: macos-15-xlarge # Use Xcode 26 (macos-26) for newer RN versions - platform: ios @@ -73,13 +73,13 @@ jobs: runs-on: ubuntu-24.04 exclude: # exclude all rn versions lower than 0.80.0 for new architecture - - rn-version: "0.71.19" + - rn-version: "0.73.11" rn-architecture: "new" # exlude old rn version for use frameworks builds (to minimalize the matrix) - - rn-version: "0.71.19" + - rn-version: "0.73.11" platform: "ios" ios-use-frameworks: "static" - - rn-version: "0.71.19" + - rn-version: "0.73.11" platform: "ios" ios-use-frameworks: "dynamic" # use frameworks is ios only feature From 024e3e226476f248a2637fb8e258b00ff889fe3e Mon Sep 17 00:00:00 2001 From: Antonis Lilis Date: Thu, 22 Oct 2026 15:41:10 +0200 Subject: [PATCH 2/2] ci(e2e): Pin json gem whenever the Gemfile caps activesupport below 7.1 ActiveSupport 7.0's JSON encoder passes `quirks_mode: true`, which json 3.x removed, so `pod install` fails with "unknown keyword: quirks_mode" for any RN Gemfile that keeps activesupport < 7.1 (0.71-0.74), not only RN < 0.72. Co-Authored-By: Claude Opus 5.5 --- dev-packages/e2e-tests/cli.mjs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/dev-packages/e2e-tests/cli.mjs b/dev-packages/e2e-tests/cli.mjs index 0abd3f765a..c8109f481e 100755 --- a/dev-packages/e2e-tests/cli.mjs +++ b/dev-packages/e2e-tests/cli.mjs @@ -105,18 +105,20 @@ function patchBoostIfNeeded(rnVersion, patchScriptsDir) { }); } -// RN < 0.72 runs its iOS codegen while CocoaPods evaluates the Podfile -// (`use_react_native!`), and that codegen passes `quirks_mode: true` to the -// json gem. json 3.0.0 removed the `quirks_mode` option, so a fresh -// `bundle install` (the rn-diff-purge Gemfile pins cocoapods but not json) -// resolves json 3.0.0 and pod install fails with -// "Invalid `Podfile` file: unknown keyword: quirks_mode.". Pin json below 3.0 -// for these older RN versions. Newer RN codegen dropped the option and is -// unaffected. +// Older RN Gemfiles cap activesupport below 7.1, which resolves activesupport +// 7.0.x. Its JSON encoder passes `quirks_mode: true` to the json gem, which RN's +// iOS codegen hits while CocoaPods evaluates the Podfile (`use_react_native!`). +// json 3.0.0 removed the `quirks_mode` option, so a fresh `bundle install` (the +// rn-diff-purge Gemfile doesn't pin json) resolves json 3.x and pod install +// fails with "Invalid `Podfile` file: unknown keyword: quirks_mode.". Pin json +// below 3.0 whenever the Gemfile keeps activesupport below 7.1. function pinJsonGemIfNeeded(rnVersion, appDir) { - const versionNumber = parseFloat(rnVersion.replace(/[^\d.]/g, '')); const gemfilePath = `${appDir}/Gemfile`; - if (platform !== 'ios' || versionNumber >= 0.72 || !fs.existsSync(gemfilePath)) { + if (platform !== 'ios' || !fs.existsSync(gemfilePath)) { + return; + } + const gemfile = fs.readFileSync(gemfilePath, 'utf-8'); + if (!/gem\s+['"]activesupport['"].*['"]<\s*7\.1(\.0)?['"]/.test(gemfile)) { return; } console.log(`Pinning json gem < 3.0 for React Native ${rnVersion}`);