Xcode警告:“输出文件有多个构建命令”


494

我收到这样的错误:

[WARN]警告:输出文件/Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png的多个构建命令

[WARN]警告:输出文件/Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png的多个构建命令

[WARN]警告:输出文件/Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png的多个构建命令

但是我已经检查了Xcode,并且根本看不到这些文件的任何重复。正如苹果邮件列表中的帖子所述,没有重复。

Answers:


809

在项目浏览器中,选择您的Xcode项目文件。这将显示项目设置以及项目中的目标。在“复制捆绑资源”构建阶段中查找。您应该在该列表中两次找到问题文件。删除重复的引用。

Xcode抱怨您试图将同一文件与应用程序捆绑两次。


1
当我从构建文件夹中删除某些资产(使用Finder)时,发生了我的事情。资产已替换为具有相同名称的资产,并将其拖动到XCode标记为“添加至目标”选项中。似乎XCode失去了同步,从而复制了副本捆绑资源中的那些条目
brainondev 2012年

1
我想为此添加一件事。如果您最终以某种方式获得了大量重复的引用(就像我一样),则只需单击“验证设置”,它将自动删除重复的引用。比手动寻找它们容易得多
Jon Mattingly 2013年

1
我有一个类似的问题。这个答案是最接近的。即使项目仅显示一次,<projName> .xcodeproj / project.pbxproj文件也具有重复的条目。这是一个合并的问题。用vi编辑可以达到目的:)感谢您为我指出正确的方向:)
javatarz

11
值得注意的是,如果在“复制捆绑资源”阶段中有大量重复文件,则可以单击此页面底部的“验证设置”,XCode会提示您有关重复项的信息,如果您单击“执行更改”。比单独寻找它们要快得多。
Yeti42

1
当我将“ Published-iOS”重新添加到项目中时,SpriteBuilder模板遇到了类似的问题。原来,它希望它成为“文件夹参考”而不是一个组,并且已将整个文件夹添加到“副本捆绑资源”中。因此,即使单个资源没有出现在该列表中,也请检查以确保没有从文件夹中添加它。
samkass 2014年

127

当您添加基于git的子项目时,这很容易引起。Xcode不够聪明,即使您无法从finder中看到它,也无法忽略.git子文件夹,因此,如果有多个名为“ master”或“ exclude”的文件(标准git repo文件),它将变得非常困惑。使用Xcode4,转到项目(左树的根),然后单击您的应用程序目标并展开“复制捆绑资源”,然后删除对.git的所有引用,无论如何您都不需要将它们烘焙到您的应用程序中。


43
我摸索了一下,所以这可能对某人有帮助:应用程序目标->构建阶段->复制捆绑资源
jaime

2
我的Xcode项目中有多个具有相同名称(但位于不同目录中)的文件。偶然地,我的其中一个在复制捆绑包资源步骤中同时拥有了这两个文件夹,这将导致其中一个在生成的应用程序捆绑包中被覆盖。只需删除其中之一。
巴斯蒂·本

112

实际上,答案很简单。

在您的Xcode项目中搜索引发警告的文件,然后删除其中之一。

Xcode将在搜索结果中仅显示该文件的一个引用,但不要在那里停止,继续并删除它。(最好在删除项目文件之前先对其进行备份)

现在再次构建项目。该警告现在应该消失。(此答案适用于以前版本的xcode)


但是文件不再出现在XCode的组中,并且文件窗格也不再出现。这是怎么回事?
Tejaswi Yerukalapudi 2010年

1
如果您仍然遇到此问题,只需从Xcode删除所有文件(不要在磁盘上删除它们)。然后将它们全部拖回。如果之后仍然存在问题,则实际上您有一些具有相同名称的资源(也许在不同的文件夹中)-查找并重命名/删除。Xcode输出进入一个平面文件夹,因此目录结构被忽略。
2012年

52

这不是Xcode错误,尽管警告消息不足以描述真正的原因。

当您的项目中有多个文件具有相同的名称时,会出现此错误消息。您只需要删除或重命名具有重复名称的文件即可解决问题。


1
是的,这是正确的答案。当您拥有资源文件(例如,具有相同名称但在文件系统上位于不同目录中的png)的情况下,情况很容易出现-在构建过程中,它们全部都复制到1 dir(即应用程序捆绑包)中。
Brynjar

@Brynjar是否可以解决具有相同名称的图像的问题?还是防止图像捆绑在一起?
安迪

实际上,我发现您可以创建“文件夹引用”来避免捆绑。
安迪

这是一种查找具有重复名称的文件的方法,而不管目录find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort如何,但这并不能解决我的问题
William Entriken 2015年

26

如果您在项目中有2个具有相同名称的文件,则会发生这种情况。即使在编译项目时文件在XCode中成组出现,所有文件最终都位于同一目录中。换句话说,如果您具有/group1/image.jpg和/group2/image.jpg,则编译后的项目将仅具有两个image.jpg文件之一。


17

如前所述,如果您在项目导航器中有多个具有相同名称但位于不同组(黄色文件夹)中的文件,则可以看到此问题。就我而言,这是故意的,因为我有多个子目录,每个子目录都带有一个“ preview.jpg”,我想将其复制到应用程序捆绑包中:

组参考

在这种情况下,您需要确保Xcode能够识别目录引用(蓝色文件夹图标),而不仅仅是组。

删除有问题的文件,然后选择“删除引用”(因此我们不会完全删除它们):

删除组引用


通过将它们拖回到项目导航器中,将它们重新添加到项目中。在出现的对话框中,选择“为任何添加的文件夹创建文件夹引用”:

添加为文件夹引用


请注意,这些文件现在在项目导航器中具有一个蓝色文件夹图标:

文件夹参考


如果现在查看目标构建阶段的“复制捆绑资源”部分,您会注意到整个文件夹只有一个条目,而不是目录中包含的每个项目的条目。编译器不会抱怨这些文件的多个构建命令。


15

这不是错误。Xcode辅助工具可以为您提供帮助。选择项目导航器左侧的目标。单击设置底部的“验证设置”。Xcode将检查设置,并尽可能删除重复项。


14

标题构建阶段中存在重复项时,可能会出现这种情况的另一种形式。

解决这个问题

  1. 去你的项目目标
  2. 选择 Build Phases
  3. 选择Headers构建阶段
  4. 输入警告中显示的名称
  5. 注意两个(或多个)项目
  6. +|-在左下角找到方框
  7. 选择其中一项,然后单击-按钮

7

就我而言,问题是由组内目标和文件夹的相同名称引起的。

只需重命名冲突的文件或文件夹即可解决该问题。


6

我找到了一个非常简单的解决方案:

  1. 从项目导航器中选择引起问题的文件
  2. 从文件检查器中取消选中目标成员资格
  3. 建立项目
  4. 再次重新检查文件的目标成员资格

警告不见了!检查此图像以供参考。

在此处输入图片说明


5

我很确定,这至少是由XCode 4错误引起的,至少在遇到这种情况的情况下。

如果您同时将多个依赖语言的文件添加到项目中,则会发生这种情况。我通过查看git差异发现了这一点。我在提交中什么也没做,只是添加了一些新的本地化nib文件。但是回头看一下project.pbxproj文件的不同之处,它显示出一堆新的重复引用,这些引用是为之前项目中已经存在的文件添加的。对我来说,这样做的文件似乎也很随意。

我多次重现了相同的确切行为。

从项目中删除这些文件并不能解决问题,因为它只会删除原始引用并保留重复项。修复此错误的唯一方法是退回提交并重新开始,或手动编辑项目文件,这是将其固定起来的一种好方法,因为它很难确定要删除哪些重复项,而您必须这样做在许多不同的地方

Xcode 4对我来说真是令人失望。


看起来这已在XCode 4.2中修复。在早期版本中,您可以通过将要为其添加本地化的文件放入其自己的“组”(项目中的虚拟文件夹)中来避免该错误。添加完本地化后,您可以将其放回原处并删除您创建的临时组。
史蒂夫

这不是错误。这是由于项目中有多个具有相同名称的文件。
Todd Hopkinson

1
本地化文件时,每个本地化文件都应具有相同的文件名,但在不同目录中除外。这确实是一个错误。
史蒂夫

4

发生这种情况是因为ur“ no.png”,“ d.png”和“ n.png”在资源中重复。只需查找删除复制的文件并删除即可。


3

当您对同一文件有多个引用时,似乎会出现错误。我有2个同名文件,并出现此错误。当我删除其中之一时,错误消失了。


2

在这个问题上还有另一个变化。我收到相同的消息,以前建议的解决方案都不能解决问题(例如,我肯定只有一个问题文件的副本)。

我的解决方案是在文本编辑器中编辑project.pbxproj文件(退出XCode并备份该文件之后),然后删除对有问题文件的所有引用。然后,再次启动XCode之后,我将文件手动添加回项目中,一切正常。

(我怀疑这个问题是由于手册而发生的,即:非XCode,项目文件的合并。)


1

打开项目中的Frameworks文件夹,并确保其中仅包含框架。我错误地添加了整个Developer文件夹!



1

对我来说,“目标”>“构建设置”>“包装”>“产品名称”被设置为与.plist文件中引用的另一个值相同,该文件是为我的应用程序定制的。最终由于我们的构建过程,这将创建重复文件。


1
这是我的问题,谢谢!
莱昂

0

雨燕3:(还有旧版本),当我拥有重复的资产时,就会发生这种情况。只需使用此问题重命名文件即可,一切顺利。

当您制作了,Assets.xcassets并用新名称重命名了重复项时,也可能发生这种情况,因此在您忘记时间并将其删除以添加文件夹引用后,这种情况又回到了重复文件问题。



0

关键是要做pod deintegraterm *.workspace归档!真是浪费时间!


0

React-Native用户。转到文件->工作区设置->构建系统->将其更改为旧版构建系统。并且现在应该可以构建。React-Native与新文件系统不兼容。



-1

虽然我确定有更好的方法,但核对仅花了我不到60秒的时间,这是我唯一能找到效果的方法。

  1. 将仓库拖到垃圾箱。
  2. 重新克隆您的仓库。
  3. 使用正确的远程跟踪来设置您的仓库。git remote add <url.git>, 要么git remote set-url <url.git>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.