Xcode 13.4.1归档报错:Command PhaseScriptExecution失败(非零退出码)
解决Flutter 2.0.2 + Xcode 13.4.1归档时的Command PhaseScriptExecution错误(不升级环境)
针对你在不升级现有环境的前提下,删除功能后归档iOS项目遇到的脚本执行错误,可按以下步骤排查修复:
彻底清理已删除功能的残留
- 删除该功能对应的所有Dart代码、iOS原生文件(包括插件类、资源文件等),避免残留代码触发脚本异常
- 执行终端命令清理缓存:
flutter clean flutter pub get cd ios pod deintegrate pod install - 打开Xcode,执行
Product -> Clean Build Folder(快捷键Cmd+Shift+K)清理Xcode本地编译缓存
检查并修复Run Script配置
- 在Xcode中进入项目Target的
Build Phases,找到报错的Run Script(通常是Flutter自动添加的脚本) - 核对脚本路径是否正确:旧版Flutter的标准脚本路径为
"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh",可在终端执行echo $FLUTTER_ROOT确认路径,再在Xcode的Build Settings -> User-Defined中检查FLUTTER_ROOT变量是否匹配 - 若脚本包含自定义逻辑,删除与已移除功能相关的代码片段
- 在脚本设置中,将Shell改为
/bin/sh(部分旧环境下zsh会导致兼容性问题),并取消勾选Run script only when installing(归档时需要执行脚本)
- 在Xcode中进入项目Target的
修复权限与沙箱限制
- 确保项目目录和Flutter SDK目录无特殊字符,执行终端命令修复权限:
chmod -R 755 /path/to/your/project chmod -R 755 $FLUTTER_ROOT - 在Xcode的
Build Settings中搜索ENABLE_USER_SCRIPT_SANDBOXING,将其设置为NO(旧版Xcode的沙箱限制可能导致脚本执行失败)
- 确保项目目录和Flutter SDK目录无特殊字符,执行终端命令修复权限:
预编译验证
- 先在终端执行
flutter build ios --release,验证命令行编译是否正常,提前定位错误 - 在Xcode中选择
Generic iOS Device,执行Product -> Build for -> Archiving,确认编译通过后再进行归档操作 - 通过Xcode左侧的
Report Navigator(最后一个图标)查看详细错误日志,定位脚本执行失败的具体原因(如命令缺失、权限不足等)
- 先在终端执行
归档上传前的收尾检查
- 归档成功后,在Xcode Organizer中验证归档包,确认无已删除功能的残留信息
- 检查
Info.plist文件,删除与已移除功能相关的权限配置(如相机、定位等),避免App Store审核被拒
内容的提问来源于stack exchange,提问作者zerozuro
相关产品推荐
相关产品推荐

