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

时间:2010-04-27 01:52:01

标签: xcode build warnings

我收到这样的错误:

  

[警告]警告:输出文件的多个构建命令/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 Mailing Lists中的this post所说,没有重复项。

25 个答案:

答案 0 :(得分:798)

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

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

答案 1 :(得分:124)

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

答案 2 :(得分:105)

实际上答案很简单。

在xcode中搜索引发警告的文件,然后将其删除。

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

现在进行构建,您将看到警告被删除。 (这个答案适用于以前版本的xcode)

答案 3 :(得分:52)

这不是Xcode错误,但警告信息对于描述真正原因没有帮助。

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

答案 4 :(得分:25)

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

答案 5 :(得分:17)

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

group references

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

删除有问题的文件并选择“删除参考”(因此我们不会完全删除它们):

remove group references


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

add as folder references


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

folder references


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

答案 6 :(得分:15)

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

答案 7 :(得分:14)

标题构建阶段中存在重复项时,可能会出现此情况的另一个版本。

解决这个问题......

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

答案 8 :(得分:7)

在我的情况下,问题是由组内目标和文件夹的相同名称引起的。

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

答案 9 :(得分:6)

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

  1. 从项目导航器中选择导致问题的文件
  2. 从文件检查器中取消选中目标成员资格
  3. 构建项目
  4. 再次重新检查文件的目标成员身份
  5. 警告消失了!请查看此图片以供参考。

    enter image description here

答案 10 :(得分:5)

我很确定这可能是由XCode 4错误造成的,至少在我遇到它的情况下。

如果您同时向项目添加多个语言相关文件,则会发生这种情况。通过查看git差异我发现了这一点。我在提交中没有做任何事情,但添加了一些新的本地化nib文件。但回顾一下project.pbxproj文件的不同之处,它显示了为之前已经在项目中的文件添加了一堆新的重复引用。它做的这些文件对我来说似乎也是随机的。

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

从项目中删除这些文件并不能解决问题,因为它只会删除原始引用并留下重复项。修复它的唯一方法是返回提交并重新开始,或者手动编辑项目文件,这是一个非常好的方法,因为很难分辨哪些重复删除而你必须这样做在很多不同的地方。

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

答案 11 :(得分:4)

这是因为您的“no.png”“d.png”和“n.png”在资源中重复。只需查找删除重复文件并删除。

答案 12 :(得分:3)

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

答案 13 :(得分:2)

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

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

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

答案 14 :(得分:1)

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

答案 15 :(得分:1)

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

Swift 3 :(但也包括旧版本)当我有重复资产时会发生这种情况。只需使用此问题重命名文件,一切顺利。

当您创建Assets.xcassets并且您已使用新名称重命名重复项时也可能发生这种情况,因此在您忘记它之后删除它以添加文件夹引用但这一次返回到重复文件问题。

答案 18 :(得分:0)

对我有用的东西

  1. 将存储库拖到垃圾箱。
  2. 重新克隆您的存储库。
  3. 使用正确的远程跟踪设置您的存储库。 git remote add <url.git>git remote set-url <url.git>

这绝对对我有用。对于我来说,出于某种难以理解的原因,当我为本地依赖项运行git pull upstream develop时,git会从多个提交中提取/生成重复文件。

按照上述步骤操作后,问题消失了,git pull upstream develop不再一次退出多个提交。也许我的仓库有一个奇怪的git缓存。

答案 19 :(得分:0)

关键是要制作pod deintegraterm *.workspace文件!真是浪费时间!

答案 20 :(得分:0)

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

答案 21 :(得分:0)

评论use_frameworks!在PodFile中为我工作。

#use_frameworks!

注意:这是在XCode 10.1,pod版本1.8.4上完成的

答案 22 :(得分:0)

如果您有多个 xcode 项目引用了工作区中的同一个库,即使您构建了一个依赖于单个框架的目标,工作空间也会尝试将同一个库复制到 BUILD 目录中.

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

答案 23 :(得分:0)

在我的情况下,构建设置中的“产品名称”为空。所以输出变成了空名称的 .app 导致多个产品。设置产品名称,一切顺利。

答案 24 :(得分:-1)

一种简单的方法是

  • 转到应用目标
  • 进入构建阶段
  • 输出文件
  • 删除输出文件的路径,然后构建项目。它将成功运行。