C37c2c75019d063e1aaf052f7f928658
[译] iOS Continuous Delivery 除了 Fastlane 我们还有另外五种选择

原文:Five Options for iOS Continuous Delivery without Fastlane
Fastlane 在社区内的接受程度已经很高了。然而自动化的工具除了 fastlane 还有什么选择大部分人不知道也未曾关注过。这是我选择翻译这篇文章的原因:可能最后你还是不会用上其他工具,但是知道还有其他的方式你才能知道那种是最适合你的。

Fastlane 工具链可以自动化整 iOS 中 CI/CD 的整个流程,可以自动化代码分析、编译、测试、代码签名、打包 app。并且可以使用脚本管理。但是如果你深入研究,你会发现 fastlane 只是用 Ruby 把原生的苹果开发者工具封装了一层。使用 fastlane 确实可能节省了一些时间,但是破坏性的版本更新(breaking changes)也浪费了很多开发者的时间。很多开发者花了很多时间学习 Ruby 和怎么使用 fastlane。和 CocoaPods 类似,fastlane 是 iOS 上另外一个使用 Ruby 的工具,然而和 iOS 开发没有半毛钱关系。我们完全可以学习使用原生的苹果开发者工具,使 iOS 项目不依赖 Ruby 和 Fastlane 这种第三方工具。这篇文章接下来会介绍使用 fastlane 带来的问题和替代 fastlane 的方案。

Fastlane 的五个问题

Fastlane 说它可以通过自动化常见任务来节省开发者时间,如果 fastlane 一切正常确实是这样。但是冷静的想想我们又浪费了多少时间在设置、调试和管理 fastlane 上?在这个小节里我会指出开发者使用 fastlane 常遇到的问题。

1.Ruby

使用 fastlane 第一个遭遇的问题就是 Ruby。大部分的 iOS 开发者都不了解 Ruby,然而为了能够熟练使用 fastlane 或者 cocoapods 就必须去学习 Ruby,然而 Ruby 对于 iOS 开发没任何卵用。配置 fastlane 需要你理解 Ruby 、RubyGems 和 Bundler 是怎么工作的。最近 fastlane 发布了 swift 版本,然而也只是用 swift 包了一层 Ruby 命令。我很怀疑 fastlane swift 版本的实用性。我在《First Impressions of Fastlane Swift for iOS》里写了我对它的第一印象。Fastlane 虽然有完善的文档,然而 iOS 开发者还是需要使用 Ruby 写脚本来完成自动化的 pipeline。

2.频繁的破坏性更新

苹果经常会修改原生的工具,这也会导致 fastlane 的工具无法正常使用。Fastlane 需要跟着苹果的步伐去适配这些更改。这要求 fastlane 的开发者实现新接口,发布新版本。如果 fastlane 版本不是由 Bundler 管理,更新 fastlane 版本后经常也需要更新现有的 fastlane 脚本。这样一来 iOS 的开发者就需要花时间去分析 fastlane 的更新文档,修改编译时出现的错误。这种意外的破坏性更新经常会打乱开发节奏,要花费几个小时来解决这样的问题。Fastlane 的一个痛点就是老版本的配置经常和新版本不兼容,如果你去搜索解决方案,还会搜到几个不同版本的解决方案。

3.花时间配置和维护脚本

虽然 fastlane 有完善的上手教程和模板代码,但是还是不足以让我们写出自动化流程的所有脚本代码。很多时候我们需要进行一些自定义的配置。需要花不少时间学习 fastlane 和 ruby 才能把我们需要的一切都配置好。但是配置好还有其他事情要做:fastlane 版本更新要保证这些脚本依然可以工作。

4.难以贡献代码

每个公司都会有自定义的规则或者发布流程,会利用 fastlane 做一些自定义的工作。唯一的选择就是为 fastlane 写插件。当前写插件的唯一方式就是写一个可以被安装成插件的 RubyGem。再一次,这需要你理解 Ruby 的生态系统(大部分 iOS 开发者都不了解)。因此大部分的 iOS 开发者都不具备参与插件开发能力,无法为 fastlane 贡献代码。即便你有能力开发,fastlane 的提交过程也很浪费时间。需要先在 github 上开一个 issue 作为提议,接着就是无休止的讨论。感兴趣可以看下 fastlane contributing guide

5.Github 上大量未解决的 Issue


Github 上有非常多未解决的 issue,还有很多 issue 并没有被解决而是因为超时被机器人自动关闭。比如我遇到的一个情况,我浪费了很多天去解决 fastlane match 如何在 Xcode 9 上配置企业版的证书。在搜索过程中我发现很多人也遇到这个问题。然而这个 issue 被机器人自动关闭了没有提供解决方案。我试验了多个网友在 issue 11090,10543,10325, 10458 中提到的解决方法。相信你也明白尝试多个不确定的方案会浪费很多时间。我看到了 CircleCI 的用户也因为代码签名的问题被 fastlane match 搞的很崩溃。
这只是我举出的其中一个例子,你也可能碰到其他的问题而有类似的遭遇。

另外五种选择

上面我们了解了 fastlane 中的一些问题。现在的问题是:我们可以使用其他方案完全的替代 fastlane 吗?答案是 YES。不过这要求你花点时间去理解 iOS 编译步骤和少数原生苹果开发者工具命令。我认为花时间学习原生的开发者工具比学习第三方框架的使用更有意义。你一定不会后悔学习了苹果的开发者命令行工具。当然如果你没有时间去学习开发者工具,还有一些免费和收费的服务可以选择。
目前常见的有 5 个选择:

  • 原生苹果开发者工具(免费)
  • Xcode Server(免费)
  • 基于云的 CI 服务(收费)
top Created with Sketch.