Flutter应用iOS部署Xcode报PhaseScriptExecution非零退出码错误如何解决
Flutter iOS构建报
PhaseScriptExecution failed with a nonzero exit code排查方案 这个报错本质是Xcode执行项目内置的Flutter构建脚本时,执行流程未正常完成就返回了非0退出码,并非Xcode本身的功能故障,按以下步骤顺序排查即可解决:
第一步:清理全链路残留缓存
- 在Flutter项目根目录依次执行:
flutter cleanflutter pub get
- 手动删掉日志里提到的DerivedData对应项目目录(即
Runner-hfjtuvhggwzrrceitthqbpzcpuss整个文件夹),别留旧的构建缓存 - 完全退出Xcode,打开项目ios目录下的
.xcworkspace文件启动,别直接打开.xcodeproj文件,后者会触发Pod依赖加载异常直接导致脚本失败
第二步:校验Flutter构建脚本配置
- 进入Xcode的
Targets > Runner > Build Phases面板,找到脚本ID为9740EEB61CF901F6004384FC的Run Script阶段(就是日志关联的报错脚本) - 取消勾选这个脚本下面的「Based on dependency analysis」选项,确认脚本内容是标准Flutter构建逻辑:
/bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" build /bin/sh "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" embed_and_thin - 配好Mac系统权限:打开「系统设置 > 隐私与安全性 > 完全磁盘访问权限」,把Xcode、终端、跑Flutter命令的开发工具全加进授权列表,不然脚本读不到Flutter路径直接执行失败
第三步:对齐签名与项目配置要求
- 回到
Targets > Runner > Signing & Capabilities面板,勾选「Automatically manage signing」,选对自己的开发者团队,别手动选描述文件,手动选的配置很容易和Flutter脚本的权限校验逻辑冲突 - 检查最低iOS部署版本:Flutter 3.10以上版本要求iOS最低版本是12.0,把项目级、Target级的iOS Deployment Target全改成12.0,版本校验不通过会直接触发脚本非0退出
第四步:重置CocoaPods依赖
- 进到项目的ios目录,依次执行命令完成依赖重置:
sudo gem install cocoapods(升级到最新稳定版)pod deintegraterm -rf Pods Podfile.lockpod install --repo-update
- 依赖配完回Xcode重新构建就行
定位具体报错根因的方法
别只盯着“nonzero exit code”的笼统提示,点开Xcode报错详情面板的过滤选项,选展示全量构建日志,往上翻找脚本输出的红色错误行,就能看到脚本失败的具体原因,比如路径找不到、权限不足、依赖缺失这类明确提示。
内容的提问来源于stack exchange,提问作者Ron R
相关产品推荐
相关产品推荐

