Skip to content

Xcode PhaseScriptExecution 非零退出错误解决指南

PhaseScriptExecution failed with a nonzero exit code 是 Xcode 构建过程中常见的脚本执行失败错误,本文汇总多种有效解决方案

问题说明

在 Xcode 14.3+ 环境中打包 Flutter/React Native 应用时,常会遇到此错误导致构建中断,主要表现:

  • Xcode 打包功能 (Archive) 被禁用
  • 构建过程中出现 PhaseScriptExecution failed with a nonzero exit code 错误提示
  • 常见错误位置:Bundle React Native code and images 阶段或 Pods 相关脚本

即使尝试以下常规操作,问题可能依然存在:

bash
pod deintegrate
pod install
clean build folder

Xcode 错误截图示例


核心解决方案

方案一:修改 Pods 脚本文件 (Flutter/React Native 通用)

此方法适用于所有 CocoaPods 项目,需修改 -frameworks.sh 文件:

  1. 在项目中定位文件:
    ios/Pods/Target Support Files/Pods-项目名/Pods-项目名-frameworks.sh

  2. 查找以下代码片段:

bash
if [ -L "${source}" ]; then
  echo "Symlinked..."
  source="$(readlink "${source}")"
fi
  1. 添加 -f 标记修改为:
bash
if [ -L "${source}" ]; then
  echo "Symlinked..."
  source="$(readlink -f "${source}")"
fi

原理说明

readlink -f 会递归解析符号链接直到原始文件,避免路径解析失败导致脚本异常退出

方案二:清理项目缓存 (React Native 专享)

React Native 项目建议执行全面清理:

bash
npx react-native-clean-project  # 全面清理项目
cd ios && pod deintegrate       # 清除 Pod 依赖
npx pod-install                 # 重新安装 Pods
npx react-native start --reset-cache  # 重置 Metro 缓存

其他有效解决方法

Xcode 环境配置修复

方法 1:处理 .xcode.env 文件

bash
# 删除环境变量文件
rm ios/.xcode.env.local

# 创建新环境配置
echo 'export NODE_BINARY=$(command -v node)' > ios/.xcode.env

方法 2:开启 Rosetta 兼容模式

  1. Applications 中找到 Xcode 应用
  2. 右键 > 获取信息
  3. 勾选 使用 Rosetta 打开
  4. 重启 Xcode

项目路径与权限处理

修复空格路径问题:

bash
# 错误示例路径
/Users/name/XCode Projects/MyApp 

# 正确示例路径
/Users/name/XCodeProjects/MyApp

添加脚本执行权限:

bash
chmod +x "ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh"

React Native 脚本修改

定位文件 node_modules/react-native/scripts/find-node.sh

diff
- set -e  # 严格模式,任一命令失败即退出
+ set +e  # 宽松模式,允许命令失败继续执行

Expo 特殊处理

bash
# 删除 ios 目录并重新生成
rm -rf ios
eas build --platform ios  # 需要 Apple 开发者账号

Xcode 项目配置检查

  1. 在 Xcode 中打开项目
  2. 选择 PROJECT > Runner
  3. 确保所有配置模式一致:
    • Debug → :debug
    • Profile → :release
    • Release → :release

Xcode 配置示例

注意

修改 Pods 脚本后需彻底清理项目:
Product > Clean Build Folder + Xcode 完全重启


进阶排查技巧

  1. 检查详细日志

    • 在 Xcode 中打开 Report Navigator (⌘+9)
    • 展开失败的任务查看完整错误输出
  2. 验证环境变量: 确认 .xcode.env 文件正确指向 Node 路径

    bash
    export NODE_BINARY="/usr/local/bin/node"  # 实际路径通过 `which node` 获取
  3. 同步依赖版本: React Native 项目需匹配特定库版本

    bash
    npx expo install react-dom@18.2.0 @expo/metro-runtime@~3.1.1

:::success 最佳实践
定期执行 pod repo update + npx react-native-clean-project 可预防 80% 的脚本执行问题
:::