You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo独立iOS构建在Simulator和TestFlight启动屏后崩溃问题

问题描述

我使用Expo开发了一款市场类应用,在Android、iOS端的Expo Go环境以及Android独立包中运行均正常。问题出在构建iOS模拟器对应的.tar包或是上传到TestFlight测试时,应用在显示启动闪屏后立即崩溃。我使用的是托管工作流(managed workflow),且确认已遵循所有官方操作指引。

崩溃日志
崩溃线程:0  com.apple.main-thread 调度队列
异常类型:EXC_CRASH (SIGABRT)
异常代码:0x0000000000000000, 0x0000000000000000
异常说明:EXC_CORPSE_NOTIFY

应用特定信息:
*** 应用因未捕获的异常'ExpoFatalError'终止,原因:'Expo遇到致命错误:未处理的JS异常:不变量违规:原生模块不能为null'
终止时抛出未捕获的NSException类型异常
已调用abort()
CoreSimulator 757.5 - 设备:iPhone 12 (0D59D0C0-2D3B-40ED-A8E2-DA0B1417C29C) - 运行时:iOS 14.5 (18E182) - 设备类型:iPhone 12

应用特定回溯1:
0   CoreFoundation                      0x00007fff20422fba __exceptionPreprocess + 242
1   libobjc.A.dylib                     0x00007fff20193ff5 objc_exception_throw + 48
2   ComGrabbiGrabbiapp                  0x000000010b375821 -[EXAppViewController maybeShowError:] + 506
3   ComGrabbiGrabbiapp                  0x000000010b396dce handleFatalReactError_block_invoke_2 + 574
4   libdispatch.dylib                   0x00007fff201078df _dispatch_client_callout + 8
5   libdispatch.dylib                   0x00007fff201156ca _dispatch_async_and_wait_invoke + 109
6   libdispatch.dylib                   0x00007fff201078df _dispatch_client_callout + 8
7   libdispatch.dylib                   0x00007fff20114a27 _dispatch_main_queue_callback_4CF + 1045
8   CoreFoundation                      0x00007fff203908f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
9   CoreFoundation                      0x00007fff2038b169 __CFRunLoopRun + 2781
10  CoreFoundation                      0x00007fff2038a1a7 CFRunLoopRunSpecific + 567
11  GraphicsServices                    0x00007fff2b874d85 GSEventRunModal + 139
12  UIKitCore                           0x00007fff246c14df -[UIApplication _run] + 912
13  UIKitCore                           0x00007fff246c639c UIApplicationMain + 101
14  ComGrabbiGrabbiapp                  0x000000010b1461d0 main + 80
15  libdyld.dylib                       0x00007fff2025abbd start + 1

线程0崩溃:: com.apple.main-thread 调度队列
0   libsystem_kernel.dylib          0x00007fff60309946 __pthread_kill + 10
1   libsystem_pthread.dylib         0x00007fff60343615 pthread_kill + 263
2   libsystem_c.dylib               0x00007fff200fbd4f __abort + 139
3   libsystem_c.dylib               0x00007fff200fbcc4 abort + 135
4   libc++abi.dylib                 0x00007fff20254692 abort_message + 241
5   libc++abi.dylib                 0x00007fff20245dfd demangling_terminate_handler() + 266
6   libobjc.A.dylib                 0x00007fff20179ace _objc_terminate() + 96
7   libc++abi.dylib                 0x00007fff20253aa7 std::__terminate(void (*)()) + 8
8   libc++abi.dylib                 0x00007fff20253a49 std::terminate() + 41
9   libdispatch.dylib               0x00007fff201078f3 _dispatch_client_callout + 28
10  libdispatch.dylib               0x00007fff201156ca _dispatch_async_and_wait_invoke + 109
11  libdispatch.dylib               0x00007fff201078df _dispatch_client_callout + 8
12  libdispatch.dylib               0x00007fff20114a27 _dispatch_main_queue_callback_4CF + 1045
13  com.apple.CoreFoundation        0x00007fff203908f8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
14  com.apple.CoreFoundation        0x00007fff2038b169 __CFRunLoopRun + 2781
15  com.apple.CoreFoundation        0x00007fff2038a1a7 CFRunLoopRunSpecific + 567
16  com.apple.GraphicsServices      0x00007fff2b874d85 GSEventRunModal + 139
17  com.apple.UIKitCore             0x00007fff246c14df -[UIApplication _run] + 912
18  com.apple.UIKitCore             0x00007fff246c639c UIApplicationMain + 101
19  com.grabbi.grabbiapp            0x000000010b1461d0 main + 80
20  libdyld.dylib                   0x00007fff2025abbd start + 1
问题根因

核心报错Invariant Violation: Native module cannot be null说明项目中引用的某个原生依赖没有被正确注入到iOS生产包中。Expo Go环境内置了绝大多数常用原生模块,因此开发阶段不会触发报错,只有在构建独立包时才会出现该问题。

解决方案
  • 检查所有引入的第三方依赖是否支持Expo托管工作流,排除仅支持裸工作流(Bare Workflow)的原生库
  • 执行npx expo install --check校验所有依赖版本是否与当前使用的Expo SDK版本匹配,按提示将不匹配的依赖升级至对应版本
  • 排查代码中直接调用NativeModules的逻辑,确认调用的原生模块名称无拼写错误、对应依赖已正确安装
  • 检查非Expo官方维护的第三方库是否需要在app.json中配置插件,遗漏插件配置会导致iOS打包时不会注入对应的原生代码
  • 清理所有缓存后重新构建:执行npx expo start --clear清理JS侧缓存,构建iOS包时选择清理构建缓存选项
快速定位技巧

在项目入口文件最顶部添加全局JS异常捕获逻辑,打印异常对应的模块路径和名称,可直接定位到具体是哪个依赖的原生模块为空。

内容的提问来源于stack exchange,提问作者Eric Lehmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:54:02