You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS单元测试报Command PhaseScriptExecution failed with a nonzero exit code错误

iOS 单元测试触发 Command PhaseScriptExecution failed 报错解决方案

适用场景:iOS原生项目真机运行功能正常,仅运行Unit Tests时抛出该非零退出码错误,可按以下步骤逐一排查修复:

  • 过滤测试阶段无需执行的Run Script
    打开项目对应Test Target的Build Phases面板,逐一检查所有Run Script条目:
    1. 仅用于真机打包、签名、资源加密的业务脚本,直接勾选For install builds only选项,单元测试运行阶段不会触发这类脚本执行
    2. 自定义脚本可在开头加入测试环境判断,测试场景直接跳过执行:
      # 识别到单元测试运行环境直接退出脚本
      if [ -n "${TEST_TARGET_NAME}" ]; then
        exit 0
      fi
      
    3. 若脚本依赖本地文件读写,提前给脚本目录加执行权限: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后重新执行单元测试
  • 排查脚本硬编码路径问题
    大部分脚本执行失败的核心原因是路径硬编码:很多自定义脚本写死了主App的产物路径${BUILT_PRODUCTS_DIR}/你的项目名.app,但单元测试运行时产物是独立的Test Bundle,脚本找不到对应文件就会抛出非零退出码。这类问题直接把硬编码路径替换为Xcode自带的环境变量即可,不要写死项目名、target名。

Command PhaseScriptExecution failed with a nonzero exit code

内容的提问来源于stack exchange,提问作者Sachin Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:09:37