Skip to content

Upgrade React Native from 0.83.9 to 0.84.1#461

Merged
wmathurin merged 10 commits into
forcedotcom:devfrom
wmathurin:rn-upgrade-0.84
Jun 5, 2026
Merged

Upgrade React Native from 0.83.9 to 0.84.1#461
wmathurin merged 10 commits into
forcedotcom:devfrom
wmathurin:rn-upgrade-0.84

Conversation

@wmathurin

Copy link
Copy Markdown
Contributor

Summary

Upgrades the Mobile SDK React Native support from RN 0.83.9 to 0.84.1. Tracks work item W-22698006.

Key changes in RN 0.84:

  • Hermes V1 as default engine
  • Hermes V1 as default engine
  • Precompiled iOS binaries (no longer building RN from source during pod install)
  • Legacy Architecture removed from iOS builds (RCT_REMOVE_LEGACY_ARCH=1 now default)
  • Several legacy Android bridge classes removed (none used by our bridge)
  • Node.js minimum raised to v22.11

This upgrade was unblocked by the new UI-driven test infrastructure (W-22797324), which eliminated the dependency on RN internals that previously required infrastructure work on every upgrade.

Changes

  • package.json: react-native 0.83.9 → 0.84.1, react 19.2.6 → 19.2.3, @react-native/* devDeps → 0.84.1, node >=20 → >=22
  • iosTests/package.json: same bumps
  • androidTests/package.json: same bumps; removed jsc-android and unused deps
  • android/build.gradle: react-android → 0.84.1
  • androidTests/android/app/build.gradle.kts: react-android/hermes-android → 0.84.1
  • iosTests/ios/SalesforceReactTestApp.xcodeproj/project.pbxproj: build settings after pod install with RN 0.84.1 (RCT_REMOVE_LEGACY_ARCH=1, SWIFT_ENABLE_EXPLICIT_MODULES=NO, new header paths)
  • .github/workflows/reusable-android-workflow.yaml: node 20 → 22; Firebase timeout 10m → 40m; --num-flaky-test-attempts=1; env vars for injection safety
  • Docs: update all RN version references, Node prereqs, and Android min API 28 → 31

Test Results

iOS Tests (XCUITest) — 35/35 ✅

Suite Tests Result
ReactHarnessTests 2
ReactOAuthTests 3
ReactNetTests 18
ReactSmartStoreTests 11
ReactMobileSyncTests 5
Total 35

Android Tests (UIAutomator) — 35/35 ✅

Suite Tests Result
ReactHarnessTests 2
ReactOAuthTests 3
ReactNetTests 18
ReactSmartStoreTests 11
ReactMobileSyncTests 5
Total 35

⚠️ Before Merging

The following package.json files currently point to wmathurin/SalesforceMobileSDK-ReactNative#rn-upgrade-0.84 to allow CI to pass during review. Revert to
forcedotcom/SalesforceMobileSDK-ReactNative#dev before merging:

  • iosTests/package.json
  • androidTests/package.json

wmathurin added 10 commits June 1, 2026 17:53
- react-native: 0.83.9 → 0.84.1
- react: 19.2.6 → 19.2.3
- @react-native/* packages: 0.83.9 → 0.84.1
- react-android/hermes-android: 0.83.9 → 0.84.1
- Node.js minimum: 20 → 22
- TypeScript compiles cleanly
- iOS pod install succeeds (precompiled binaries)
- Android Gradle build succeeds
RN 0.84 precompiled binaries require pods in the app host target.
Test target uses inherit! :complete to get all dependencies.
RN 0.84's podspec_sources() returns headers-only when precompiled
binaries are enabled (default). Our RCTTest is custom code that must
always be compiled from source.
…' into rn-upgrade-0.84

# Conflicts:
#	iosTests/RCTTest/React-RCTTest.podspec
#	iosTests/ios/Podfile
#	iosTests/package.json
#	package.json
… URLs

- androidTests/package.json: bump react-native to 0.84.1, react to 19.2.3,
  @react-native/* devDeps to 0.84.1, remove jsc-android/unused deps,
  use git URL for react-native-force pointing to rn-upgrade-0.84
- iosTests/package.json: update react-native-force to git URL for rn-upgrade-0.84
- reusable-android-workflow.yaml: node-version 20 → 22
- Add header search paths for ReactCommon, React-Fabric, React-NativeModulesApple
- Set RCT_REMOVE_LEGACY_ARCH=1 (new default in RN 0.84)
- Set SWIFT_ENABLE_EXPLICIT_MODULES=NO
# Conflicts:
#	.github/workflows/reusable-android-workflow.yaml
#	androidTests/package.json
#	iosTests/package.json
- README.md: bump RN version, Node >=20 → >=22, Android min 28 → 31
- docs/README.md: version compat table 0.83.9 → 0.84.1, Android min 31
- docs/ARCHITECTURE.md: update package.json example to 0.84.1
- docs/ios/README.md: RN 0.83.9 → 0.84.1, Node 20+ → 22+
- docs/ios-tests/PREPAREIOS_DETAILED.md: update example versions
- docs/android-tests/README.md: Node 20 → 22, API 28 → 31
@wmathurin

Copy link
Copy Markdown
Contributor Author

CI will only work after merging because we changed node version from 20 to 22.

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
TestsPassed ✅SkippedFailed
iOS ^18 Test Results35 ran35 ✅
TestResult
No test annotations available

@github-actions

github-actions Bot commented Jun 5, 2026

Copy link
Copy Markdown
TestsPassed ✅SkippedFailed
iOS ^26 Test Results35 ran35 ✅
TestResult
No test annotations available

Comment thread docs/README.md
| React Native SDK | React Native | iOS SDK | Android SDK | iOS Min | Android Min |
|-----------------|--------------|---------|-------------|---------|-------------|
| 14.0.0 | 0.83.9 | 14.0.0 | 14.0.0 | 18.0 | 28 (9.0) |
| 14.0.0 | 0.84.1 | 14.0.0 | 14.0.0 | 18.0 | 31 (12.0) |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch.

@wmathurin wmathurin merged commit 1ed24bb into forcedotcom:dev Jun 5, 2026
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants