2016-11-02 48 views
2

我有一个用cocoapods(pod安装)构建的xcworkspace。我无法弄清楚xCode是如何知道当我构建MyProject时它还必须构建Pods项目?Xcode - Cocoapods如何编译pod?

假设:

在构建阶段“链接二进制与图书馆” MyProject的主要目标部分,我可以看到“Pods_MyProject.framework”,它由吊舱(项目)豆荚,MyProject的是指.framework构建目标(是否正确?)。这个目标在他的“目标依赖”中有所有的豆荚。

但我还是不明白两件事

  1. 的Xcode怎么知道,当我建立MyProject的,必须先建立豆荚,MyProject的? (有没有在MyProject的主要目标 “目标相关性” 一节)

这里是 “MyProject的” 构建阶段选项卡(其真名是 “clicktube”):

enter image description here

  1. ”Pods_MyProject.framework“如何包含所有Pod,而其”Link Binary with Libraries“部分几乎为空?

豆荚,MyProject的 “链接与库” 部分:

enter image description here

回答

0

这是一个有趣的事:

https://developer.apple.com/library/content/featuredarticles/XcodeConcepts/Concept-Workspace.html#//apple_ref/doc/uid/TP40009328-CH7-SW1

Xcode的检查在build文件目录来发现隐含的 依赖关系。例如,如果包含在工作空间 中的一个项目构建一个由同一工作空间中的另一个项目链接的库,则Xcode会在构建其他项目之前自动构建库,即使构建配置不会使该依赖关系成为 依赖项明确。如有必要,您可以用 显式构建设置覆盖此类隐式依赖关系。对于明确的依赖关系,您必须创建项目引用 。

有两种类型的依赖关系:显式和隐式。您可以在“目标依赖关系”中指定显式的。 XCode通过查看“带库的链接二进制文件”来发现隐式依赖关系,然后决定项目的构建顺序。

“Pods_MyProject.framework”如何包含所有Pod,而其 “Link Binary with Libraries”部分几乎为空?

如果您看一下Pods.xcodeproj,那么您通过podfile“安装”的每个框架都有一个目标。然后是Pods_MyProject.framework目标,它对所有这些框架都有明确的依赖关系。