CocoaPods 1.5.0 — Swift 静态库

CocoaPods 1.5.0 提供了构建 Swift pod 作为静态库的原生支持。

在 CocoaPods 1.4.0 发布仅几个月后,我们发布了一个新版本,专注于让每个人都能采用 Swift。

Swift 静态库

在 Xcode 9 之前,根本不支持将 Swift 构建成静态库,并且必须使用动态框架。这对一些开发者来说是一个交易破坏者,特别是那些担心链接许多动态二进制文件会对启动性能产生影响的开发者。

借助 CocoaPods 1.5.0,开发者不再受限于在他们的 Podfile 中指定 use_frameworks! 以安装使用 Swift 的 pod。与 Objective-C 的互操作应该正常工作。但是,如果你的 Swift pod 依赖于 Objective-C pod,则需要为该 Objective-C pod 启用“模块化标头”(见下文)。

模块化标头

多年前 CocoaPods 首次推出时,它专注于尽可能多地将现有库打包为 pod。这意味着做出一些权衡,其中之一与 CocoaPods 设置标头搜索路径的方式有关。CocoaPods 允许任何 pod 使用未命名空间的引用导入来导入任何其他 pod。

例如,pod B 可以具有包含 #import "A.h" 语句的代码,而 CocoaPods 将创建允许此类导入成功的构建设置。但是,如果你尝试向这些 pod 添加模块映射,此类导入将不起作用。多年前,我们尝试自动生成静态库的模块映射,但这破坏了一些 pod,因此我们不得不还原。

在此版本中,你将能够选择更严格的标头搜索路径(以及 Objective-C pod 的模块映射生成)。作为 pod 作者,你可以将 'DEFINES_MODULE' => 'YES' 添加到你的 pod_target_xcconfig 中。或者,你可以在 Podfile 中添加 use_modular_headers! 以为所有 pod 启用更严格的搜索路径和模块映射生成,或者你可以将 :modular_headers => true 添加到单个 pod 声明中以仅为该 pod 启用。

跟踪安装源

此更改在幕后发生,并开辟了一些激动人心的可能性。CocoaPods 现在将存储 Pod 来源的规范存储库

SPEC REPOS:
  https://github.com/CocoaPods/Specs.git:
    - Alamofire
    - Moya
  https://github.com/Private/Internal.git:
    - InteralPod

这将使 CocoaPods 能够在 pod 的源代码更改时通知您,还将在 Podfile.lock 中强制执行明显的 git diff,确保您在 Pod 来自不同源代码时了解情况。例如,这使得审计您的私有分支正在被使用(而不是公共规范)成为可能。我们认为这是一个有用的安全增强功能,特别是对于那些有安全工程师监督的团队。

进一步改进

  • CocoaPods 将不再为每个生成的 xcconfig 添加所有头文件搜索路径,而只添加 pod 依赖项的头文件搜索路径
  • 静态框架允许混合 Objective-C 和 Swift
  • 在 pod 验证期间,现在在使用 --verbose 时会流式传输来自 xcodebuild 的任何输出
  • pod install 性能得到提升,既适用于具有许多子规范的 pod,也适用于指定精确文件路径(而不是 glob)的 pod
  • CocoaPods 使用的脚本阶段现在将断言已设置所有预期的构建设置(和环境变量)
  • 将静态库 pod 集成到静态库目标中不会导致运行复制脚本阶段

摘要

CocoaPods 1.5.0 是一个令人兴奋的版本。我们非常高兴您能试用它,并建议您升级

$ gem install cocoapods

在经历了所有这些激动之后,这里有一些内容可以激发您对下一个 CocoaPods 版本的兴趣。对于 1.6.0,我们专注于重新设计库的核心部分,以提高 CocoaPods 对超大型应用程序的性能。因此,如果您觉得 pod install 花费的时间比您希望的要长,请继续关注 😉

一如既往,我们要感谢所有贡献者,让 CocoaPods 1.5.0 成为现实!

查看 变更日志 以获取完整更改列表。