React Native项目Xcode编译失败:多命令生成同一文件报错
解决React Native第三方依赖重复文件导致的Xcode编译错误
方法一:手动在Xcode中为不同构建目标排除冗余文件
- 打开项目对应的Xcode工程/工作区文件(
.xcodeproj或.xcworkspace) - 在左侧导航栏定位到报错的第三方依赖包(
{package_name}) - 选中该包后切换到Build Phases标签页
- 展开Compile Sources,找到那组同名文件
- 针对每个重复文件,取消勾选与自身架构不匹配的构建目标:比如对应真机的文件,取消勾选
Debug-iphonesimulator和Release-iphonesimulator;对应模拟器的文件,取消勾选Debug-iphoneos和Release-iphoneos
方法二:用CocoaPods脚本自动区分架构(推荐)
如果项目用CocoaPods管理依赖,在Podfile末尾添加以下脚本,自动为不同架构排除对应文件:
post_install do |installer| installer.pods_project.targets.each do |target| # 替换成你的第三方依赖包名 next unless target.name == '{package_name}' target.source_build_phase.files.each do |file| file_path = file.file_ref.path # 根据文件路径里的标识区分真机/模拟器文件,比如路径包含device或simulator if file_path.include?('device') # 真机文件排除模拟器架构 target.build_configurations.each do |config| config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64 x86_64' end elsif file_path.include?('simulator') # 模拟器文件排除真机架构 target.build_configurations.each do |config| config.build_settings['EXCLUDED_ARCHS[sdk=iphoneos*]'] = 'arm64' end end end end end
添加完成后执行pod install更新依赖配置。
方法三:修改第三方依赖的文件结构
- 找到
node_modules中对应的第三方依赖包 - 给其中一组重复文件重命名(比如真机文件加
-device后缀,模拟器文件加-simulator后缀) - 同步修改该依赖包
ios目录下的工程文件(.xcodeproj),确保所有文件引用路径正确 - 注意:这种方法需要锁定依赖版本,避免后续
npm install/yarn install时被覆盖,也可以考虑fork该依赖包维护自己的修改版本
方法四:临时调整Xcode构建输出路径(治标不治本)
- 打开Xcode,点击顶部菜单File > Project Settings(或Workspace Settings)
- 在Build Location区域选择Custom,修改Derived Data的路径为新的唯一路径
- 清理之前的构建缓存:点击Product > Clean Build Folder
相关报错信息:
Showing All Errors Only
Multiple commands produce '/Users/{username}/Library/Developer/Xcode/DerivedData/{project-_name}-bzslvhzsciyfxdgcrhaxbhhllyaq/Build/Products/Debug-iphonesimulator/{package_name}/{package_name}framework/Headers/ModuleAppleHealth-Swift.h'
内容的提问来源于stack exchange,提问作者Rami Elwan
相关产品推荐
相关产品推荐

