IOS下XCODE10错误:Multiple commands produce解决方法

在升级到Xcode10后,遇到编译错误提示'Multiple commands produce',主要涉及info.plist和Copy Pods Resources。解决方法包括将构建系统切换回Legacy模式,或者删除Build Phases中多余的信息。具体操作包括在target的Copy Bundle Resources中移除重复的info.plist,以及在Copy Pods Resources的Output Files中移除冲突的资源。

使用XCode10编译老项目时报错;

Xcode10使用了一个的新创建系统,比之前的提供更好的可靠性与创建性能,而且可以获取项目配置问题(默认设置新创建系统);在苹果文档中,提及Xcode10中的关于旧项目New Build System更改适配中提及到以下两点。

The new build system has stricter checks for cycles between elements in the build in order to prevent unnecessary rebuilds.

It is an error for any individual file in the build to be produced by more than one build command. For example, if two targets each declare the same output file from a shell script phase, factor out the declaration of the output file into a single target.

New Build System会对构建中的元素循环进行严格的检查,避免不必要的重建,这个也是错误出现的原因。

错误发生的两种普遍形式:

1、info.plist

Multiple commands produce '/Users/tjsoft/Library/Developer/Xcode/DerivedData/TYKYTwoLearnOneDo-amcfzswumxdotlgjwdslugmywxch/Build/Products/Debug-iphoneos/TYKYTwoLearnOneDo.app/Info.plist':
1) Target 'TYKYTwoLearnOneDo' (project 'TYKYTwoLearnOneDo') has copy command from '/Users/tjsoft/TYKY /党建/黔纪/Qian
<think>好的,我现在需要帮用户解决Xcode 16中出现的“Multiple commands produce ‘/xxx.app/Info.plist’”报错问题。首先,我得回忆一下以前处理类似问题的经验,以及用户提供的引用内容。 用户提到的是Xcode 16,但引用中的例子都是Xcode 10或更早版本的情况。不过,这类问题通常是由于项目中有多个Info.plist文件被复制到同一个位置导致的冲突。根据引用里的信息,比如引用[2]提到在Build Phases的Copy Bundle Resources中删除Info.plist,这可能是一个常见的解决方法。 接下来,我需要确定在Xcode 16中,步骤是否类似。可能的情况是,项目的多个目标或子模块不小心包含了Info.plist文件,或者CocoaPods集成的第三方库带来了额外的plist文件。用户的问题可能出现在主项目或者Pod项目中,需要分情况处理。 首先,用户应该检查Build Phases中的Copy Bundle Resources,看看是否有多个Info.plist被包含进去。如果有,移除重复的,特别是那些不是自己主动添加的。此外,可能还需要检查其他构建阶段,比如Copy Files或者Compile Sources,虽然plist通常不会在这里,但有时配置错误也可能导致问题。 另外,引用[4]提到Pod项目中的目标可能复制了Info.plist,这时候需要检查Pods的各个子模块设置,特别是资源文件的复制路径。可能需要修改Podfile,排除某些资源的复制,或者更新CocoaPods版本,因为新版本的Xcode可能对路径处理有变化。 用户可能需要清理Derived Data,因为有时候旧的文件残留会导致冲突。执行Clean Build Folder,然后重新构建,可能解决问题。如果问题依旧,再考虑手动删除Derived Data文件夹。 还有一种可能性是项目的配置文件被错误地标记为需要复制到资源包中。例如,某些第三方框架可能自带Info.plist,当被集成到项目中时,Xcode可能会自动将其加入复制阶段。这时候需要在对应的目标设置中排除这些文件。 需要分步骤给出解决方案,确保用户能逐步排查。比如,第一步检查Copy Bundle Resources,第二步处理CocoaPods相关的问题,第三步清理构建目录,第四步检查项目设置中的Info.plist路径是否正确。如果用户使用的是新项目模板,可能Xcode 16的默认配置有变化,需要调整。 此外,用户可能已经尝试过一些常见方法,但问题依然存在,因此需要提供更深入的解决方案,比如手动编辑project.pbxproj文件,但这需要谨慎操作。或者,建议检查Xcode的更新日志,看是否有相关改动影响plist处理。 最后,确保用户了解每个步骤的目的,避免误操作导致其他问题。比如,删除plist文件前确认是否是多余的副本,而不是主项目必需的文件。同时,提醒备份项目,以防万一。</think>针对Xcode 16中出现的`Multiple commands produce '.../Info.plist'`报错问题,以下是分步解决方案: ### 核心问题定位 该报错由**重复的Info.plist文件复制指令**引起,常见于多模块项目、CocoaPods依赖管理或Xcode新版本构建系统优化后的路径冲突[^2][^4]。 --- ### 解决方案步骤 #### 第一步:清理冗余配置 1. **删除Copy Bundle Resources中的Info.plist** - 打开项目设置 - 选择`Build Phases` → `Copy Bundle Resources` - 查找所有`Info.plist`文件(特别是第三方库自动生成的) - 点击`-`号移除非主工程的plist文件[^2] ```markdown ![操作示意] Xcode界面路径:Target > Build Phases > Copy Bundle Resources ``` #### 第二步:检查多模块冲突 2. **处理Pod项目冲突(如使用CocoaPods)** - 在`Pods`项目中逐个检查子模块 - 定位到`Pods > Targets Support Files > [第三方库名称]` - 确认是否存在`Info.plist`被错误包含在资源文件中 ```ruby # 可在Podfile中添加排除规则 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['INFOPLIST_FILE'] = '' if target.name == '冲突模块名' end end end ``` #### 第三步:强制清理构建缓存 3. **深度清理DerivedData** - 关闭Xcode - 终端执行: ```bash rm -rf ~/Library/Developer/Xcode/DerivedData ``` - 重新启动Xcode并选择`Product > Clean Build Folder` #### 第四步:验证项目配置 4. **检查Info.plist路径设置** - 确保主工程`Target > Build Settings`中: - `Info.plist File`指向唯一正确路径 - `Generate Info.plist File`设置为`NO`(若手动维护plist) - `Product Bundle Identifier`保持唯一性 --- ### 扩展优化建议 - 对于Swift Package Manager依赖:检查`.swiftpm`文件是否意外包含plist - 使用Xcode 16新特性`Build System > Parallelization`时,尝试暂时关闭该选项进行测试 - 若使用自定义构建脚本:检查是否有`cp`命令复制了plist文件 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值