iOS单元测试报Command PhaseScriptExecution failed with a nonzero exit code错误
iOS 单元测试触发 Command PhaseScriptExecution failed 报错解决方案
适用场景:iOS原生项目真机运行功能正常,仅运行Unit Tests时抛出该非零退出码错误,可按以下步骤逐一排查修复:
- 过滤测试阶段无需执行的Run Script
打开项目对应Test Target的Build Phases面板,逐一检查所有Run Script条目:- 仅用于真机打包、签名、资源加密的业务脚本,直接勾选For install builds only选项,单元测试运行阶段不会触发这类脚本执行
- 自定义脚本可在开头加入测试环境判断,测试场景直接跳过执行:
# 识别到单元测试运行环境直接退出脚本 if [ -n "${TEST_TARGET_NAME}" ]; then exit 0 fi - 若脚本依赖本地文件读写,提前给脚本目录加执行权限:
chmod -R 755 你的脚本所在目录路径
- 修复CocoaPods配置适配问题
若项目通过CocoaPods管理依赖,先关闭Xcode,在项目根目录执行命令重装依赖:pod deintegrate && pod install --repo-update
重装后打开项目检查Test Target的架构配置,在Podfile的post_install钩子中添加测试端架构排除逻辑,避免测试编译时拉取真机专属arm64架构导致脚本执行失败:post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| # 模拟器测试场景排除arm64架构编译 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end end - 清理全量编译缓存
旧的编译缓存经常导致脚本路径匹配异常,按顺序执行以下清理操作:- Xcode内按快捷键
Shift + Command + K清空当前项目Build产物 - 打开Xcode设置-Locations路径,删除对应项目的Derived Data文件夹
- 重启Xcode后重新执行单元测试
- Xcode内按快捷键
- 排查脚本硬编码路径问题
大部分脚本执行失败的核心原因是路径硬编码:很多自定义脚本写死了主App的产物路径${BUILT_PRODUCTS_DIR}/你的项目名.app,但单元测试运行时产物是独立的Test Bundle,脚本找不到对应文件就会抛出非零退出码。这类问题直接把硬编码路径替换为Xcode自带的环境变量即可,不要写死项目名、target名。

内容的提问来源于stack exchange,提问作者Sachin Mishra
相关产品推荐
相关产品推荐

