M2芯片Mac+Xcode15运行React Native遇PhaseScriptExecution错误求助
问题描述
搭载M2芯片的MacBook Air,搭配Xcode 15.0,在模拟器中运行React Native项目时出现以下构建错误:
以下构建命令执行失败:
PhaseScriptExecution [CP-User] Generate Specs /User.../FBReactNativeSpec.build/Script-46EB2E110.sh(来自项目'Pods'的目标'FBReactNativeSpec')
(1次失败)
新建React Native项目尝试iOS运行时问题依然存在,已执行以下操作:
- 选择Product Destination的Show Rosetta
- 添加链接器标志
-ld64
附react-native info配置信息:
System: OS: macOS 14.1 CPU: (8) arm64 Apple M2 Memory: 498.81 MB / 24.00 GB Shell: 3.2.57 - /bin/bash Binaries: Node: 18.18.0 - /usr/local/bin/node Yarn: 1.22.19 - /opt/homebrew/bin/yarn npm: 9.8.1 - /usr/local/bin/npm Watchman: 2023.09.25.00 - /opt/homebrew/bin/watchman Managers: CocoaPods: 1.13.0 - /opt/homebrew/bin/pod SDKs: iOS SDK: Platforms: DriverKit 23.0, iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0 Android SDK: Not Found IDEs: Android Studio: 2022.2 AI-222.4459.24.2221.10121639 Xcode: 15.0/15A240d - /usr/bin/xcodebuild Languages: Java: 19.0.1 - /usr/bin/javac npmPackages: @react-native-community/cli: Not Found react: 17.0.2 => 17.0.2 react-native: 0.66.4 => 0.66.4 react-native-macos: Not Found npmGlobalPackages: *react-native*: Not Found
错误成因
- 版本兼容性不匹配:React Native 0.66.4是2021年的老旧版本,完全未适配Xcode 15和macOS 14(Sonoma)。Xcode 15重构了构建工具链,默认使用
ld64.lld链接器,且对Pod脚本的执行环境有新要求,老版本RN的FBReactNativeSpec生成脚本无法适配这些变化。 - Node版本过高:RN 0.66.4官方推荐的Node版本范围是14.x-16.x,当前使用的Node 18.18.0超出兼容范围,可能导致脚本执行时出现隐性错误。
- CocoaPods版本偏旧:CocoaPods 1.13.0对Xcode 15的支持不完善,Pod依赖的构建脚本可能存在架构适配问题。
解决方法
方案一:升级React Native版本(推荐)
老旧RN版本与新系统、新Xcode的兼容性问题无法通过临时修复彻底解决,建议升级到0.72及以上版本(该版本开始官方适配Xcode 15和Sonoma):
- 备份项目代码后,使用RN官方升级工具执行升级:
npx react-native upgrade - 升级完成后,重新安装依赖:
npm install cd ios && pod install
方案二:临时修复(无法升级RN时使用)
- 调整脚本权限:
进入iOS项目的Pod目录,给报错的脚本添加可执行权限:cd ios/Pods/FBReactNativeSpec chmod +x Script-46EB2E110.sh # 替换为实际的脚本文件名 - 修改脚本执行环境:
在Xcode中打开项目,找到Pods项目下的FBReactNativeSpec目标,进入Build Phases->[CP-User] Generate Specs,勾选"Run using Rosetta",并确保脚本的Shell路径设置为/bin/bash。 - 升级CocoaPods:
brew upgrade cocoapods cd ios && pod deintegrate && pod install - 降级Node版本:
使用nvm管理Node版本,切换到RN 0.66.4兼容的16.x版本:nvm install 16 nvm use 16
内容的提问来源于stack exchange,提问作者Jeff Bootsholz
相关产品推荐
相关产品推荐

