Xcode13.4.1归档上传App Store报PhaseScriptExecution打包失败
Xcode 13.4.1 归档项目报PhaseScriptExecution非零退出码解决方案
问题核心特征
- 模拟器Debug运行完全正常,无已知bug
- 执行Archive归档准备上传App Store时构建失败,核心报错为
Command PhaseScriptExecution failed with a nonzero exit code - 失败时执行的脚本路径为Xcode DerivedData目录下ID为
9740EEB61CF901F6004384FC的Shell脚本,该脚本为Flutter iOS工程默认的构建阶段脚本
常见诱因
- 构建脚本缺少可执行权限:Debug模拟器构建会优先读取缓存,不会全量校验脚本权限,归档时做全量构建校验会直接拦截无权限的脚本执行
- Xcode 13+沙盒规则兼容问题:Xcode 13.4.1默认开启用户脚本沙盒限制,旧版本Flutter/三方插件的构建脚本没有适配沙盒路径规则,访问受限路径时会触发退出
- 构建缓存污染:DerivedData目录下残留的历史Debug架构缓存和Release真机归档的架构配置冲突
- 架构裁剪逻辑异常:归档时脚本会对引入的动态库做真机架构裁剪,部分三方脚本没有过滤模拟器架构,裁剪时触发异常
可落地解决步骤(按优先级排序)
- 全量清理构建缓存
先关闭Xcode,在终端执行以下命令删除全局Xcode构建缓存:rm -rf ~/Library/Developer/Xcode/DerivedData/*
进入项目根目录执行Flutter侧清理:flutter clean flutter pub get cd ios pod install --repo-update - 补全脚本执行权限
在iOS目录下执行命令给所有构建阶段依赖的脚本加可执行权限:
重新打开Xcode,选中Runner Target → Build Phases,找到ID为chmod +x Flutter/flutter_export_environment.sh chmod +x Pods/Target\ Support\ Files/Pods-Runner/Pods-Runner-frameworks.sh find Pods -name "*.sh" -type f -exec chmod +x {} \;9740EEB61CF901F6004384FC的Run Script条目,勾选Run script only when installing选项,减少非必要阶段的脚本执行,避免环境差异引发的报错 - 适配Xcode 13沙盒规则
选中Runner Target → Build Settings,搜索User Script Sandboxing,将Release模式下的配置值从Yes改为No,放开构建脚本的路径访问权限 - 定位具体脚本错误行
如果以上步骤都没解决,打开报错对应的Run Script条目,在脚本第一行添加set -x,重新执行归档,Xcode构建日志会打印脚本每一行的执行结果,直接定位到触发非零退出码的具体命令再做针对性修复
内容的提问来源于stack exchange,提问作者Ammar Bishtawi
相关产品推荐
相关产品推荐

