React Native 0.75.1版本TestFlight构建启动后崩溃求助
环境信息
- React Native版本:
"react-native": "^0.75.1" - Xcode版本:16.0
- macOS版本:15.1
问题现象
开发模式下应用运行正常,但TestFlight构建版本启动闪屏后直接崩溃,Release版本运行时抛出以下错误:
*** 因未捕获异常终止应用 'RCTFatalException: 未处理的JS异常: Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' 未找到。请确认该模块已在原生二进制文件中注册。Bridgeless模式: false. TurboModule互操作: false. 已加载模块: {"NativeModules":["UIManager","PlatformConstants","DeviceInfo","RNGestureHandlerModule","I18nManager","RNCAsyncStorage","NativeAnimatedModule","SourceCode","BlobModule"],"TurboModules":[],"NotFound":["NativePerformanceObserverCxx","NativePerformanceCxx","NativeReactNativeFeatureFlagsCxx","RedBox","BugReporting","HeadlessJsTaskSupport","PlatformLocalStorage","RNC_AsyncSQLiteDBStorage","SoundManager","DevMenu"]}, js引擎: hermes', 原因: '未处理的JS异常: Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'DevMenu' 未找到。请确认该模块已在原生二进制文件中注册..., 调用栈:
invariant@1784:25
getEnforcing@2585:27
anonymous@288331:67
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@288289:58
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@288264:25
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@285895:52
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@285813:66
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@285784:65
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@58732:60
loadModuleImplementation@158:13
guardedLoadModule@96:37
metroRequire@38:91
anonymous@770:47
loadModuleImplementation@158:13
guardedLoadModule@89:46
metroRequire@38:91
global@290137:3
'
*** 首次抛出调用栈:
(
0 CoreFoundation 0x00000001804ae138 _exceptionPreprocess + 172
1 libobjc.A.dylib 0x0000000180087db4 objc_exception_throw + 56
2 myapp 0x0000000100a711fc RCTFormatError + 0
3 myapp 0x0000000100ae8628 -[RCTExceptionsManager reportFatal:stack:exceptionId:extraDataAsJSON:] + 488
4 myapp 0x0000000100ae8e50 -[RCTExceptionsManager reportException:] + 1316
5 CoreFoundation 0x00000001804b4760 invoking + 144
6 CoreFoundation 0x00000001804b1ac4 -[NSInvocation invoke] + 276
7 CoreFoundation 0x00000001804b1d5c -[NSInvocation invokeWithTarget:] + 60
8 myapp 0x0000000100aa6588 -[RCTModuleMethod invokeWithBridge:module:arguments:] + 380
9 myapp 0x0000000100aa86e8 _ZN8facebook5reactL11invokeInnerEP9RCTBridgeP13RCTModuleDatajRKN5folly7dynamicEiN12_GLOBAL__N_117SchedulingContextE + 452
10 myapp 0x0000000100aa833c ___ZN8facebook5react15RCTNativeModule6invokeEjON5folly7dynamicEi_block_invoke + 116
11 libdispatch.dylib 0x0000000102363ec4 _dispatch_call_block_and_release + 24
12 libdispatch.dylib 0x000000010236573c _dispatch_client_callout + 16
13 libdispatch.dylib 0x000000010236da30 _dispatch_lane_serial_drain + 916
14 libdispatch.dylib 0x000000010236e774 _dispatch_lane_invoke + 420
15 libdispatch.dylib 0x000000010237b1a8 _dispatch_root_queue_drain_deferred_wlh + 324
16 libdispatch.dylib 0x000000010237a604 _dispatch_workloop_worker_thread + 488
17 libsystem_pthread.dylib 0x0000000102e0bb74 _pthread_wqthread + 284
18 libsystem_pthread.dylib 0x0000000102e0a934 start_wqthread + 8
)
libc++abi: 因未捕获NSException类型异常终止
修复方案
错误根源是Release/TestFlight构建不包含DevMenu这类开发专属模块,但JS代码仍在尝试调用它。按以下步骤修复:
给DevMenu相关代码加环境判断
搜索代码库中所有调用DevMenu或TurboModuleRegistry.getEnforcing('DevMenu')的位置,用__DEV__变量包裹,确保只在开发环境执行:if (__DEV__) { const DevMenu = TurboModuleRegistry.getEnforcing('DevMenu'); // 这里放DevMenu相关操作 }排查第三方依赖
部分第三方库可能内部引用了DevMenu却未做环境判断:- 优先升级该依赖到最新版本,看是否修复了问题
- 若无法升级,可通过metro配置在打包时剔除相关代码
配置metro生产环境替换规则
在metro.config.js中添加生产环境的模块替换,把DevMenu指向空模块:const path = require('path'); module.exports = { // 其他原有配置 ...(process.env.NODE_ENV === 'production' ? { resolver: { extraNodeModules: { 'DevMenu': path.resolve(__dirname, './empty-module.js') } } } : {}) };然后在项目根目录创建
empty-module.js:module.exports = {};清理缓存重新构建
- 执行
pod install --clean-install清理iOS依赖 - Xcode中执行
Product -> Clean Build Folder - 重新生成TestFlight构建包
- 执行
内容的提问来源于stack exchange,提问作者Ajith Kumar

