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

Xcode warning: "Multiple build commands for output file"

提问人:Futur 提问时间:4/27/2010 最后编辑:CommunityFutur 更新时间:9/24/2023 访问量:150510

问:

我收到这样的错误:

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

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

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

但是我已经检查了Xcode,我根本没有看到此类文件的任何重复项。正如 Apple 邮件列表中的这篇文章所说,没有重复项。

Xcode 构建 警告

评论


答:

118赞 Futur 5/1/2010 #1

实际上,这个问题的答案很简单。

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

Xcode在搜索结果中只会显示该文件的一个引用,但不要止步于此,请继续删除它。(最好在删除项目文件之前对其进行备份)

现在再次生成项目。警告现在应该消失了。 (此答案适用于以前版本的 Xcode)

评论

0赞 Tejaswi Yerukalapudi 10/7/2010
但是这些文件不再出现在 XCode 的组和文件窗格中。这是怎么回事?
1赞 n13 2/28/2012
如果您仍然遇到问题,只需从 Xcode 中删除所有文件(不要在磁盘上删除它们)。然后将它们全部拖回。如果之后仍然有问题,那么您实际上有一些同名的资源(可能在不同的文件夹中) - 查找并重命名/删除。Xcode 输出进入平面文件夹,因此目录结构被忽略。
26赞 respectTheCode 11/10/2010 #2

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

52赞 aimacworx 12/21/2010 #3

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

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

评论

1赞 Brynjar 11/23/2011
是的,这是正确答案。当您有资源文件时,这种情况很容易出现,例如具有相同名称但在文件系统上不同目录中的 png - 在构建过程中,它们都会被复制到 1 个目录,即应用程序包。
0赞 Andrew 2/25/2015
@Brynjar有没有解决方法允许同名的图像?还是为了防止图像捆绑在一起?
0赞 Andrew 2/25/2015
实际上,我发现您可以创建文件夹引用来避免捆绑。
0赞 William Entriken 11/12/2015
这是一种查找具有重复名称的文件的方法,无论目录如何,但这并没有解决我的问题find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort
3赞 hilla 2/20/2011 #4

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

127赞 slf 3/13/2011 #5

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

评论

43赞 jaime 4/15/2011
我摸索了一会儿,所以这可能会对某人有所帮助:应用程序目标 -> 构建阶段 ->复制捆绑资源
2赞 BastiBen 6/26/2012
我的 Xcode 项目中有多个同名文件(但位于不同的目录中)。不小心,我的一个在“复制捆绑包资源”步骤中同时使用了它们,这将导致其中一个在生成的应用程序捆绑包中被覆盖。只需删除其中一个即可。
818赞 Mark Suman 4/14/2011 #6

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

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

评论

1赞 brainondev 11/22/2012
当我从构建文件夹中删除一些资产(使用 Finder)时,我就会发生这种情况。将资产替换为使用相同名称更新的资产,并将它们拖动到 XCode 中,标记“添加到目标”选项。似乎 XCode 在复制捆绑资源中复制这些条目时不同步
1赞 Jon Mattingly 6/13/2013
我想补充一件事。如果您最终以某种方式得到大量重复的引用(就像我所做的那样),您只需单击“验证设置”,它就会自动删除重复的引用。比手动寻找它们要容易得多
1赞 javatarz 8/7/2013
我也有类似的问题。这个答案是最接近的。<projName>.xcodeproj/project.pbxproj 文件具有重复的条目,即使项目仅显示一次文件也是如此。这是一个合并问题。使用 vi 进行编辑成功:)谢谢你为我指明了正确的方向:)
11赞 Yeti42 8/26/2013
值得注意的是,如果您在复制捆绑资源阶段有大量重复文件,您可以单击此页面底部的“验证设置”,XCode 将提示您有关重复项的信息,如果您单击“执行更改”,XCode 将删除所有重复文件。地狱比单独寻找它们要快得多。
1赞 samkass 2/18/2014
当我将“Published-iOS”重新添加到项目中时,我在使用 SpriteBuilder 模板时遇到了类似的问题。事实证明,它希望它是一个“文件夹引用”而不是一个组,并将整个文件夹添加到“复制包资源”中。因此,即使单个资源未出现在该列表中,也要检查以确保它不是从文件夹中添加的。
5赞 Steve 5/21/2011 #7

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

如果同时将多个语言相关文件添加到项目中,就会发生这种情况。我通过查看 git 差异发现了这一点。我在提交中什么也没做,只是添加了一些新的本地化笔尖文件。但是,回顾 project.pbxproj 文件的差异,它显示了为之前项目中已有的文件添加的一堆新的重复引用。它这样做的文件对我来说也是随机的。

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

从项目中删除这些文件并不能解决问题,因为它只会删除原始引用并保留重复项。修复它的唯一方法是返回提交并重新开始,或手动编辑项目文件,这是进一步搞砸它的好方法,因为很难分辨要删除哪些重复项,而且您必须在很多不同的地方进行。

Xcode 4 对我来说只是一个巨大的失望。

评论

0赞 Steve 10/27/2011
看起来这在 XCode 4.2 中已修复。在早期版本中,您可以通过首先将要为其添加本地化的文件放入其自己的“组”(项目中的虚拟文件夹)来避免此错误。添加完本地化后,可以将其放回原处,并删除创建的临时组。
0赞 Todd Hopkinson 12/13/2011
这不是一个错误。这是因为您的项目中有多个同名文件。
1赞 Steve 12/23/2011
本地化文件时,每个本地化都应该具有相同的文件名,但目录不同。这确实是一个错误。
2赞 orlanthi 6/9/2011 #8

这个问题的另一种变体。我收到了相同的消息,以前建议的解决方案都没有解决问题(例如,我肯定只有一个违规文件的副本)。

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

(我怀疑这个问题发生在我身上是因为一本手册,即:非XCode,项目文件的合并。

8赞 Dmitry 8/22/2011 #9

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

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

评论

0赞 Lauren Yim 7/1/2021
这与我所拥有的相似。我有 2 个具有相同模块名称的独立目标。
4赞 user944031 9/23/2011 #10

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

15赞 Gunther 2/22/2012 #11

这不是一个错误。Xcode 助手可以为您提供帮助。在项目导航器中选择左侧的目标。单击设置底部的“验证设置”。Xcode 将检查设置并在可能的情况下删除重复项。

1赞 rjobidon 6/19/2012 #12

打开项目中的 Frameworks 文件夹,并确保里面只有框架。我错误地添加了整个开发人员文件夹!

6赞 Mahmoud Fayez 8/28/2012 #13

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

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

警告消失了!检查此图像以供参考。

在此处输入图像描述

1赞 Martijn Mellens 3/14/2013 #14

几分钟前我遇到了同样的问题。我已经提到更改“部署目标”解决了我的问题。

20赞 Stuart 9/25/2013 #15

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

group references

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

删除有问题的文件并选择“删除引用”(这样我们就不会完全删除它们):

remove group references


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

add as folder references


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

folder references


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

评论

0赞 ΩlostA 12/5/2020
最佳答案!它在 Xcode 12.2 上对我有用
1赞 Nate Anderson 7/10/2014 #16

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

15赞 john.k.doe 10/12/2014 #17

Headers 生成阶段存在重复项时,可能会出现这种情况的另一个版本。

要解决这个问题...

  1. 转到您的项目目标
  2. 选择Build Phases
  3. 选择生成阶段Headers
  4. 输入警告中显示的名称
  5. 请注意两个(或更多)项目
  6. 找到左下角的框+|-
  7. 选择其中一个项目,然后单击按钮-
0赞 Alessandro Ornano 10/7/2016 #18

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

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

-1赞 ScottyBlades 10/9/2018 #19

虽然我确信有更好的方法,但核弹只花了我不到 60 秒,而且是我能找到的唯一有效的方法。

  1. 将 repo 拖到废纸篓。
  2. 重新克隆存储库。
  3. 使用正确的远程跟踪设置存储库。或git remote add <url.git>git remote set-url <url.git>
0赞 Rajesh Maurya 12/21/2018 #20

一个简单的方法是,

  • 转到应用目标
  • 转到构建阶段
  • 输出文件
  • 删除输出文件的路径,然后构建项目。它将成功运行。
0赞 Renetik 6/10/2019 #21

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

0赞 Piyushh 12/31/2019 #22

React-Native 用户。 转到文件 -> 工作区设置 -> 生成系统 ->将其更改为旧版生成系统。 它现在应该构建得很好。 React-Native 还不兼容新的文件系统。

1赞 Vishwas Singh 2/7/2020 #23

评论use_frameworks!在 PodFile 中对我有用。

#use_frameworks!

注意:在 XCode 10.1 pod 版本 1.8.4 上执行此操作

0赞 benchuk 5/21/2021 #24

如果工作区中有多个引用同一库的 xcode 项目,则 worksapce 也会尝试将同一库复制到 BUILD 目录,即使您构建的目标依赖于单个框架,也可能会发生这种情况。

为了解决这个问题,我使用了: 选择您的目标并单击: -> enter image description here -> 正在构建中 - 取消选中 enter image description here 在某些情况下,我还必须取消 Parallelize BuildEdit ShemeFind implicit dependencies

0赞 ugur 6/27/2021 #25

就我而言,Build Settings 中的“产品名称”是空的。因此,输出变为 .app 名称为空,导致多个产品。设置一个产品名称,你就可以开始了。

0赞 Ramesh Sanghar 9/24/2023 #26

对我来说,这是因为我更改了项目文件夹名称。

我通过更改项目文件夹名称来解决它 Targer 应用程序>构建设置> info.plist 文件在此处更改文件夹名称。

enter image description here