Upgrade to React Native 0.83.2 with new architecture#6047
Conversation
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub. |
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
d6ef28d to
9ae00f3
Compare
Reconcile the WIP react-native 0.83 / new-architecture work (originally on the william/rn83 branch) onto current npm-based develop. Bump react 19.2.0, react-native 0.83.2, react-native-reanimated 4.2.x, react-native-worklets 0.7.x, react-native-bootsplash 7.x and expo 55; keep develop's newer crypto native deps (piratechain, zcash, zano). Port the native iOS (Expo new-arch AppDelegate, Info.plist) and Android (newArchEnabled, gradle, MainActivity/ MainApplication) changes, drop the obsolete r3-hack Reanimated-3 Android workaround in favor of Reanimated 4 under the new architecture, and remove the no-longer-needed react-native 0.79 patch.
Add a testID to the GettingStarted scene's sign-in link so the RN 0.83 upgrade verification flow can reach the login screen by selector.
9ae00f3 to
39b453e
Compare
The Sentry-integrated 'Bundle React Native code and images' build phase
passes a multi-word command (/bin/sh sentry-xcode.sh react-native-xcode.sh)
to react-native's with-environment.sh, which RN 0.83 executes as a single
quoted token ("$1"). That treats the whole command as one nonexistent
path and fails the build with 'No such file or directory'.
Patch with-environment.sh to eval its argument, restoring the multi-word
execution the Sentry wrapper relies on.
Bump react-native-reanimated 4.2.1 to 4.5.0 and react-native-worklets 0.7.2 to 0.10.0 (its required peer). Adapt to the 4.5 type API: the layout-animation builder classes became generic, so EdgeAnim types entering/exiting/layout at the BaseAnimationBuilder base; useAnimatedStyle now returns an opaque AnimatedStyleHandle, so the styled HOC and SceneWrapper accept the exported AnimatedStyle type. Regenerate the createAnimatedComponent return-type patch for 4.5.0.
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1f9665c. Configure here.
| * From https://reactnative.dev/docs/0.79/linking?ios-language=swift#enabling-deep-links | ||
| */ | ||
| func application( | ||
| override func application( |
There was a problem hiding this comment.
iOS URL handlers skip ExpoAppDelegate
Medium Severity
After switching AppDelegate to subclass ExpoAppDelegate, the application(_:open:options:) and application(_:continue:restorationHandler:) overrides still return only RCTLinkingManager results and never forward to super. The base ExpoAppDelegate may handle URLs for Expo modules; skipping super can drop those handlers while deep linking still works for React Native paths alone.
Reviewed by Cursor Bugbot for commit 1f9665c. Configure here.
| ) | ||
|
|
||
| return true | ||
| return super.application(application, didFinishLaunchingWithOptions: launchOptions) |
There was a problem hiding this comment.
Cold-start shortcut may fire twice
Medium Severity
On cold launch, the app still assigns ExpoQuickActions.initialAction from launchOptions using logic written for a non-ExpoAppDelegate delegate, then calls super.application(_:didFinishLaunchingWithOptions:). With an ExpoAppDelegate, Expo’s lifecycle may also deliver the same home-screen shortcut, so useQuickActionCallback could run twice and open the shortcut URL twice.
Reviewed by Cursor Bugbot for commit 1f9665c. Configure here.









CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
none
Requirements
If you have made any visual changes to the GUI. Make sure you have:
Description
Asana: https://app.asana.com/0/1215088146871429/1215939017452147
Upgrade edge-react-gui to React Native 0.83.2 and enable the new architecture (Fabric/TurboModules). This brings the prior WIP work (the
william/rn83branch) current with develop, which had since migrated from yarn to npm and advanced several native crypto deps.Changes:
bindReactNativeFactorycall.newArchEnabled, gradle/wrapper updates, Kotlin 2.3.20,ext.kspVersionset to the independently-versioned KSP2 line (Kotlin 2.3 has no release in the old<kotlin>-<ksp>scheme the expo gradle plugin looks up),jsMainModulePath = "index"so the new ExpoReactHostFactory loads the JS entry, and a patch for@react-native-community/datetimepicker(Kotlin 2.3 dropped synthetic-property access forgetCurrentActivity()).r3-hackReanimated-3 Android workaround in favor of Reanimated 4 under the new architecture.@types/react19.2).fontSize: 0crash on outline text inputs: clamp animated icon/text font sizes to a positive value (guiThemedIcons/FilledTextInputand a patch foredge-login-ui-rn). The new architecture's Android text layout throwsIllegalArgumentException: FontSize should be a positive valuewhen an animated size reaches 0; iOS tolerates it. This is the crash the prior attempt flagged ("hidden behind the animated vector icons").Testing:
./gradlew :app:assembleDebugsucceeds; runs on an Android 16 emulator under the new architecture. Reproduced thefontSize: 0crash on the login screen, applied the clamp fix, and confirmed the login outline inputs now render and accept text without crashing. Screenshots below.tsc --noEmitclean;npm run lintclean; jest 511 tests pass.Follow-ups:
edge-login-ui-rnfont-size fix is shipped here as a patch-package patch against 3.36.0; it should also land upstream in edge-login-ui-rn and then be picked up via a version bump.Note
High Risk
This is a full-stack native and runtime migration (new architecture, Expo 55, Gradle 9, major pod graph) that can surface build or runtime regressions across iOS and Android until broadly exercised.
Overview
Upgrades the app to React Native 0.83.2 with Fabric/TurboModules turned on (
newArchEnabled,RCTNewArchEnabled), alongside Expo 55-style tooling (babel-preset-expo, Expo metro config, and the newer Expo Gradle/CocoaPods autolinking).Android moves to the RN 0.83 bootstrap (
loadReactNative,ExpoReactHostFactorywithjsMainModulePath = "index"), compile/target SDK 36, Gradle 9, Kotlin 2.3.20 with an explicit KSP2 version, and drops the old Reanimated-3r3-hackresolution path. iOS adoptsExpoAppDelegate/ExpoReactNativeFactory, refreshes native deps inPodfile.lock, and wires Expo’s configure-project build phase inputs/outputs.JS/build simplifies Babel to Expo +
react-native-worklets, removes Android-specific Reanimated routing from Metro, and adds a worklets Jest mock. The r3-hack / Flipper-era Android Babel branching is removed in favor of Reanimated 4 under the new architecture.Reviewed by Cursor Bugbot for commit 1f9665c. Bugbot is set up for automated code reviews on this repo. Configure here.