我有一个项目,由多个较小的项目组成。我通常通过Carthage来管理这个混乱的项目,但对于开发,我使用xcworkspace
来更容易和更快地进行更改,并使用Xcode通过工作区来构建子项目和主项目。
我最近开始更新所有项目,以使用新的XCFrameworks
(而不是Carthage/Xcode用来生成的“胖框架”)。
如果我只是在根项目(xcproject
)上工作,并直接链接XCFrameworks
,那么一切都正常。
Multiple commands produce '/Users/.../Library/Developer/Xcode/DerivedData/gnuwolzggqlzhlfiipjzbigitmvu/Build/Products/Debug-iphoneos/....framework':
1) Command: ProcessXCFramework /Users/.../Development/.../.../Carthage/Build/....xcframework /Users/.../Library/Developer/Xcode/DerivedData/gnuwolzggqlzhlfiipjzbigitmvu/Build/Products/Debug-iphoneos/....framework ios
2) Command: ProcessXCFramework /Users/shanew/Development/.../Libraries/.../Carthage/Build/....xcframework /Users/.../Library/Developer/Xcode/DerivedData/gnuwolzggqlzhlfiipjzbigitmvu/Build/Products/Debug-iphoneos/....framework ios
子项目框架没有嵌入它们的依赖项(好像我记得,这导致了其他问题),依赖项管理是通过Carthage管理的,所以根项目和子项目将共享依赖项,我认为这是问题的原因。
我有一些“小”运气,如果我先构建子项目,然后删除它的“框架、库和嵌入式内容”,我可以让根项目工作,但当我试图用多个子项目这样做时,我开始遇到问题。
我确实注意到,当我删除xcframeworks
并用项目替换它时,它会用“胖框架”图标显示项目,而不是xcframeworks
图标...我怀疑这部分问题,但我想我会提到它...
所以问题是...
我们如何将“子项目”/“框架”包含到xcworkspace
中,这些子项目/框架具有xcframeworks
依赖项(与其他项目共享),并在构建时不触发“Multiple commands produce... output”错误。
1条答案
按热度按时间yeotifhr1#
不确定这完全Map到OP场景,但这里是为我们工作的。
使用.framework的初始工作设置:
然后我们将第三方依赖ZZZ移到XCFramework,仍然通过Carthage,同样的设置不再起作用。我们的框架构建得很好,但是构建我们的应用程序失败了,因为有多个命令试图生成ZZZ。
最后,对我们起作用的是修改Application项目和它包含第三方框架ZZZ的方式。Application项目嵌入并链接了取自Framework Carthage\Build目录的 * 相同 * 二进制文件,而不是拥有自己的Carthage管理的依赖项、构建目录、构建的二进制文件等。
因此,设置如下:
*是否通过Carthage明确**依赖于第三方框架ZZZ
*没有自己的Carthage cartfile和Carthage目录
希望你说的有道理。
当一个应用程序项目不是通过Xcode目标依赖性,而是通过复制到某个地方的原始XCFramework文件依赖于我们的框架时,情况就不同了。在这种情况下,应用程序项目必须再次通过Carthage显式地依赖于第三方框架ZZZ,并从它自己的Carthage\Build目录中嵌入/链接XCFramework二进制文件。