Target Dependencies
正如上文所说,Target Dependencies是在Project内决定编译该Target之前需要先编译哪些其它的Target
Project Multiple Target
常见的操作是在一个Project项目包含多个Target时,可以仅仅编译一个Target就产生多个最新的Product文件,例如需求:
- Project内有3个Target Playground.app(主程序) BaseModule.a(基础模块) NetModule.a(网络模块)
- 其中两个模块在Playground更新时上传到公共服务器
1 | Project |
其中可以将 BaseModule.a 和 NetModule.a 加入 Playground.app的 Target Dependencies,那么此时为了不用手动去编译这两个模块
Run Playground.app | Build BaseModule.a | Build NetModule.a | Build Playground.app | sh script upload BaseModule.a & NetModule.a |
---|---|---|---|---|
触发Build BaseModule和 NetModule | 编译 | 编译 | 完成Playground编译 | 执行上传脚本 |
此时可以保证 Playground.app 编译时自动编译两个模块,并且可以通过脚本完成自动上传
为StaticLib准备Bundle
还有一种常见的操作就是通过Target为Static准备Bundle,因为静态库本身无法携带资源,所以需要一个Bundle Target来携带图片等资源
那么在代码的编写过程中,图片资源更新都需要重新编译Bundle,可以使用Target Dependencies 以保证资源为最新版
- 新建一个Bundle Target,根据需要修改SDK的类型
- 添加图片
- 对Bundle Target同一个 xcodeproj 下的Static Lib Target添加Target Dependences
- 在 Target.app 的Project中拖入 Bundle的Project,注意是Project套Project,不是同一个Workspace即可
- 拖动Product内的 Bundle 以相对路径进入Target.app 的Build Phase——Copy Bundle Resources
- 检查该 Target.app 的 Copy Bundle Resources中路径是否是 build/Debug-iphoneos/
步骤3
步骤4-5
通过以上设定,就可以在产生以下步骤
Run Target.app | Build StaticLib.a | Build Bundle | Build Target.app | Target.app Copy Bundle Resources |
---|---|---|---|---|
触发Build StaticLib.a | 触发其Target Dependencies | 重新编译Bundle | 完成Target编译 | 从Build路径Copy,此时已经为最新的 |