Xcode 14.3.1归档iOS应用时遇Command PhaseScriptExecution错误如何解决?
这个错误本质是Xcode执行构建阶段的脚本时出了问题,既然你试过常规方案,试试这些更细节的排查点:
先扒完整报错日志:打开Xcode的Report Navigator(左侧导航栏最后一个图标),找到对应的归档任务,展开「Command PhaseScriptExecution」的详细日志——很多时候关键错误信息被折叠在里面,比如是CocoaPods的framework脚本崩溃,还是自定义脚本里的路径错误,必须看完整输出才能定位根因。
给脚本加执行权限:如果是第三方脚本(比如CocoaPods生成的
Pods-xxx-frameworks.sh)或者自定义脚本,终端进入项目目录,执行chmod +x 脚本文件路径,比如针对CocoaPods脚本:chmod +x Pods/Target\ Support\ Files/Pods-YourAppName/Pods-YourAppName-frameworks.sh,避免因权限不足导致执行失败。排查脚本里的环境变量:有些脚本依赖
$SRCROOT、$BUILT_PRODUCTS_DIR这类Xcode内置变量,检查脚本里有没有硬编码本地绝对路径(比如/Users/xxx/Documents/...),或者引用了未定义的变量。归档时的构建路径和Debug模式不同,硬编码路径肯定会报错。彻底重置依赖:如果用CocoaPods,先跑
pod deintegrate清空现有依赖,再pod install重新生成;用Swift Package Manager的话,选Xcode菜单「File -> Packages -> Reset Package Caches」,再重新拉取依赖。有时候依赖的脚本文件损坏或版本不兼容会触发这个错误。核对Release配置的脚本设置:归档默认用Release配置,检查Build Phases里的脚本是否在Release模式下正确启用?有没有脚本顺序错误(比如某个脚本依赖的资源还没生成就提前执行了)?有些Debug模式下正常的脚本,Release模式下可能因为优化选项导致逻辑出错。
验证系统工具版本:脚本里用到的Python、Ruby、Node.js等工具,Xcode执行时用的是系统默认版本,和你终端里的可能不一样。可以在脚本开头加一行
which ruby或者ruby --version,看输出的版本是否符合要求(比如CocoaPods需要特定Ruby版本,系统Ruby可能版本过低)。如果版本不匹配,要么调整脚本用正确的工具路径,要么统一系统和Xcode的工具版本。检查签名相关脚本:如果脚本涉及代码签名、钥匙串操作,试试在终端执行
security unlock-keychain解锁登录钥匙串,避免归档时Xcode无法访问签名证书。同时核对Build Settings里的CODE_SIGN_IDENTITY、PROVISIONING_PROFILE是否和归档需求匹配。
内容的提问来源于stack exchange,提问作者Dipak Toke

