Conversation
… jobs - Bump default React Native to 0.84.0, React to 19.2.3, CLI to 20.1.0 - Extract version-mapping logic into scripts/versionMapping.js - Fix changeReactNativeVersion.js to also update @react-native/* and @react-native-community/cli* packages when switching versions - Add 55 tests (unit + integration) for the version-switch flow - Delete duplicate changeGradleVersion.js (consolidated) - Add Buildkite CI pipelines for RN 0.84 (Android + iOS) - Add isRN84OrHigher flag to rninfo.gradle Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
RN 0.84 ships precompiled xcframework binaries with legacy arch headers removed. Guard imports of RCTRootViewDelegate, RCTBridge+Private, RCTCxxBridgeDelegate and other legacy-only headers behind #ifndef RCT_NEW_ARCH_ENABLED / #if !RNN_RN_VERSION_79_OR_NEWER. Also migrate Android onCatalystInstanceDestroy to invalidate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bump reanimated 4.2.0→4.2.2, worklets 0.7.1→0.7.4 for RN 0.84 compat - Bump gesture-handler to ^2.30.0 - Replace abandoned react-native-fast-image with @d11/react-native-fast-image (Fabric/new arch support) - Guard remaining legacy-only headers (RCTModalHostView, RCTScrollView, RCTRootView, RCTRootContentView) behind #ifndef RCT_NEW_ARCH_ENABLED - Wrap bridge-only files (RNNBridgeManager, bridge APIs in ReactNativeNavigation) in #ifndef RCT_NEW_ARCH_ENABLED - Remove dead bridge fallback in RNNCommandsHandler new-arch path - Clean stale hardcoded OTHER_CFLAGS from playground xcodeproj Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…path Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…adle The @d11/react-native-fast-image replacement is autolinked via autolinkLibrariesWithApp(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Formalises the process of adding new React Native version support, validated against PRs for RN 0.80 through 0.84. Covers CI setup, dependency analysis, native compilation fixes, and 10 common pitfalls. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…FactoryTest The test called registerExternalComponent:callback: (old-arch API) without an #ifdef guard. On new-arch builds, the method is registerExternalHostComponent:callback: with RCTHost* instead of RCTBridge*. This failed all 4 iOS CI jobs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- RNNModalHostViewManagerHandlerTest: wrap entire file in #ifndef RCT_NEW_ARCH_ENABLED (tests old-arch-only RCTModalHostViewManager APIs) - RNNExternalComponentStoreTest: branch register/get calls for new vs old arch - RNNModalManagerTest: remove unused RCTModalHostViewManager.h import Verified locally: build-for-testing succeeds with no errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR updates the repo’s React Native version-switching + CI/tooling to support React Native 0.84 (including dependency/version alignment and new CI lanes), with accompanying tests and native build fixes for the new architecture/legacy header removals.
Changes:
- Add shared version-mapping utilities (
scripts/versionMapping.js) and expandchangeReactNativeVersion.jsto update RN toolchain + CLI packages, plus Gradle wrapper. - Add comprehensive Jest coverage for the version-switch flow and remove the duplicate Gradle-only script.
- Update playground + native codepaths/configs for RN 0.84 compatibility (deps, iOS project settings, conditional compilation, Buildkite pipelines).
Reviewed changes
Copilot reviewed 44 out of 45 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/versionMapping.js | Centralizes RN-minor → tooling/CLI/Gradle override decisions. |
| scripts/changeReactNativeVersion.js | Uses mapping helpers; updates additional RN toolchain packages; exports functions for tests. |
| scripts/changeGradleVersion.js | Removed duplicate script (logic consolidated). |
| scripts/tests/versionMapping.test.js | Unit tests for version-mapping helpers. |
| scripts/tests/changeReactNativeVersion.test.js | Integration/unit tests for version-switch behavior and Gradle wrapper updates. |
| playground/src/screens/sharedElementCarDealer/ImageFullScreenViewer.tsx | Switches FastImage import to the @d11 fork. |
| playground/src/screens/sharedElementCarDealer/CarDetailsScreen.tsx | Switches FastImage import to the @d11 fork. |
| playground/src/screens/sharedElementCarDealer/CarCard.tsx | Switches FastImage import to the @d11 fork. |
| playground/package.json | Bumps RN/React and related tooling; replaces fast-image dependency; updates reanimated/worklets/gesture-handler. |
| playground/ios/playground.xcodeproj/project.pbxproj | Updates CocoaPods integration/build phases/settings for RN 0.84; removes stale hardcoded flags. |
| playground/ios/NavigationTests/RNNViewControllerFactoryTest.mm | Makes external component registration conditional on arch (RCTHost vs RCTBridge). |
| playground/ios/NavigationTests/RNNModalManagerTest.mm | Removes unused legacy RN import for RN 0.84 compatibility. |
| playground/ios/NavigationTests/RNNModalHostViewManagerHandlerTest.mm | Excludes legacy-only test from new-arch builds. |
| playground/ios/NavigationTests/RNNExternalComponentStoreTest.mm | Makes store API usage conditional on arch (RCTHost vs RCTBridge). |
| playground/android/rninfo.gradle | Adds isRN84OrHigher flag for Android build branching. |
| playground/android/app/build.gradle | Removes manual fast-image project dependency (autolinking/forked package). |
| package.json | Bumps default RN/React and RN toolchain versions. |
| ios/UIViewController+RNNOptions.mm | Removes legacy header import (not available under RN 0.84 new-arch stripping). |
| ios/ReactNativeNavigation.mm | Guards bridge-only code; simplifies new-arch findViewController path. |
| ios/ReactNativeNavigation.h | Splits bridge vs host APIs/types by RCT_NEW_ARCH_ENABLED. |
| ios/RNNUIBarButtonItem.h | Guards legacy RootView imports; keeps arch-specific protocol conformance. |
| ios/RNNReactView.mm | Removes legacy header import; keeps new-arch host-based path. |
| ios/RNNReactView.h | Guards RCTRootViewDelegate import for legacy-only builds. |
| ios/RNNReactTitleView.mm | Guards legacy delegate callback method for old arch only. |
| ios/RNNReactTitleView.h | Makes RCTRootViewDelegate conformance conditional. |
| ios/RNNOverlayWindow.mm | Avoids compile-time references to removed RN classes via NSClassFromString. |
| ios/RNNOverlayOptions.mm | Removes legacy header import. |
| ios/RNNModalHostViewManagerHandler.mm | Makes legacy modal-host wiring conditional (old arch only). |
| ios/RNNModalHostViewManagerHandler.h | Guards legacy modal-host types/methods behind RCT_NEW_ARCH_ENABLED. |
| ios/RNNExternalComponentStore.mm | Splits external component APIs between host/bridge via #ifdef. |
| ios/RNNExternalComponentStore.h | Splits external component APIs between host/bridge via #ifdef. |
| ios/RNNElementFinder.mm | Guards legacy RootView import for old arch only. |
| ios/RNNCustomTitleView.h | Splits delegate imports for host vs bridge architectures. |
| ios/RNNCommandsHandler.mm | Updates preview view lookup for new-arch host-based view registry. |
| ios/RNNBridgeManager.mm | Excludes bridge manager implementation from new-arch builds. |
| ios/RNNBridgeManager.h | Excludes bridge manager interface from new-arch builds. |
| ios/RNNAppDelegate.mm | Reorganizes legacy vs modern RN include paths; clarifies versioned codepath. |
| ios/RCTHelpers.mm | Guards legacy scroll/rootview-dependent helper code for old arch only. |
| ios/RCTHelpers.h | Guards legacy RootView types and removeYellowBox API for old arch only. |
| android/src/main/java/com/reactnativenavigation/react/NavigationModule.java | Migrates module teardown override to invalidate() (RN 0.84+ pattern). |
| .claude/skills/rn-version-upgrade.md | Adds internal process documentation for RN version upgrades. |
| .buildkite/pipeline.sh | Registers new RN 0.84 CI job definitions. |
| .buildkite/jobs/pipeline.ios_rn_84.yml | Adds iOS Buildkite job for RN 0.84. |
| .buildkite/jobs/pipeline.android_rn_84.yml | Adds Android Buildkite job for RN 0.84. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…ort, fetch restore - extractVersions: validate rnMinor is not NaN before proceeding - RNNCommandsHandler: guard against nil sourceView in preview registration - RNNUIBarButtonItem.h: explicitly import RCTSurfaceDelegate for new arch - Tests: save/restore global.fetch instead of deleting it Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 0.83.0 → 0.83.2 (iOS + Android CI jobs) - 0.84.0 → 0.84.1 (iOS + Android CI jobs + default in package.json) - 0.77.3, 0.78.3, 0.82.1 already at latest patch Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The overlay banner screenshot test gets SSIM 0.9899 on RN 0.84 vs the reference image, just below the 0.99 threshold. This is a deterministic sub-pixel rendering difference, not a real regression. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 47 out of 48 changed files in this pull request and generated 2 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…worklets - Replace abandoned react-native-fast-image with @d11/react-native-fast-image - Align reanimated 4.1.5→4.2.2 and worklets 0.5.0→0.7.4 to match playground Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 47 out of 48 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
markdevocht
left a comment
There was a problem hiding this comment.
@yedidyak , I started also the RN 0.84 update
origin/feat/RN-0.84
It is a lot less complicated than the changes you did here.
| @@ -1,5 +1,7 @@ | |||
| #import <Foundation/Foundation.h> | |||
| #ifndef RCT_NEW_ARCH_ENABLED | |||
There was a problem hiding this comment.
No need to add RCT_NEW_ARCH_ENABLED, we only support NEW_ARCH since RN 0.76. Especially DON'T add #ifndef RCT_NEW_ARCH_ENABLED
So please remove all RCT_NEW_ARCH_ENABLED flags you added.
|
|
||
| #import "RCTAppSetupUtils.h" | ||
|
|
||
| #if !RNN_RN_VERSION_79_OR_NEWER |
There was a problem hiding this comment.
Also here, no need to add or change lower version support because it is already handled and working.
This is mainly for the Claude skill, the actual upgrade is more or less a side effect. Let's talk about how it went wrong :) |
Summary
Add full React Native 0.84 support, including native compatibility fixes for the enforced New Architecture and legacy header removal.
Version & Dependency Updates
react-native-fast-imagewith@d11/react-native-fast-image(Fabric support)react-native-reanimatedto 4.2.2+,react-native-workletsto 0.7.4implementation project(':react-native-fast-image')from Android build.gradleiOS Native Fixes (New Architecture / Legacy Header Removal)
RN 0.84 enforces New Architecture by default and strips legacy headers (
RCT_REMOVE_LEGACY_ARCH=1) from precompiled xcframeworks.#if !RNN_RN_VERSION_79_OR_NEWERinRNNAppDelegate.mmRCTRootView.h,RCTRootViewDelegate.h,RCTModalHostView.himports behind#ifndef RCT_NEW_ARCH_ENABLEDacross:RNNUIBarButtonItem.h,RNNReactView.h,RNNCustomTitleView.h,RNNElementFinder.mm,RNNOverlayOptions.mm,UIViewController+RNNOptions.mm,RCTHelpers.h/.mm#import <React/RCTSurfaceDelegate.h>in new-arch branch ofRNNUIBarButtonItem.hRNNModalHostViewManagerHandler,RNNBridgeManager,RNNReactTitleViewdelegate methodsNSClassFromStringwithdispatch_oncecaching forRCTModalHostView/RCTRootComponentViewinRNNOverlayWindow.mmhitTest hot pathRNNExternalComponentStoreandRNNCommandsHandlerAPIs betweenRCTHost/RCTBridgevia#ifdefRNNCommandsHandler.mm)RCTAppSetupUtils.himport (needed by both code paths)iOS Test Fixes
RNNViewControllerFactoryTestexternal component registration for new vs old archRNNModalHostViewManagerHandlerTestin#ifndef RCT_NEW_ARCH_ENABLED(tests old-arch-only APIs)RNNExternalComponentStoreTestregister/get calls for new vs old archRCTModalHostViewManager.himport fromRNNModalManagerTestAndroid Fixes
NavigationModule.onCatalystInstanceDestroy()→invalidate()(deprecated withforRemoval=true)CI & Tooling
isRN84OrHigherflag torninfo.gradlescripts/versionMapping.jswith full test coverage (55 tests)changeReactNativeVersion.jsto also update@react-native/*and@react-native-community/cli*packagesNumber.isNaNvalidation for parsed RN minor versionchangeGradleVersion.js(consolidated)global.fetchin tests instead of deleting itVisual Test Adjustment
Test plan
npx jest scripts/__tests__/)🤖 Generated with Claude Code