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
相关脚本
即使尝试以下常规操作,问题可能依然存在:
pod deintegrate
pod install
clean build folder
核心解决方案
方案一:修改 Pods 脚本文件 (Flutter/React Native 通用)
此方法适用于所有 CocoaPods 项目,需修改 -frameworks.sh
文件:
在项目中定位文件:
ios/Pods/Target Support Files/Pods-项目名/Pods-项目名-frameworks.sh
查找以下代码片段:
if [ -L "${source}" ]; then
echo "Symlinked..."
source="$(readlink "${source}")"
fi
- 添加
-f
标记修改为:
if [ -L "${source}" ]; then
echo "Symlinked..."
source="$(readlink -f "${source}")"
fi
原理说明
readlink -f
会递归解析符号链接直到原始文件,避免路径解析失败导致脚本异常退出
方案二:清理项目缓存 (React Native 专享)
React Native 项目建议执行全面清理:
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 文件
# 删除环境变量文件
rm ios/.xcode.env.local
# 创建新环境配置
echo 'export NODE_BINARY=$(command -v node)' > ios/.xcode.env
方法 2:开启 Rosetta 兼容模式
- 在
Applications
中找到 Xcode 应用 - 右键 > 获取信息
- 勾选
使用 Rosetta 打开
- 重启 Xcode
项目路径与权限处理
修复空格路径问题:
# 错误示例路径
/Users/name/XCode Projects/MyApp
# 正确示例路径
/Users/name/XCodeProjects/MyApp
添加脚本执行权限:
chmod +x "ios/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh"
React Native 脚本修改
定位文件 node_modules/react-native/scripts/find-node.sh
:
- set -e # 严格模式,任一命令失败即退出
+ set +e # 宽松模式,允许命令失败继续执行
Expo 特殊处理
# 删除 ios 目录并重新生成
rm -rf ios
eas build --platform ios # 需要 Apple 开发者账号
Xcode 项目配置检查
- 在 Xcode 中打开项目
- 选择 PROJECT > Runner
- 确保所有配置模式一致:
- Debug → :debug
- Profile → :release
- Release → :release
注意
修改 Pods 脚本后需彻底清理项目:Product > Clean Build Folder
+ Xcode 完全重启
进阶排查技巧
检查详细日志:
- 在 Xcode 中打开 Report Navigator (⌘+9)
- 展开失败的任务查看完整错误输出
验证环境变量: 确认
.xcode.env
文件正确指向 Node 路径bashexport NODE_BINARY="/usr/local/bin/node" # 实际路径通过 `which node` 获取
同步依赖版本: React Native 项目需匹配特定库版本
bashnpx expo install react-dom@18.2.0 @expo/metro-runtime@~3.1.1
:::success 最佳实践
定期执行 pod repo update
+ npx react-native-clean-project
可预防 80% 的脚本执行问题
:::