refactor: upgrade React Native to 0.85.3 (React 19) #3781
Merged
Conversation
54a7745 to
ad9964e
Compare
1d4f625 to
e642732
Compare
…ks and dismiss-defer timing)
- @react-navigation/native 6.x → 7.x - @react-navigation/stack 6.x → 7.x - @react-navigation/bottom-tabs 6.x → 7.x - @react-navigation/elements 1.x → 2.x - react-native-svg 15.8.0 → 15.15.5 - react-native-view-shot 4.x → 5.x
- Build React-Core from source (RCT_USE_PREBUILT_RNCORE=0) to fix RNFirebase static framework imports with prebuilt binary (RN 0.84+) - Downgrade non-modular include errors to warnings for all pod targets (use_frameworks! + static linkage sets DEFINES_MODULE=YES) - Register RCTAppDependencyProvider so Fabric can discover third-party native components (screens, safe-area, svg, etc.) at runtime
… ref for v7/v5 compat
…Receive (latent race surfaced by RN 0.85 + React 19)
…al-time token events
…rseded by Breez 0.15.0 real-time token events
…gression from React 19 + RN 0.85)
e642732 to
37033e7
Compare
9 tasks
grimen
approved these changes
May 27, 2026
grimen
approved these changes
May 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Upgrades React Native from 0.76.9 to 0.85.3, React from 18.3.1 to 19.2.3, and the reanimated stack from 3.16.7 to 4.3.1 (with the new
react-native-worklets0.8.0 dependency split). Required to keep the iOS app on a supported toolchain (Apple App Store iOS 26 SDK requirement).Stack delta
TokenTransactionEvent)Notable changes by area
iOS build
RCT_USE_PREBUILT_RNCORE=0) until RNFirebase supports the prebuilt binary (RN 0.84+)use_frameworks!+ static linkage)RCTAppDependencyProviderin AppDelegate so Fabric discovers third-party native components at runtime#if compiler(>=6.2)for pre-Xcode 26 compatibilityAndroid build
@react-native/jest-preset+ worklets resolverSource adaptations
StyleSheet.absoluteFillObject→absoluteFill(removed in 0.85)tabBarTestID→tabBarButtonTestID(renamed in bottom-tabs v7)ViewShotref typed asViewShotRef(react-native-view-shot v5)galoy-slider-button(Gesture.Pan, runOnJS in worklet) andpagination-item(SharedValueimport path)useRef/RefObjecttypings adapted inuse-clipboard,use-geetest-captcha,amount-input-modal,use-screenshot,use-receive-carousel,header-back-control@rn-vui/themedInput ref bug worked around with newInputReftype atapp/types/themed-input.ts(linked open issues in code)useDeviceColorScheme()now guards theunspecifiedvalue React Native 0.85 surfaces (theme fallback)use-conversion-overlay-focusref param narrowed to a focusable interface so test mocks no longer need anas unknown as InputRefcastAmount input modal
@gorhom/bottom-sheetwith React Native's built-inModalfor this screen. The library silently fails to render under reanimated v4 + RN 0.85; the upstream rework targeting that combo is open but not merged (refs in the modal file). Will switch back once gorhom v6 ships. Trade-off: lose the swipe-down gesture (tap-on-backdrop closes instead).Self-custodial Receive — duplicate invoice guard
usePriceConversionemits its first refresh — now lands mid-flight instead of before/after the SDK call. Fix: stabiliseconvertMoneyAmountvia ref sogenerateRequestkeeps its identity across price refreshes, plus aLoadingguard against any future overlap. Regression test added.Self-custodial Breez SDK upgrade (0.13.2-dev3 → 0.15.0)
libbreeztech-breez-sdk-spark-react-native.so) was the single library shipping with 4 KB alignment, which fails Google Play's new 16 KB page-size requirement. Upstream fix in breez/spark-sdk#814 (merged 2026-04-21) added the-Wl,-z,max-page-size=16384linker flag. Verified post-bump via the official AOSPcheck_elf_alignment.shscript: all 36 libraries inarm64-v8anow reportALIGNED (2**14 = 16 KB).TokenTransactionEvent(closes breez/spark-sdk#826), allowing the app to surface incoming token payments without forced syncs. The manualsyncWalletworkarounds previously needed to materialize token balances on receive/convert have been removed fromuse-sdk-lifecycle,use-auto-convert-listener, and the convert bridge, along with their assertion-level tests.Self-custodial backup nudge — account-switch flash guard
useSdkLifecyclenow resetsstatustoLoadingand clearswalletssynchronously the momentactiveSelfCustodialAccountIdchanges, closing the stale-render window; (2)useBackupNudgeStategates modal/banner visibility behindactiveWallet.isReadyas defense in depth. Regression test added.Tests
react-hooksimport paths)useDerivedValueandReanimated.Viewmocks brought up to the v4 surfaceContextForScreendefaults toheaderShown: false(navigation v7HeaderSearchBarrequires full navigation context)addListenertouseNavigationmock inconversion-details-screen(required by navigation v7)window.dispatchEventinauto-convert-listener-mountspec (React 19 error reporting)receive.specrenders withheaderShownenabled to preserve NFC header button testsDependencies
mainwhich includes chore(ci): upgrade blink-mobile to Node 24 #3787 (CI Node bump to 24.13.0, required by theconversion-details-screensuite under React 19 + reanimated v4) and ci: fix iOS archive with Xcode 26.5 #3790 (Xcode 26.5fmtconsteval fix — keepsfmton C++17 while lettingRNReanimateduse the C++20 that RN/Yoga now require).