Multiple Pod Projects
在历史版本中,CocoaPods 总是生成一个 Pods.xcodeproj,它包含了编译项目所需的所有 targets 和 build settings。对于这种仅使用一个工程来集成整个 Podfile,一般比较适用于较小的项目。但是,随着项目的增长,Pods.xcodeproj 文件的大小也会随之增加。
Pods.xcodeproj 文件越大,Xcode 用于解析其内容的时间越长,这会降低 Xcode 的使用体验。我们注意到,通过将每个 pod 库集成为其自己单独的 Xcode project,并嵌套在顶级 Pods.xcodeproj 下,可以显著提高大型 CocoaPods 项目的性能,而不是把所有的 targets 都放到同一个 Xcode project 中。
此外,在大型代码库中,这项功能特别有用,因为开发人员可以选择仅打开他们需要处理的特定 .xcodeproj(位于 Pods/ 目录下),而不是打开整个工作空间(workspace),那样可能会减慢其开发过程。
无论是因为性能问题,还是你仅是喜欢使用多个 Xcode projects 来设置 workspace,CocoaPods 现在支持使用 generate_multiple_pod_projects 安装选项来进行此设置。
你可以在 Podfile 文件中开启此功能,如下所示:
generate_multiple_pod_projects 选项
之前 Cocoapods 会把每个依赖作为 target 放到 Pods 项目里,但 xcodeproj 本身的编码不太能适应这种情况,在引入几十个 pod 的情况下,项目解析的效率会急剧下降。
Cocoapods 这次更新引入了一个 generate_multiple_pod_projects 的选项,可以让每个依赖都作为一个单独的项目引入,大大增加了解析速度:
默认情况下,此选项是关闭的,但我们建议您尝试开启使用它,并向我们报告您遇到的任何问题。我们期望在将来对 CocoaPods 进行主要版本更新时,这将成为生成 workspace 时的默认选项。
开启的方式很简单,只要在 Podfile 里加入这一行就可以了:
install! 'cocoapods', generate_multiple_pod_projects: true
下面我们看一下它长什么样:
Without multi-xcodeproj (default):
With multi-xcodeproj:
警告:如果你项目中的 pods 依赖于使用引号语法来导入头文件,则将工程切换为使用多个 .xcodeproj 可能会导致一些编译错误。例如 #import "PDDebugger.h" 将不再适用于依赖 PonyDebugger 的 pod 库,而应该改为:#import <PonyDebugger/PDDebugger.h>,以正确导入依赖的 framework 及其相关头文件。
install! 函数只能调用一次
需要注意 install! 是个用来配置的函数,由于之前我还开启了另一个选项,所以接入时是这么做的:
install! 'cocoapods', generate_multiple_pod_projects: true
install! 'cocoapods', disable_input_output_paths: true
但是这么做之后发现不生效,后来才想起来 install! 是一个用来配置的函数,重复调用的话,只会以最后一次的调用为准。所以应该在一次调用里把它们都传入进去:
install! 'cocoapods',
disable_input_output_paths: true,
generate_multiple_pod_projects: true
Podfile 里的代码如何 debug
查了 Xcodeproj 和 Cocoapods 的文档之后我都没有得到很好的解答,所以我就想用 xcodeproj 本身的接口去处理这件事情。
由于 Podfile 本质上是 Ruby 脚本,所以这里我通常会使用 Ruby 的 debugger 去操作,通过 Ruby 强大的自省能力,在 debugger 里进行尝试然后找到我们需要的接口,开始之前我们需要安装一个 Ruby 的工具,步骤如下:
- 1.首先是安装 debugger gem install pry
- 2.接着在 Podfile 的开头导入 require 'pry'
- 3.然后在我们想要插入断点的地方插入 binding.pry 语句就可以了
查找能用的接口
我在 post_install 里插入了断点,接着运行 pod install,就看到断点生效了: