React Native 0.71自定义iOS构建配置编译失败求助
问题:React Native自定义Xcode构建配置编译失败(cp目标目录不存在)
环境信息
- React Native 0.71.3
- Intel芯片Mac(macOS 13.2.1)
- 启用新架构(通过
RCT_NEW_ARCH_ENABLED=1 pod install安装Pods) - 自定义Xcode构建配置:Debug Altitude、Debug Staging、Debug Prod等
问题描述
默认Debug配置可正常编译,但通过Xcode复制Debug创建的自定义配置(如Debug Altitude)编译失败,报错cp命令目标目录不存在。重命名默认Debug配置也会触发相同错误。已尝试清理DerivedData、删除构建目录、重装node_modules和Pods等操作,均无效。
解决方案
步骤1:修改Podfile的post_install钩子,修复硬编码路径
在Podfile的post_install块中添加补丁代码,替换FBReactNativeSpec构建脚本里的硬编码配置名称:
post_install do |installer| react_native_post_install( installer, :mac_catalyst_enabled => false ) __apply_Xcode_12_5_M1_post_install_workaround(installer) # 新增:修复自定义配置的codegen路径问题 installer.pods_project.targets.each do |target| if target.name == 'FBReactNativeSpec' target.build_phases.each do |phase| if phase.is_a?(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) && phase.name.include?('Generate Specs') # 将硬编码的Debug/Release替换为Xcode内置的CONFIGURATION变量 phase.shell_script = phase.shell_script.gsub(/build\/(Debug|Release)/, "build/${CONFIGURATION}") phase.shell_script = phase.shell_script.gsub(/(Debug|Release)-iphoneos/, "${CONFIGURATION}-iphoneos") end end end end end
步骤2:确认Podfile的配置映射正确
确保Podfile中已正确将自定义配置关联到debug/release类型(你的现有配置已正确,无需修改):
project 'FormulaireQPZ', { 'Debug Altitude' => :debug, 'Debug Staging' => :debug, 'Debug Prod' => :debug, 'Release Altitude' => :release, 'Release Staging' => :release, 'Release Prod' => :release }
步骤3:彻底清理并重新构建
执行以下命令完成清理和重建:
# 清理Xcode DerivedData rm -rf ~/Library/Developer/Xcode/DerivedData # 删除iOS构建目录和Pods相关文件 rm -rf ios/build ios/Pods ios/Podfile.lock # 重装node依赖 yarn install # 重新安装Pods(启用新架构) RCT_NEW_ARCH_ENABLED=1 pod install
打开Xcode后,先执行Clean Build Folder(Cmd+Shift+K),再选择自定义配置重新编译。
问题根源
React Native 0.71.x版本的FBReactNativeSpec构建脚本中,硬编码了Debug和Release作为构建产物目录的一部分,未使用Xcode的${CONFIGURATION}环境变量适配自定义配置名称。当使用自定义Debug类配置时,脚本会尝试拷贝到不存在的build/Debug目录,导致cp命令报错。
内容的提问来源于stack exchange,提问作者La Gregance
相关产品推荐
相关产品推荐

