Xcode 10 错误:产生多个命令
Posted
技术标签:
【中文标题】Xcode 10 错误:产生多个命令【英文标题】:Xcode 10 Error: Multiple commands produce 【发布时间】:2018-11-15 23:58:20 【问题描述】:错误:多个命令产生“/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist”: 1) 目标“OptimalLive”具有从“/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Info.plist”到“/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx”的复制命令/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist' 2) 目标“OptimalLive”具有从“/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Server/Masonry/Info.plist”到“/Users/uesr/Library/Developer/Xcode/DerivedData”的复制命令/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist' 3) 目标“OptimalLive”具有输入“/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Info.plist”的流程命令
在Xcode9中运行代码可以,但是在Xcode10中出现错误。
【问题讨论】:
cocoapods管理的依赖,参考***.com/a/52421345/334999 当您将第三方框架导入到您的项目并且它的源文件中有 info.plist 时发生。此 info.plist 与您的应用程序冲突。只需将其从构建阶段中删除 亲爱的读者,阅读这个问题的每一个答案,有很多不同的地方可能是错误的。 转到路径“构建阶段->复制捆绑资源”。检查文件名并将其删除。清理并运行应用程序 【参考方案1】:在检查构建日志时,我注意到一个警告:
note: Using new build system
note: Planning build
note: Constructing build description
Build system information
warning: The Copy Bundle Resources build phase contains this target's Info.plist file '/Users/<redacted>/Repositories/Whitesmith/optimize-ios/Carthage/Checkouts/WSStatusBarNotification/Miscellaneous/Info.plist'. (in target 'JDStatusBarNotification')
所以,如果这是你的情况,那就去你的目标吧:
-
构建阶段
复制捆绑资源
删除
info.plist
。
【讨论】:
复制包资源中不存在 info.plist 文件,仍然出现相同的错误 从复制包资源构建阶段删除过多的 Info.plist 为我解决了这个问题。但是,我的警告是不同的,因为不小心将一个不同目标但在同一个项目中的 Info.plist 添加到了 Copy Bundle Resources 构建阶段。警告是:“警告:任务重复输出文件'... MyApp.app/Info.plist':ProcessInfoPlistFile”。并导致与原始问题相同的错误:“错误:多个命令产生'... MyApp.app/Info.plist'”。 在我的情况下它是“许可证”文件 - 一旦我删除它,问题就解决了,所以我猜这个问题比“plist”更普遍,只是似乎只是一个更经常遇到【参考方案2】:此问题可能是由于 App 中存在多个 Plist 或其他文件-
解决方案 -> 打开目标 -> 构建阶段 > 复制捆绑资源 并从那里删除 info.plist
。
注意:如果您也开发了手表应用程序,那么您也必须从手表和手表扩展中删除 plist。
【讨论】:
您可能还需要查看任何依赖项,即 CocoaPods 以查找错误添加的 info.plist 文件 详细说明一下:出现这个错误是因为 Xcode 10 的新构建系统更善于捕捉项目配置问题。此类问题有时会导致您的构建出现细微问题,因此最好修复它们。 在我的例子中,我的一个私有 CocoaPods 依赖项中有一个info.plist
文件,因为它与 podspec 的 source_files
属性匹配,所以该文件被收集起来。我的模块中不需要info.plist
文件,所以我将其删除。
谢谢!前段时间我在我的代码中添加了一些开发人员插件,它还有一个与我的应用程序的 info.plist 冲突的 info.plist 文件
谢谢@Alok :) 我没有删除文件,而是用唯一的名称重命名了它们,并且我的代码运行良好。【参考方案3】:
此答案已弃用 - XCode 12 已弃用 旧版构建系统,它将在后续版本中删除
也试试这个。 Xcode->文件->项目设置->构建系统->旧版构建系统。
【讨论】:
在这种情况下,Xcode 会标记项目中的问题,因此恢复到旧版构建系统只会暂时隐藏它。 Xcode 报告这类问题是故意的,最好解决问题。 如果错误出现在 CocoaPods 生成的项目中,那么我将禁用新的构建系统,直到新的 CocoaPods 版本解决了问题。 @RickBallard 是有道理的,现在,这可能是正确的解决方法?似乎有各种各样的答案 这种错误有多种原因,但您可以在help.apple.com/xcode/mac/10.0/#/dev14a2fd0c0了解更多关于它的含义 Legacy Build System 现已正式弃用,从 Xcode 12 开始:“旧版构建系统已弃用,将在未来的版本中删除。(62742902)”(developer.apple.com/documentation/xcode-release-notes/…)【参考方案4】:我对 plist 也有同样的问题。 结果我有两份副本,一份是空的,一份在我的本地化资源文件夹中。 删除其中一个(空的)解决了这个问题。
如果您检查错误,则第 1) 行和第 2) 行具有不同的路径。您可能在复制阶段将此文件定义了两次。
检查您的目标属性、构建阶段、复制捆绑资源,并查找重复的 info.plist。找出哪个路径不正确并将其删除。 (您可能还想从文件系统中删除它。)
【讨论】:
【参考方案5】:当我在两个不同的目标中有一个同名的文件时,我遇到了这个问题。出于某种原因,其中一个文件我拥有两个目标的一部分。所以基本上我有两个文件。并且这两个文件都属于一个目标。
一个目标每个目标只能有一个文件名是有道理的,因此只需取消选中与主目标无关的文件的目标成员框即可解决问题。
【讨论】:
【参考方案6】:我收到了一堆 Multiple commands produce
警告 - 不仅限于一个目标中的 info.plist 重复。包括本地化资源和字符串文件、头文件等。
解决方案:删除目标成员中的所有重复项。
【讨论】:
我遇到了这个错误,因为我有一个带有自己的 infoplist.strings 文件的监视目标,该文件被复制到与主应用程序的 infoplist.strings 文件相同的目录中。它们在建造时都会在同一个地方结束。【参考方案7】:有类似的问题,但 .swiftdoc 文件。
我在项目中有扩展和单元测试目标。并且它们具有与应用程序相同的“产品模块名称”(构建设置中的 PRODUCT_MODULE_NAME)。使名称唯一问题消失后。
【讨论】:
【参考方案8】:我遇到了同样的问题,我在主应用程序中有一个辅助应用程序并将其复制到资源中。在我的情况下解决为:-
1) 目标 -> 2) 构建阶段 2) 复制文件(n 项) 3) 删除复制文件。
在 Xcode 10.0 中自动复制的 Helper 应用。
【讨论】:
复制文件+复制捆绑资源删除有帮助。 这对我有用,只需稍作修改 - 在我的情况下,复制文件步骤中有多个文件,不知何故,相同的文件名被多次/两次复制到包中 - 导致错误:删除单行需要您突出显示错误中抱怨的行/过滤名称,并通过减号删除一行(始终在底行),而不是删除整个复制文件步骤。【参考方案9】:在我的例子中,我从另一个项目导入了文件,并且在两个位置有相同的类。
我收到以下相关错误消息:
当我复制错误时,原来是复制了很多更多的文本信息,当我阅读转储时,我来到了相关行:
:0: 错误:文件名“EventNode.swift”使用了两次:
紧随其后的是位置,让我能够消除问题。
在此过程中,我发现了“复制捆绑资源”中需要包含的内容:
Main.storyboard Assets.xcassets 您的项目使用的任何 SpriteKit 场景 (.sks)【讨论】:
【参考方案10】:此答案已弃用 - Xcode 12 已弃用 旧版构建系统,它将在后续版本中删除
我找到了此构建错误的解决方案,对于其他与 Xcode 10 构建系统有相同问题的人,请按照以下步骤进行修复:
在 Xcode 中,转到文件->项目/工作区设置。 将构建系统更改为旧版构建系统。
它将解决新 Xcode 10 的构建问题。
如果你想使用新的构建系统,那么你可以找到故障排除帮助from this apple Xcode help page。
【讨论】:
您能解释一下为什么会出现这个问题,以及选择 Legacy Build System 是如何解决这个问题的吗? @Akshay Sunderwani 你没有解决问题,你只是在隐藏它们。 修复了 react-native 项目的构建错误。请参阅此处的问题:github.com/facebook/react-native/issues/20492 如果您不想切换到旧版构建系统,则有一个可能的修复方法:github.com/facebook/react-native/issues/… 这不是一个长期的解决方案。最终,旧版构建系统将不再是一种选择。 好吧,我会 100% 隐藏问题而不是修复它,因为这些解决方案都不起作用。似乎是 Cocoapods 的一个已知问题;见github.com/CocoaPods/CocoaPods/issues/7949。我希望当这种解决方法不再可用时,它会以某种方式自行修复。【参考方案11】:我遇到了同样的问题,但头文件。
在这种情况下,解决方案是将标题从“公共”部分移动到“项目”部分。
【讨论】:
【参考方案12】:迁移到 Xcode 10,出现类似
的错误error: Multiple commands produce '/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist':
可以如下解决:
转到Xcode->File->Workspace/Project Settings-> Build System -> Legacy Build System
。
【讨论】:
在这种情况下,Xcode 会标记项目中的问题,因此恢复到旧版构建系统只会暂时隐藏它。 Xcode 报告这类问题是故意的,最好能解决问题。欲了解更多信息,请参阅help.apple.com/xcode/mac/10.0/#/dev14a2fd0c0。 这个是为我做的,你先生是个天才【参考方案13】:在开始之前,请注意我的项目使用 Carthage 作为依赖项管理器。
这里的现有答案都没有解决我的问题。为我解决了这个问题的是以下内容。
首先,我注意到构建错误特别指出了一个框架。接下来,我为该框架过滤了 App Target > Build Phases。我注意到该框架存在于“Link Binary With Libraries”和“Embed Frameworks”中。注意到“嵌入框架”下列出的框架都不是由 Carthage 管理的框架,我从“嵌入框架”中删除了有问题的框架。然后我重新构建了我的项目,一切正常,包括相关框架启用的功能。
【讨论】:
我使用了 PODS。从嵌入框架中删除所有内容都有效。我清理并重建没有错误。遗留解决方案也有效,但不能解决手头的问题(对于阅读本文的任何人)。我使用的是 xcode 10.2,cocoapods-1.6.1。 我正在使用 Carthage,这为我解决了问题! 我也用过 CocoaPods。框架作为开发吊舱连接。 “嵌入框架”是空的,仍然有这个问题【参考方案14】:如果您从创建多个同名实例(不是'copy files' build phase
)的Ditto
命令中获取此信息,则可能需要更改Product Module Name
。
-
点击 Xcode 抱怨的目标
点击
Build Settings
搜索Product Module Name
将名称更改为独特的名称
我们的应用中有一个监视目标和一些通知目标,所以我只是在模块名称的末尾加上Extension
之类的东西。
我最初在这里找到了这个解决方案:https://forums.developer.apple.com/thread/103913
【讨论】:
它工作得有点好,但它与桥接文件中断了。 就我而言,我必须在搜索Product Module Name
的右侧选择 All
以显示构建配置。
我在 Xcode 10 中遇到了同样的问题。同一个项目在 Xcode 9.4.1 中运行良好。所以解决方案非常简单。只需从目标中删除所有 info.plist 文件。请对所有 info.plist 文件执行此操作。第1步。选择 info.plist 文件。 2.在文件检查器中取消选中目标成员中的项目。然后运行你的项目。谢谢!
对我来说,我必须转到 [Project_Name] > Build Phases > Copy Bundle Resources 并删除那里的重复项
@Bharath 不要从您的项目中删除 info.plist 文件。正如我提到的,您只需要从 Target 中删除。我们无法删除 info.plist,它对项目非常重要。【参考方案15】:
试试这个它的工作原理:
在 Xcode 中,转到文件->项目/工作区设置。
将构建系统更改为 Legacy Build 系统。
【讨论】:
在这种情况下,Xcode 会标记项目中的问题,因此恢复到旧版构建系统只会暂时隐藏它。 Xcode 报告这类问题是故意的,最好能解决问题。欲了解更多信息,请参阅help.apple.com/xcode/mac/10.0/#/dev14a2fd0c0。【参考方案16】:对我来说,问题与捆绑资源中包含两次相同的文件有关。不知道这是怎么发生的,但我删除了其中一个,它在新的构建系统中编译得很好。
【讨论】:
【参考方案17】:尝试所有这个选项,这 3 个选项中的任何一个都对你有用,当然
Option 1: Remove all files from
目标>>构建阶段>>编译源
目标 >> 构建阶段 >> 复制捆绑资源
Option 2: Change the build system
Xcode->文件->项目设置->构建系统->旧版构建系统
Option 3: remove and update existing pod
pod 缓存清理 PromisesObjC pod cache clean PromisesSwift cd [your_project_dir] rm -rf Pods/ rm Podfile.lock 豆荚更新
I hope this will help you, Happy coding :-)
【讨论】:
-1。不,它“肯定”不起作用。删除编译源和复制捆绑资源有什么意义?!如果不编译代码和资源,项目将无法运行。【参考方案18】:搜索和删除由多个命令生成的重复文件。
在这里,应该删除一个额外的Info.plist
文件(在我的例子中是Contents.json
)
error: Multiple commands produce '/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist'
【讨论】:
烦人。我知道它是同一个文件的两倍,所以我从不关心它被一个接一个地复制。【参考方案19】:转到 Xcode -> 文件 -> 工作区设置。 你会发现一个像这样的弹出窗口。
从 Build System 标记中选择“Legacy Build System”。 按“完成”
注意:-确保使用“cmd+shift+alt+k”和“Derived Data”清除您的项目
构建你的项目,它将发挥魅力:)
【讨论】:
据我了解,我们现有的项目是用旧的 swift 和 xcode 制作的,它们支持旧版本的 swift 和 xcode。所以早些时候我们做了什么,我们继续“Bundle Settings->Swift legacy Build System”并选择了早期版本。 我最初在“Swift Legacy Build System”上使用它,但在重新启动计算机后它已被切换。即使您认为您的设置正确,仍然值得仔细检查。 这个解决方案没有解决问题,它只是隐藏它。 还要确保将 Per-User 工作区设置更改为相同 ;) Legacy Build System 现已正式弃用,从 Xcode 12 开始:“旧版构建系统已弃用,将在未来的版本中删除。(62742902)”(developer.apple.com/documentation/xcode-release-notes/…)【参考方案20】:对于由 cocoapods 管理的依赖项目,通过提供本地 podspec 以从源中排除 info.plist 来解决问题。以godzippa为例
播客文件
pod 'Godzippa', :podspec => "venders/godzippa.podspec"
供应商/godzippa.podspec
s.source_files = 'Sources/*.h,m'
【讨论】:
【参考方案21】:在我的例子中,一个 Info.plist 文件是从我的一个 Cocoapods 中提取的。删除它并解决了问题。
【讨论】:
【参考方案22】:我的ProjectName.xcodeproj
对同名文件的引用有效和无效。项目导航器中的文件名相同,一个文件名是红色的,另一个是好的。我去掉了无效的引用之一(红色的),问题解决了。
【讨论】:
【参考方案23】:在我的例子中,我对两个不同的静态库有相同的自定义 Public Header 文件夹路径。一个用于主应用程序,另一个用于手表应用程序。更改了手表应用的路径,现在一切正常。
【讨论】:
【参考方案24】:这里提出的解决方案都不适合我。这尤其归功于 CocoaPods。我以前使用的是 Cocoapods 1.3.1。简单地升级到 1.5.3 并不能立即解决问题。
我遵循的步骤是:
-
删除 Podfile.lock
删除 Pod 目录
删除派生数据并清理
退出 Xcode
将 CocoaPods 更新到 1.5.3
运行
pod install
打开工作区并构建
【讨论】:
将 CocoaPods 更新到 1.5.3 (sudo gem install cocoapods) 并运行 (pod install) 足以让它为我工作。谢谢! 我做了一些上面推荐的,但这是唯一为我解决的问题。谢谢 这个也为我解决了。我认为它比传统的构建解决方案更好,因为它实际上解决了这个问题。 这对我有用,但我还必须在我的 podfile 顶部添加install! 'cocoapods', :disable_input_output_paths => true
。此外,如果您不想更新您的 pod,请不要删除 podfile.lock,所有 pod 都将安装为当前版本。
这是一个很好的修复很多东西的通用过程。很好的答案。【参考方案25】:
如果您使用 CocoaPods,您可能需要尝试解构 pod 并重新安装。它对我有用。
pod deintegrate
pod install
【讨论】:
是的,我的问题是由 pod 包引起的,只有这样才能解决问题!谢谢 是的!这发生在我玩 Pods 并稍后通过 XCode 添加应用程序图标之后。希望这会有所帮助【参考方案26】:在我的情况下(我正在使用 Carthage)
error: Multiple commands produce
1) Target *** has copy command from
2) That command depends on command in Target ***: script phase “Run Carthage Script”
是由于在构建阶段配置中将框架导入到嵌入式框架和运行迦太基脚本阶段
这两个阶段将框架复制到派生数据,因此 Xcode 会看到重复的文件并打印这些错误并发出警告:
ignoring duplicated output file: (in target ***)
从嵌入式框架阶段删除重复的框架后,一切正常。
【讨论】:
【参考方案27】:这是另一个可行的解决方案:(如果您使用的是自定义 Pod)
从侧边栏中选择“Pods”作为屏幕截图中的亮点。 单击构建阶段。展开“标题”部分。有 3 个选项 Public、Private、Project 展开公共并检查是否有重复文件。去掉它。 完成!!【讨论】:
这个答案也应该被视为一个解决方案,以防(自定义)吊舱导致问题! 您也可以从这里删除任何 *.plist 文件。它似乎适用于自定义 pod。【参考方案28】:就我而言,我已经多次复制了我的 GoogleService-info.plist
文件,因为它包含在我的主应用程序和共享扩展项目中。
解决方案是将此文件从扩展项目中排除(通过在其 File Inspector 侧窗口视图中从 Target 中取消选中它);因为我不喜欢切换到旧版构建系统的选项(这也对我有用)。
【讨论】:
【参考方案29】:我有同一个文件的多个副本。简单地说,保留一份并删除所有剩余的。清理构建,并对问题进行排序。
【讨论】:
【参考方案30】:这基本上意味着您有多个名为Info.plist
的文件;
通常没问题,但不小心将您的文件设置为相同的目标成员。所以解决方法是:单击每个文件并检查右侧的目标成员,确保它们不重叠。
【讨论】:
以上是关于Xcode 10 错误:产生多个命令的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 10 构建错误 - 多个命令产生 info.plist
Xcode 10 iOS firebase firestore SDK -- 多个命令在 Firebase 中产生 gRPCCertificates.bundle 错误
Xcode 12 - Flutter 应用程序 iOS 构建错误 - 产生了多个命令 / throwToolExit (package:flutter_tools/src/base/common.da