一份Podfile同时处理多个本地Project
根据CocoaPods官网给出的编写指南,我们可以使用一个Podfile文件来管理不同的Project
1 | platform :ios, '8.0' |
在这种情况下 SharedLib.xcodeproj 所在的目录不会存在任何和Pods相关的文件,但是Prject本身被Pod执行了 4-6 步骤 ,此时打开 Playground.xcworkspace 可以得到正确的引用关系,但是会带来一些其它的问题
Project单独无法编译通过
由于 Podfile 执行完毕,其对 SharedLib.xcodeproj 产生了更改,会导致其单独打开编译无法通过,报错信息
1 | ld: library not found for -lPods-SharedLib.a |
可以看到原因是由于 -lPods-SharedLib.a 被Pods加入 Link Libraries
但是其存在于 Playground.xcworkspace 下 Pod.xcodeproj 的 Product目录中,单独打开 SharedLib.xcodeproj 在可视范围内找不到该库,导致无法进行正确的Link
Pods之间不共存
假设存在另外一个工程 Playsecond.xcodeproj 也想通过同样的方法引用 SharedLib.xcodeproj , 即使让SharedLib.xcodeproj 存在两个Target用于不同的引用
Target | Podfile | PODS_ROOT | 被Pods添加的虚拟库 |
---|---|---|---|
SharedLibA.a | Playground/Podfile | SharedLib/../Playground/Pods | lPods-SharedLibA.a |
SharedLibB.a | Playsecond/Podfile | SharedLib/../Playsecond/Pods | lPods-SharedLibB.a |
即使在这种情况下,也会出现Pods不共存的情况,现象为
- 在 Playground 下执行 pod update , Playground.xcworkspace 里编译通过
- 在 Playsecond 下执行 pod update , Playsecond.xcworkspace 里编译通过
- 回到 Playground 下,Playground.xcworkspace 编译不通过, 提示如下错误
- 进行步骤1 之后,会发现 Playsecond.xcworkspace 编译不通过,提示相同错误
1 | The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. |
提示pod和 Podfile.lock 原因猜测 是因为每次Pod完成后会做一次Hash,如果当前工程的Hash值和Podfile.lock对不上,就会要求Update Pods的文件结构
由于 Playground.xcworkspace 和 Playsecond.xcodeproj 都会对 SharedLib.xcodeproj 进行更改,导致Hash值产生变化,所以会导致需要重新Update