Xcode有时会自动查找依赖项。当我是那个定义关系的人,当我变得懒惰时,我认为是可以的......
但是,我经常发现自己面临着一个存在(大中型)项目的目标。由于该项目是由其他人制作的,我发现很难理解哪些目标取决于什么,因为并非所有关系都是明确的。
Xcode用来查找这种关系的规则是什么?(我希望我能理解逻辑,所以在我脑海里运行它可能会节省我一些时间未来)或什么使目标有资格隐含地依赖另一个?
目标及其创建的产品可能与另一个目标相关。如果目标需要另一个目标的输出以便构建,则说第一个目标依赖于第二个目标。如果两个目标都位于同一工作空间中,Xcode可以发现依赖关系,在这种情况下,它会按所需顺序构建产品。这种关系被称为隐式依赖。
答案 0 :(得分:8)
这个答案适用于Xcode 8.x,我认为是Xcode 9.0。
首先,您需要确保在您尝试构建的Scheme的Build面板中启用了“Find Implicit Dependencies”。
目标“A”可以两种方式“隐式地”依赖于目标“B”:
那么为什么有人想做“2”的恐怖?我可以提出几个原因。
如果您认为这些都是人为的情况,那么我目前正在努力将一些遗留代码从一系列显式依赖项转移到隐式依赖项。为什么我要转向隐式依赖?因为Xcode中的显式依赖需要项目嵌套,一旦你获得了足够的显式依赖,项目浏览器变得非常慢,你会在Xcode中看到很多沙滩球随机的东西。
如果您碰巧在同一工作区内有两个目标生成具有相同名称的产品并依赖于第三个目标,会发生什么?隐式依赖将选择一个。它似乎根据产品的基本名称进行匹配(所以foo / bar.a和baz / bar.a是相同的),并将选择它找到的第一个。
答案 1 :(得分:0)
Xcode Dependency
[About]是构建选定目标所必需的依赖项。
Xcode支持Implicit
和Explicit
[About]依赖性。
Implicit
依赖性
Non-compiled dependencies
。 Xcode允许添加整个workspace
中的依赖项。一个很好的例子是来自GitHub或CocoaPods
[About]的源代码Precompiled dependencies
又名External
-例如外部二进制文件(库-框架的.a
-.framework
)或CocoaPods
,且代码为[About]或Carthage
Implicit dependency
是成功构建目标所必需的依赖性,但未明确定义。
Build Phases -> Target Dependencies
中没有依赖项General -> Embedded Binaries
和Linked Frameworks and Libraries
[Link vs Embed]中指定
要启用此功能[No such module]
Edit Scheme -> Build -> Find Implicit Dependencies