Expo分离后iOS Release构建失败:Command /bin/sh/退出码1错误求助
解决Expo Eject后Xcode Archive报错“Command /bin/sh failed with exit code 1”的方案
我之前在处理Expo eject后的iOS项目时也碰到过几乎一模一样的问题,结合踩过的坑,给你几个实用的排查和解决方向:
1. 先排查Expo配置文件的完整性
你看到的[exp] Unable to read ex...截断错误,大概率是Expo无法正确读取项目的配置文件(比如根目录的app.json/app.config.js,或者iOS目录下自动生成的Expo.plist)。
- 先在项目根目录终端运行
expo config命令,如果这个命令报错,那肯定是配置文件有语法问题(比如JSON格式错误、缺了逗号、键名写错),先把配置文件的问题修复好。 - 检查iOS目录下的
Expo.plist是否存在,如果不存在,试着重新运行expo eject(记得先备份好现有原生代码)。
2. 彻底清理缓存并重新安装依赖
缓存问题是这类报错的重灾区,按顺序执行以下操作:
- 进入iOS目录,删除
Pods文件夹和Podfile.lock文件 - 运行
pod deintegrate命令彻底卸载现有pod依赖 - 重新执行
pod install - 打开Xcode,用快捷键
Cmd+Shift+K清理Build Folder - 删除项目根目录的
.expo文件夹,然后重启Xcode再尝试Archive
3. 检查Xcode里的Expo脚本配置
这个/bin/sh错误一般是Build Phases里的Expo脚本执行失败:
- 打开Xcode项目,进入
Build Phases标签页,找到[expo] Configure project这个脚本 - 把脚本里的命令复制到终端(先cd到iOS目录)手动运行,比如如果脚本内容是
../node_modules/expo/scripts/autolinking-configure.sh,就执行这个命令,这样能看到完整的错误信息,而不是截断的Unable to read ex...,方便定位具体问题。
4. 确认版本兼容性
Expo、React Native和第三方库的版本不匹配也会导致eject后出现各种奇怪问题:
- 检查
package.json里expo、react-native、expo-camera的版本是否兼容,对照Expo官方的版本兼容列表调整(比如如果你的Expo版本是48,React Native应该对应0.71.x) - 如果版本差距较大,建议升级/降级到兼容的版本后重新eject和安装依赖
5. 替代方案:不用eject直接生成无签名IPA
如果你的核心需求只是生成无签名iOS IPA,其实可以不用走eject流程,直接在项目根目录运行:
expo build:ios --no-sign
这个命令会直接在Expo服务器上构建无签名的IPA,下载下来就能用,省去了处理原生项目的麻烦。
内容的提问来源于stack exchange,提问作者Abrar A.
相关产品推荐
相关产品推荐

