error: Multiple commands produce '/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist': 1) Target 'OptimalLive' has copy command from '/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Info.plist' to '/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist' 2) Target 'OptimalLive' has copy command from '/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Server/Masonry/Info.plist' to '/Users/uesr/Library/Developer/Xcode/DerivedData/OptimalLive-fxatvygbofczeyhjsawtebkimvwx/Build/Products/Debug-iphoneos/OptimalLive.app/Info.plist' 3) Target 'OptimalLive' has process command with input '/Users/uesr/Desktop/workSpace/SEALIVE/SeaLive1.1/OptimalLive/Info.plist'

在Xcode 9中运行代码正常,但在Xcode 10中有一个错误。


当前回答

在我的情况下(我使用迦太基)的问题

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 ***)

在从嵌入式框架阶段删除重复的框架之后,一切都正常工作了。

其他回答

如果错误消息引用Core Data文件,请阅读此答案

概要:您可能同时拥有自动生成和手动生成的Core Data管理对象类文件。

如果错误的第一行引用Foo+CoreDataProperties,则此答案适用。o或Foo+CoreDataClass。o文件。例子:

错误:多个命令生成“/Users/me/Library/Developer/Xcode/DerivedData/MyApp-uebslaqdwgldkjemijpdqmizgyzc/Build/Intermediates.”noindex/ MyApp / debug -iphone模拟器/ MyApp.build/Objects-normal/x86_64/Foo+CoreDataProperties.o':

1)目标“MyApp”(项目“MyApp”)有Swift源文件的编译命令

2)目标“MyApp”(项目“MyApp”)有Swift源文件的编译命令

通过展开Build Transcript的Compile Swift Source Files部分可以看到根本原因。例如:

<unknown>:0:错误:文件名“Address+ coredataclasss .swift”使用了两次:“/Users/myUserName/Projects/Jnky/Foo+CoreDataProperties”和“/Users/jk/myUserName/Developer/Xcode/DerivedData/MyApp-uebslaqdwgldkjemijpdqmizgyzc/Build/Intermediates.noindex/MyApp.build/Debug/MyApp.build/DerivedSources/CoreDataGenerated/Jnky/Foo+CoreDataProperties.swift”

这里提到的第一个文件是项目目录中的一个源文件,它是通过在项目导航器中选择数据模型并单击菜单编辑器>创建管理对象子类生成的。这个功能是在Xcode 7中添加的。

第二个文件是一个同名文件,但它被隐藏在Xcode的DerivedData中。如果数据模型(.xcdatamodeld)文件包含在目标的编译源构建阶段,则该文件在每次构建期间由Xcode自动生成。这个功能是在Xcode 9左右添加的。零,每个实体/类生成一个或两个文件,这取决于Codegen弹出框的设置。当你在编辑数据模型时选择一个实体时,在数据模型检查器中会弹出这个窗口。

设置如下:

手动/无不生成文件 类别/扩展名一个文件,Foo+CoreDataProperties。生成。m或. Swift,包含Objective-C类别或Swift扩展名。 生成了相同的Category/Extension文件,另外还生成了一个Foo+CoreDataClass。生成M或.swift,包含类声明和定义。

So you see the problem occurs when a developer (like me) who is accustomed to the older Xcode begins a project in a newer Xcode. We think that we need to use the Create Managed Object Subclass menu item, which we do, to create the files we can see in the Project Navigator while not realizing that our settings in the Codegen popup are causing Xcode to create duplicate files, which Apple "cleverly" does not show in the Project Navigator, because they don't trust developers to read and heed the comment in the header // This file was automatically generated and should not be edited.

解决方案1 -使用旧的方式

您可以禁用数据模型的所有自动Codegen,只需一个设置:

打开问题目标的构建阶段(在项目导航器中,选择项目,然后在出现的目标列表中,选择问题目标,然后选择Build Phases)。 展开Compile Sources条目并找到问题数据模型(。xcdatamodeld文件)。 从编译列表中删除它 确保数据模型包含在Copy Bundle Resources列表中。

解决方案2 -核心数据魔术初学者

在这里,你把所有的钱都花在新方法上。

让您的数据模型保持Compile Sources中的原样。 在数据模型中的每个实体检查器中,将Codegen设置为类定义。 在项目导航器中,删除并丢弃任何Foo+CoreDataClass文件,并重命名任何Foo+CoreDataProperties。m或。swift文件到Foo+MyProperties之类的文件。 在每个Foo+MyProperties。m或.swift文件,如果有Xcode生成的属性,请删除这些属性,因为它们将在Codegen创建的隐藏文件中。

使用此解决方案,您的类定义将在每次构建时从数据模型自动生成。你甚至看不见它们。它是Core Data Magic,适合初学者使用。

解决方案3 -适用于大多数真实世界的应用程序

但是如果您真的想添加非托管属性,解决方案2就不太好。(Objective-C不允许在类别中添加属性,Swift不允许在扩展中添加存储属性。)所以在大多数现实世界的应用程序中,你可能想要介于解决方案1和2之间……

将数据模型保留在Compile Sources列表中 在数据模型中的每个实体检查器中,将Codegen设置为类别/扩展。 在Project Navigator中,删除并丢弃任何Foo+CoreDataClass。m或.swift文件,并且,为了减少将来的混乱,重命名任何Foo+CoreDataProperties。m或。swift文件可能只是Foo。M或者。swift。 确保每个Foo。M或.swift文件包含类定义,您可以向其中添加自己的非托管属性。

(感谢正电子的回答。我在这里的回答解释了为什么正电子的答案(我的解决方案1)有效,并添加了解决方案2和解决方案3。)

error: Multiple commands produce '/Users/KunshtechNew/Library/Developer/Xcode/DerivedData/chat21-fgjaqebxysmggqfdnetggdbzfqih/Build/Products/Debug-iphonesimulator/Chat21.app/Base.lproj/Chat.strings':
1) Target 'chat21' (project 'chat21') has copy command from '/Users/KunshtechNew/Downloads/chat21-ios-demo-master/TildeskWidget/Chat21Core/Base.lproj/Chat.strings' to '/Users/KunshtechNew/Library/Developer/Xcode/DerivedData/chat21-fgjaqebxysmggqfdnetggdbzfqih/Build/Products/Debug-iphonesimulator/Chat21.app/Base.lproj/Chat.strings'
2) Target 'chat21' (project 'chat21') has copy command from '/Users/KunshtechNew/Downloads/chat21-ios-sdk-master 2/Chat21Core/Base.lproj/Chat.strings' to '/Users/KunshtechNew/Library/Developer/Xcode/DerivedData/chat21-fgjaqebxysmggqfdnetggdbzfqih/Build/Products/Debug-iphonesimulator/Chat21.app/Base.lproj/Chat.strings'

有两种不同的解决方案可以摆脱这个问题:

解决方案1

正如我们所看到的,我得到了同样的错误..在我的情况下,在TildeskWidget文件夹中有一个额外的Chat21Core文件夹副本。这是在制造问题。 因此,一个可能的解决方案也可以完全读取错误,并尝试查找是否有任何额外的副本引用项目或没有。

解决方案2

当我面对不同项目的相同类型的问题时,我发现了另一个简单的解决方案。这次我得用不同的方法。

豆荚从项目中分解。 删除工作区文件和pod。锁定文件从项目文件夹。 同样是pod安装 试着建立项目。

希望这对你有用。

在我的例子中,问题来自podcast文件。我必须将我的测试项目添加到podfile:

target 'MyApp' do
    pod 'Firebase'
    target 'MyAppTests' do
        inherit! :search_paths
        pod 'Firebase'
    end
end

之后,我需要执行:

pod update

没有遗留构建系统 如果你有这样的Podfile

def shared_pods
  pod 'X'
end

target 'A' do
  shared_pods
end

target 'B' do
  shared_pods
end

B也依赖于A然后像这样把B移到A

 target 'A' do

   shared_pods

   target 'B' do
     inherit! :search_paths
   end
 end

如果您手动创建实体的CoreDataClass和CoreDataProperties,请确保转到您的xcdatamodel并将检查器选项卡中的Codegen设置为“Manual/None”。如果设置为“类定义”,Xcode会自动为你创建一个重复的类。