CocoaPods 1.6 概览

栏目: IOS · 发布时间: 6年前

内容简介:前几天,CocoaPods 官方博客发布了一篇新博文而且,根据上述博文介绍,1.7.0 的新版本特性似乎还很酷炫:不过,1.7.0 仅是刚刚开始开发和测试,距离正式版的发布应该还有一段时间。就如 1.6.0 从去年的 8 月份就发布了 Beta 版,而经历大半年直到上个月才发布正式版:

前几天,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

重写 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 版本中,此时 TestsSnapshotTests 这两个 test specs 会被合并到同一个单元测试 bundle target 中,导致 Tests 的执行也需要在一个 app 宿主工程下,因此可能会带来不必要的影响。

如下图所示:

CocoaPods 1.6 概览

这意味着,同一 pod 库所有的 test specs 都会被合并到同一个测试 bundle target 中,pod 库的作者无法分离它们并以不同的方式进行分类,例如,分别在不同的 test specs 中配置不同的依赖项、资源或编译器选项。

在 1.6.0 版本中,将生成如下内容:

CocoaPods 1.6 概览

现在看起来好多了,每个 test spec 都会单独创建一个对应的 bundle target,互不影响。

此外,最近 CocoaPods 还发布了一个 cocoapods-generate 插件,让开发者创建 pod 库的流程得到很大的改善和简化。

更长的测试周期

由于 CocoaPods 是由世界各地的开发者在业余空闲时间一起维护和改进的,所以接下来我们将不再对 CocoaPods 每个版本的发布日期做出承若。

1.6.0 版本将会经历很长的测试周期,并在稳定版发布之前一直保持 beta 名称(译者注:正如开头所说的,大概花了大半年时间才发布了 1.6.0 的正式版)。

目前 1.7.0 版本已经开始测试了,欢迎使用,你可以通过以下方式安装 beta 版,并在 GitHub 上提交 issue 反馈问题:

gem install cocoapods --pre

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Building Social Web Applications

Building Social Web Applications

Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99

Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器