ChatGPT解决这个技术问题 Extra ChatGPT

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

我收到这样的错误:

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

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


M
Mark Suman

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

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


当我从构建文件夹中删除一些资产时(使用 Finder)发生在我身上。将资产替换为使用相同名称更新的资产,并将它们拖到 XCode 中标记“添加到目标”选项。似乎 XCode 不同步复制了 Copy Bundle Resources 中的这些条目
我想为此添加一件事。如果您最终以某种方式获得大量重复引用(就像我所做的那样),您只需单击“验证设置”,它就会自动删除重复引用。比手动寻找它们要容易得多
我有一个类似的问题。这个答案是最接近的。 .xcodeproj/project.pbxproj 文件有重复的条目,即使项目只显示文件一次。这是一个合并问题。用 vi 编辑成功了 :) 感谢您指出我正确的方向 :)
值得注意的是,如果您在 Copy Bundle Resources 阶段有大量重复文件,您可以单击此页面底部的“验证设置”,XCode 会提示您有关重复项,如果您单击“将删除所有重复项”执行更改”。比单独寻找它们要快得多。
当我将“Published-iOS”重新添加到项目中时,我遇到了与 SpriteBuilder 模板类似的问题。结果它希望它成为“文件夹引用”而不是组,并将整个文件夹添加到“复制捆绑资源”中。因此,即使单个资源没有出现在该列表中,也要检查以确保它不是从文件夹中添加的。
s
slf

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


我摸索了一秒钟,所以这可能对某人有所帮助:应用程序目标->构建阶段->复制捆绑资源
我的 Xcode 项目中有多个同名的文件(但在不同的目录中)。不小心我的一个在 Copy Bundle Resources 步骤中同时拥有了它们,这将导致其中一个在生成的应用程序包中被覆盖。只需删除其中之一。
t
theduck

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

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

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

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


但是这些文件不再出现在 XCode 的组和文件窗格中。这有什么关系?
如果您仍然遇到此问题,只需从 Xcode 中删除所有文件(不要在磁盘上删除它们)。然后将它们全部拖回。如果之后仍然有问题,那么您实际上有一些具有相同名称的资源(可能在不同的文件夹中) - 查找并重命名/删除。 Xcode 输出进入一个平面文件夹,因此目录结构被忽略。
P
Peter Gluck

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

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


是的,这是正确的答案。当您拥有资源文件时,这种情况很容易出现,例如具有相同名称但在文件系统上的单独目录中的 png - 在构建过程中,它们都被复制到 1 个目录,即应用程序包。
@Brynjar 是否有解决方法来允许具有相同名称的图像?或防止图像捆绑在一起?
实际上我发现您可以创建文件夹引用以避免捆绑。
这是一种查找具有重复名称的文件的方法,无论目录find . | grep -v \.git | rev | cut -d/ -f1 | rev | sort | uniq -c | sort如何,但这并没有解决我的问题
r
respectTheCode

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


S
Stuart

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

https://i.stack.imgur.com/XUQML.png

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

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

https://i.stack.imgur.com/xafUq.png

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

https://i.stack.imgur.com/Iz0Ci.png

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

https://i.stack.imgur.com/Fmq6u.png

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


最佳答案!它适用于 Xcode 12.2
J
Johan Karlsson

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


j
john.k.doe

当 Headers 构建阶段存在重复时,可能会发生这种情况的另一个版本。

解决这个问题……

转到您的项目目标 选择 Build Phases 选择 Headers 构建阶段 输入警告通知中显示的名称 两个(或更多)项目 找到左下角的 +|- 框选择其中一项,然后单击 - 按钮


P
Paŭlo Ebermann

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

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


这与我所拥有的相似。我有 2 个具有相同模块名称的单独目标。
M
Mahmoud Fayez

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

从项目导航器中选择导致问题的文件 从文件检查器中取消选中目标成员资格 构建项目 再次重新检查文件的目标成员资格

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

https://i.stack.imgur.com/xVTbC.png


S
Steve

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

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

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

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

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


看起来这在 XCode 4.2 中已修复。在早期版本中,您可以通过首先将要为其添加本地化的文件放入它自己的“组”(项目中的虚拟文件夹)中来避免此错误。完成添加本地化后,您可以将其放回原处并删除您创建的临时组。
这不是错误。这是由于您的项目中有多个同名文件。
当您本地化一个文件时,您应该为每个本地化具有相同的文件名,但在不同的目录中除外。这确实是一个错误。
u
user944031

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


h
hilla

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


o
orlanthi

关于这个问题的另一个变体。我收到了同样的消息,以前建议的解决方案都没有解决问题(例如,我肯定只有一份有问题的文件)。

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

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


r
rjobidon

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


M
Martijn Mellens

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


T
The Red Pea

对我来说,Target > Build Settings > Packaging > Product Name 设置为与我的应用程序自定义的 .plist 文件中引用的另一个值相同的值。最终由于我们的构建过程,这会创建重复的文件。


V
Vishwas Singh

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

#use_frameworks!

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


A
Alessandro Ornano

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

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


R
Rajesh Maurya

一种简单的方法是,

转到应用目标

转到构建阶段

输出文件

删除输出文件的路径,然后构建项目。它将成功运行。


R
Renetik

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


P
Piyushh

React-Native 用户。转到文件-> 工作区设置-> 构建系统-> 将其更改为旧版构建系统。现在应该可以正常运行了。 React-Native 还不兼容新的文件系统。


b
benchuk

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

https://i.stack.imgur.com/B4fHK.png


u
ugur

就我而言,构建设置中的“产品名称”为空。因此输出变为 .app ,其名称为空,导致多个产品。设置产品名称,您就可以开始了。


S
ScottyBlades

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

将 repo 拖到垃圾箱。重新克隆你的回购。使用正确的远程跟踪设置您的存储库。 git remote add 或 git remote set-url