专栏名称: 知识小集
目录
相关文章推荐
发现新西兰  ·  突发:新西兰国会“封杀”DeepSeek!微 ... ·  4 天前  
发现新西兰  ·  新西兰脑癌患者用DeepSeek给自己看病, ... ·  5 天前  
51好读  ›  专栏  ›  知识小集

Cocoapod 1.6 概览

知识小集  · 掘金  ·  · 2019-03-11 04:21

正文

阅读 10

Cocoapod 1.6 概览

CocoaPods 1.6 概览

前几天,CocoaPods 官方博客发布了一篇新博文 《CocoaPods 1.7.0 Beta!》 ,看到标题你可能会有点慌,1.6 正式版不是刚发布吗,这么快 1.7.0 就开始 Beta 版了?!

而且,根据上述博文介绍,1.7.0 的新版本特性似乎还很酷炫: 多 Swift 版本支持、生成多个 Xcodeproj、增量安装、对 Master Specs Repo 提供 CDN 支持、允许在 Windows 系统上使用 CocoaPods 等。

不过,1.7.0 仅是刚刚开始开发和测试,距离正式版的发布应该还有一段时间。就如 1.6.0 从去年的 8 月份就发布了 Beta 版,而经历大半年直到上个月才发布正式版:

  • 2018-08-16: 1.6.0.beta.1
  • 2018-10-17: 1.6.0.beta.2
  • 2019-01-25: 1.6.0.rc.1
  • 2019-01-29: 1.6.0.rc.2
  • 2019-02-07: 1.6.0
  • 2019-02-22: 1.6.1

CocoaPods 1.6.0 版本的更新主要集中在针对大型工程的 稳定性、性能和可扩展性方面 。本文将简要介绍一下 1.6.0 的几个重要更新,如:重写 Build Settings 的生成过程,使其速度更快,且更容易维护;以及增强了在同一 pod 库中集成多个 test specs 等。

其完整的更新内容可以查阅 Changelog:https://github.com/CocoaPods/CocoaPods/releases/tag/1.6.0

重写 Build Settings 的生成

在 1.6.0 中, 完全重写 了 Build Settings(位于 CocoaPods 生成的 .xcconfig 文件中)的生成过程。这次重写的主要目的是清理旧的代码,并使其在大型工程上可以更好地扩展。

我们知道,当 CocoaPods 的贡献者对 Build Settings 进行更改时,通常会导致一定程度的编译性能下降,并引发无法预料的边缘情况(edge cases)组合。这使得测试这些更改以及验证每个 Bug 修复是否正确执行变得非常困难。

所以,从用户的角度看,这次重写应该是无侵入的,对代码的编译不会造成影响。如果你在使用过程中遇到问题,可以在 GitHub 上提一个 issue,并提供复现问题的步骤和示例程序。

为了验证这次重写生成 Build Settings 的正确性,我们与 LinkedIn 的朋友密切合作,他们在一个大型项目工程中使用了 CocoaPods。通过这次重写,以及其他一些性能改进,使得 pod install 的执行时间从最初的 3 分钟减少到大约 40 秒,提升了将近 77%。

虽然这次更改对用户来说是不可见的,但它有助于随着 App 工程复杂度的增加,保证 CocoaPods 的可扩展性。

增强 Test Spec 的集成

对于 pod 库作者来说,Test Specs 是 CocoaPods 非常基础的一部分。在一个 pod 库的 podspec 配置文件中,作者可以声明不同的测试源(test sources),并通过 lint 命令来执行,进行不同的单元测试。从 1.6.0 开始,多个 test_spec 条目将不再生成单个测试 bundle target,而是分别为每个测试用例生成各自的 bundle。

举个例子,如下:

Pod::Spec.new do |s|
  # ... rest of root spec entries go here

  # Unit Test Sources - Those do not require an app host to run. 
  # They also require 'OCMock' dependency.
  s.test_spec 'Tests' do |test_spec|
    test_spec.source_files = 'Tests/**/*.{h,m}'
    test_spec.dependency 'OCMock'
  end

  # SnapShot Tests Sources - Those *do* require an app host to run.
  s.test_spec 'SnapshotTests' do |test_spec|
    test_spec.requires_app_host = true
    test_spec.source_files = 'SnapshotTests/**/*.{h,m}'
  end
复制代码

根据上面描述,运行 Tests 测试用例是不需要依赖 app 宿主工程的,而对于 SnapshotTests 则需要。但在之前的 CocoaPods 版本中,此时 Tests SnapshotTests 这两个 test specs 会被合并到同一个单元测试 bundle target 中,导致 Tests 的执行也需要在一个 app 宿主工程下,因此可能会带来不必要的影响。

如下图所示:







请到「今天看啥」查看全文