Expo托管React Native应用iOS EAS构建包黑屏/崩溃,但Expo Go正常运行
这种情况我之前也踩过坑,Expo Go的沙箱环境和EAS的原生构建环境差异确实容易在批量更新依赖后出问题。给你几个实用的排查方向,按顺序试应该能快速定位问题:
先跑依赖兼容性检测:批量更新最容易出现核心包版本不匹配的问题,比如expo、react-native、babel-preset-expo这些必须严格对应。直接在项目根目录执行:
npx expo-doctor它会自动扫描所有依赖,找出不兼容的版本并给出修复建议,我上次就是靠这个发现metro版本和expo不兼容导致的黑屏。
深挖EAS构建日志:虽然开发版崩溃没法直接看设备端日志,但构建过程的日志里大概率有线索。打开Expo Dashboard找到对应的构建记录,拉到日志底部,搜索
error或warning关键词,重点看iOS编译阶段的报错——比如某个依赖的原生模块编译失败,Expo Go会自动兼容这类问题,但EAS原生构建会直接暴露出来。用二分法缩小排查范围:先把你更新后修改的代码全部注释掉,重新构建测试。如果问题还存在,就逐步回退更新的依赖,优先回退核心包(expo、react-native、babel-preset-expo),每次只回退一个包后用EAS构建验证,直到找到触发问题的那个依赖。这种方法比全量回退高效太多。
检查原生配置遗漏:有些依赖更新后需要同步修改
app.json/app.config.js的配置,比如expo-build-properties可能需要调整iOS部署目标,或者新依赖需要添加权限声明。对比更新前的配置文件,看看有没有遗漏的权限、插件配置项,比如expo-device是否需要添加对应的隐私权限?捕获崩溃日志的两种方法:
- 用开发客户端远程日志:安装好崩溃的开发构建包后,执行
npx expo start --dev-client,尝试连接设备,有时候能捕获到启动时的错误信息; - Xcode查看崩溃报告:把iOS设备连接到电脑,打开Xcode→Window→Devices and Simulators,找到你的设备,查看Crash Reports,里面的堆栈信息能精准定位到崩溃的模块。
- 用开发客户端远程日志:安装好崩溃的开发构建包后,执行
清理构建缓存:EAS的缓存可能残留旧的编译文件,导致问题反复出现。构建时加上
--clear-cache参数强制重新编译:eas build --platform ios --clear-cache
按这个流程排查,应该能很快找到问题根源。我上次遇到类似情况是因为react-native-reanimated的版本和expo不兼容,回退到expo官方推荐的版本就解决了。
内容来源于stack exchange

