Mac执行npx react-native run-ios构建现有iOS项目失败如何解决
React Native iOS构建RCT-Folly及React-Core编译报错修复方案
问题说明
- 在Mac设备运行现有React Native项目生成iOS构建包,执行
npx react-native run-ios命令时抛出异常,初步判断报错与RCT-Folly相关,此前尝试多个公开解决方案、新建空白RN项目迁移业务文件、重装CocoaPods均未修复,问题已阻塞开发3天以上。 - 降级React Native版本后出现新的React-Core相关编译报错,报错日志如下:
CompileC /Users/admin/Desktop/MTM/mindToMindfull\ 2/ios/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/React-Core.build/Objects-normal/x86_64/RCTJSThread.o /Users/admin/Desktop/MTM/mindToMindfull\ 2/node_modules/react-native/React/Base/RCTJSThread.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler (in target 'React-Core' from project 'Pods')
补充说明:RCT-Folly是React Native底层依赖的C++通用工具库,版本不匹配、编译参数配置错误是RN iOS构建阶段最常见的报错诱因之一。
分步修复操作
第一步:全链路清理缓存与旧依赖
按顺序执行以下命令,彻底清除所有可能导致冲突的缓存、旧构建产物:
# 清理watchman监听缓存 watchman watch-del-all # 清理JS侧依赖与锁文件 rm -rf node_modules rm -rf yarn.lock package-lock.json # 清理iOS侧Pods依赖、构建产物 cd ios rm -rf Pods rm -rf Podfile.lock rm -rf build pod deintegrate cd ..
注意:从报错路径可以看到当前项目存放目录
mindToMindfull 2包含空格,先把目录重命名为无空格、无特殊字符的格式(例如mindToMindfull2),路径含空格会触发大量底层编译路径解析错误,是新手极易忽略的基础问题。
第二步:Podfile添加依赖版本与编译参数锁定
打开ios/Podfile文件,在post_install钩子中添加如下配置,锁定RCT-Folly版本、修复React-Core编译参数:
post_install do |installer| installer.pods_project.targets.each do |target| # 配置RCT-Folly编译参数,避免宏定义缺失报错 if target.name == 'RCT-Folly' target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'FOLLY_NO_CONFIG=1', 'FOLLY_MOBILE=1' ] end end # 修复React-Core模拟器架构编译报错 if target.name == 'React-Core' target.build_configurations.each do |config| config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES' config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = '' end end end end
不要随意跨大版本升降级React Native,0.68~0.72区间的RN版本固定适配Folly 2021.07.22.00版本,手动修改Folly版本号会直接触发依赖冲突。
第三步:重新安装依赖执行构建
按顺序执行以下命令重新安装依赖、启动构建:
# 安装JS侧依赖 yarn install # 使用npm的话替换为npm install # 安装iOS侧Pods依赖 cd ios pod install --repo-update cd .. # 启动iOS构建 npx react-native run-ios
额外排查项
如果完成上述操作后仍存在编译报错,依次核对以下配置:
- 确认Xcode版本与当前使用的React Native版本匹配,0.70及以上版本RN要求Xcode最低版本为14.0
- 打开Xcode检查主项目与所有Pods依赖的iOS部署目标版本,统一设置为13.0及以上,避免版本不一致触发编译错误
- 确认本地Command Line Tools已在Xcode设置中绑定为当前安装的Xcode版本,不要使用单独安装的Command Line Tools包
内容的提问来源于stack exchange,提问作者Ahmad Hussain
相关产品推荐
相关产品推荐

