内容简介:前几天,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 版本中,此时 Tests
和 SnapshotTests
这两个 test specs 会被合并到同一个单元测试 bundle target 中,导致 Tests
的执行也需要在一个 app 宿主工程下,因此可能会带来不必要的影响。
如下图所示:
这意味着,同一 pod 库所有的 test specs 都会被合并到同一个测试 bundle target 中,pod 库的作者无法分离它们并以不同的方式进行分类,例如,分别在不同的 test specs 中配置不同的依赖项、资源或编译器选项。
在 1.6.0 版本中,将生成如下内容:
现在看起来好多了,每个 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。