Description
Using React Native 0.85.0 on iOS 26.5. App launches successfully and initial screen renders correctly. Any setState that swaps the root component causes immediate native crash that bypasses ErrorBoundary.
The crash happens on com.meta.react.turbomodulemanager.queue with RCTFatal → objc_exception_rethrow → abort.
Bundle is Hermes bytecode v98. Tested on iPhone 15 Pro and iPhone 16 Pro - both crash identically.
Steps to reproduce
- Create RN 0.85.0 app with custom state-based navigation (no @react-navigation libraries)
- Render initial screen via useState
- Trigger setState to swap to different screen component
- App crashes natively
React Native Version
0.85.0
Affected Platforms
Runtime - iOS
Output of npx @react-native-community/cli info
info Fetching system and libraries information...
System:
OS: macOS 26.4.1
CPU: (6) arm64 Apple A18 Pro
Memory: 112.33 MB / 8.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 25.9.0
path: /opt/homebrew/bin/node
Yarn: Not Found
npm:
version: 11.12.1
path: /opt/homebrew/bin/npm
Watchman: Not Found
Managers:
CocoaPods:
version: 1.16.2
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.5
- iOS 26.5
- macOS 26.5
- tvOS 26.5
- visionOS 26.5
- watchOS 26.5
Android SDK: Not Found
IDEs:
Android Studio: 2025.3 AI-253.31033.145.2533.15113396
Xcode:
version: 26.5/17F42
path: /usr/bin/xcodebuild
Languages:
Java:
version: 21.0.10
path: /usr/bin/javac
Ruby:
version: 2.6.10
path: /usr/bin/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.1.3
wanted: ^20.1.3
react:
installed: 19.2.6
wanted: ^19.2.3
react-native:
installed: 0.85.3
wanted: ^0.85.0
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: true
Stacktrace or Logs
Last Exception Backtrace:
0 CoreFoundation 0x1a0fba23c __exceptionPreprocess + 164
1 libobjc.A.dylib 0x19da89224 objc_exception_throw + 88
2 React 0x1021337dc RCTFatal + 568
3 React 0x1023a3924 -[RCTExceptionsManager reportFatal:stack:exceptionId:extraDataAsJSON:] + 512
4 React 0x1023a4360 -[RCTExceptionsManager reportException:] + 2292
5 CoreFoundation 0x1a0f088f4 __invoking___ + 148
6 CoreFoundation 0x1a0f08778 -[NSInvocation invoke] + 424
7 CoreFoundation 0x1a0f1e428 -[NSInvocation invokeWithTarget:] + 64
8 React 0x1023b88b8 invocation function for block in facebook::react::ObjCTurboModule::performVoidMethodInvocation
Thread 1 Crashed:
0 libsystem_kernel.dylib __pthread_kill + 8
1 libsystem_pthread.dylib pthread_kill + 268
2 libsystem_c.dylib abort + 148
3 libc++abi.dylib __abort_message + 132
4 libc++abi.dylib demangling_terminate_handler() + 296
5 libobjc.A.dylib _objc_terminate() + 156
6 libc++abi.dylib std::__terminate(void (*)()) + 16
7 libc++abi.dylib __cxa_rethrow + 188
8 libobjc.A.dylib objc_exception_rethrow + 44
9 React performVoidMethodInvocation + 128
Crash happens on com.meta.react.turbomodulemanager.queue when state changes cause root component swap. ErrorBoundary doesn't catch it. iOS 26.5, RN 0.85.0, Hermes bytecode v98.
MANDATORY Reproducer
Minimal reproducer: ```javascript import React, { useState } from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; function ScreenA({ onNavigate }) { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> Screen A <TouchableOpacity onPress={() => onNavigate('B')}> Go to Screen B ); } function ScreenB() { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> Screen B ); } export default function App() { const [screen, setScreen] = useState('A'); if (screen === 'A') return ; return ; }
Screenshots and Videos
- Removed all @react-navigation packages
- Removed react-native-screens, gesture-handler, safe-area-context
- Updated AsyncStorage to v2
- Wrapped navigation in setTimeout (100ms deferral)
- ErrorBoundary class component
- Updated all @react-native/* packages to 0.85.0
Description
Using React Native 0.85.0 on iOS 26.5. App launches successfully and initial screen renders correctly. Any setState that swaps the root component causes immediate native crash that bypasses ErrorBoundary.
The crash happens on com.meta.react.turbomodulemanager.queue with RCTFatal → objc_exception_rethrow → abort.
Bundle is Hermes bytecode v98. Tested on iPhone 15 Pro and iPhone 16 Pro - both crash identically.
Steps to reproduce
React Native Version
0.85.0
Affected Platforms
Runtime - iOS
Output of
npx @react-native-community/cli infoStacktrace or Logs
MANDATORY Reproducer
Minimal reproducer: ```javascript import React, { useState } from 'react'; import { View, Text, TouchableOpacity } from 'react-native'; function ScreenA({ onNavigate }) { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> Screen A <TouchableOpacity onPress={() => onNavigate('B')}> Go to Screen B ); } function ScreenB() { return ( <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> Screen B ); } export default function App() { const [screen, setScreen] = useState('A'); if (screen === 'A') return ; return ; }
Screenshots and Videos