没有Fastlane的iOS连续交付的五个选项

原始文章发表在XCBlog上

Fastlane工具可自动执行整个iOS CI / CD管道,并允许我们将iOS基础结构保留为代码。 Fastlane提供了一系列工具,可自动执行从分析,构建,测试,代码签名和存档iOS应用程序的几乎所有操作。 但是,如果您向里看,它不过是本机Apple开发人员工具之上的Ruby层。 在某些情况下,Fastlane可能节省了一些时间,但是值得一提的是,Fastlane因频繁的重大更改而浪费了多少开发人员时间。 不断学习Ruby和Fastlane的自动化方法浪费了很多开发人员的时间。 像CocoaPods一样,Fastlane可能是您的iOS项目中使用Ruby的另一个大笨蛋,它与iOS开发无关。 学习某些本地Apple开发人员工具并从iOS开发工具箱中完全删除Ruby和其他第三方工具(如Fastlane)并不难。 在这篇文章中,我们将介绍iOS开发人员在使用Fastlane时面临的问题,以及Fastlane的当前替代方案。

五个快速通道问题

Fastlane声称通过自动执行常见任务为开发人员节省了时间。 在Fastlane能够按预期工作的情况下可能确实如此,但考虑到Fastlane在设置,调试和管理方面浪费了多少开发人员时间,这一点也很重要。 在本节中,我们将看到iOS开发人员使用Fastlane可能面临的常见问题。

1.红宝石

在iOS项目中使用Fastlane的第一个主要问题是Ruby。 通常,iOS开发人员并不擅长Ruby,但是要使用Fastlane或CocoaPods之类的工具,他们必须学习与实际的iOS开发无关的Ruby。 设置Fastlane工具需要对Ruby以及RubyGems和Bundler的工作方式有很好的了解。 最近宣布有Swift版本的Fastlane摆脱了Ruby,但它只是Swift在后台执行Ruby命令。 我怀疑Swift版本的Fastlane的可用性。 我已经在这篇文章中写了我的初步印象。 Fastlane拥有良好的文档,但是iOS开发人员仍然必须使用Ruby编写脚本来自动化iOS发布管道的所有基础架构。

2.频繁更新

Apple不断更改本机工具,从而不断破坏Fastlane工具。 他们需要始终追赶苹果和谷歌(如果是Android的话),以适应Fastlane中的这些变化。 这要求Fastlane开发人员实现这些功能并发布新版本的Fastlane。 如果Fastlane版本不是由Bundler管理,则大多数时候更新Fastlane版本都需要更新现有的Fastlane脚本。 由于更新的缘故,可能会经常导致内部版本崩溃,iOS开发人员需要花费时间来分析Fastlane中已更改的内容并相应地修复内部版本。 这种突破性的更新打扰了iOS开发人员的主要开发流程,最终浪费了数小时来修复构建。 使用Fastlane的痛苦之一是,在早期版本的Fastlane中配置的选项并不总是与较新的版本一起使用,如果您搜索解决方案,则最终将获得针对不同版本Fastlane的相同问题的多个解决方案。

3.耗时的设置和维护

尽管Fastlane提供了很好的模板代码入门指南,但是编写脚本来自动化iOS发布管道所需的所有内容并不是一件容易的事。 我们可能需要根据需要自定义选项,这要求这些选项在Fastlanes中的编码方式。 然后,我们可以使用不同的通道来编写管道脚本。 要设置所有内容,需要大量时间来学习Fastlane和Ruby工具箱。 当您设置所需的所有内容时,该工作并未完成,如上所述,它需要对Fastlane更新进行持续的持续维护。

4.难以贡献

可能需要根据公司特定的规则配置iOS发布管道,或者需要Fastlane进行自定义操作。 唯一的选择就是为Fastlane编写插件。 当前,编写插件的唯一方法是编写可以作为Fastlane插件安装的Rubygem。 同样,它需要对Ruby生态系统的深入了解,而通常iOS开发人员都不熟练。 不幸的是,iOS开发人员无法为他们当前在工具箱中使用的工具做出贡献。 最重要的是,为Fastlane做出贡献的过程既耗时又充满自动化机器人。 首先创建一个Github问题作为提案,然后进行无休止的讨论。 您可以在此处阅读有关Fastlane贡献指南的更多信息。

5. Github上的未解决问题

GitHub上存在多个问题,其中一些问题是由自动bot封闭的,没有为用户提供正确的解决方案。 很好的例子是,我如何浪费几天来确定Fastlane匹配支持企业应用程序是否使用Xcode 9构建发行版。在寻找解决方案时,我发现还有其他人也在寻找解决方案。 这是Fastlane bot在未提供适当解决方案的情况下解决的未解决问题的示例。 我已经尝试过针对11090、10543、10325、10458等问题提供的多种解决方案。阅读所有这些内容之后,我无法弄清楚哪种方法适用于企业构建。 一些用户说它在您使用即席设置时有效,而其他用户则说是Ad-hoc或AdHoc或企业版。 您可以想象通过存档应用程序来测试每种导出方法需要多少时间。 我看到CircleCI用户也对Fastlane Match的代码签名问题感到沮丧。

这是Fastlane在您的iOS项目中创建的问题的一小部分,但是您可能遇到了从未讲过的不同故事和不同问题。

五个Fastlane替代品

现在,我们已经看到了在iOS项目中使用Fastlane的一些问题。 问题是我们能否从iOS项目中完全删除Fastlane。 答案是肯定的。 但是,您需要花一些时间来了解iOS的构建过程以及很少的本地Apple命令行开发人员工具。 我要说的是,与学习第三方框架相比,值得花时间学习本机Apple开发人员工具。 您将永远不会后悔学习本机Apple命令行开发人员工具。 但是,如果您没有时间学习这些内容,那么还有其他一些免费和付费的服务可以满足您Fastlane的需要。 目前,我们有以下免费和付费的Fastlane替代产品

Fastlane的5大替代方案

  • 本机Apple Developer工具(免费)
  • Xcode服务器(免费)
  • 基于云的CI服务(付费)
  • 苹果+ BuddyBuild(上帝知道)
  • 基于Swift的替代品(免费但尚未准备好)

1.本机Apple开发人员工具

根据构建和部署过程的要求,没有什么比学习本地Apple开发人员工具和编写自定义脚本更好的了。 苹果提供了命令行开发人员工具,可以完成几乎所有我们想要的事情。 请记住,Fastlane和类似工具也使用内部的Apple开发人员工具。 使用Apple开发人员工具的最大好处是,除了Apple之外,任何人都无法破坏它,并且在大多数情况下它们都向后兼容。 Apple已记录了这些工具,并且大多数工具都有手册页,可查看这些工具提供的所有选项。 为了编写iOS构建管道的脚本,我们需要了解以下主要工具

  • xcodebuild —分析,构建,测试和存档iOS应用。 这是所有命令之父,因此学习此工具很重要。
  • altool:将.ipa上传到iTunes Connect
  • agvtool:管理版本和内部版本号
  • codesign:管理iOS应用程序的代码签名
  • 安全性:管理证书,钥匙串和配置文件

有一些补充实用程序,例如simctl,PlistBuddy,xcode-select等,有时需要它们来处理模拟器,Plist文件和Xcode版本等。熟悉这些工具后,您会对在自己的iOS部署管道上编写脚本充满信心拥有并能够解决任何问题。 在大多数情况下,很少有几行代码可以将您的iOS应用程序登陆到iTunes Connect。 我在这里写了一篇关于从命令行部署iOS应用的文章,但是我们还需要知道代码签名位才能理解整个流程。 在iOS构建过程中学习和应用Apple开发人员工具需要花费一些时间,但是这一次就花完了,您无需了解任何第三方框架(如Fastlane)。

2. Xcode服务器

Xcode Server是Apple提供的持续集成服务。 在Xcode 9发行版中,Apple通过许多新功能大大增强了Xcode Server的功能,这些新功能几乎可以自动实现所有功能。 Xcode Server与Xcode紧密结合,使iOS开发人员可以体验。 借助Xcode Server,我们无需编写任何代码或脚本即可分析,测试,构建和存档iOS应用。 如果您使用Xcode Server进行iOS持续集成,则可能不需要任何工具来自动化构建过程。 您可以在此处阅读有关Xcode Server功能的更多信息。 但是,我们需要执行一个手动步骤才能将二进制文件上传到iTunes Connects或其他平台。当前,Xcode Server无法将二进制文件上传到iTunes Connect,但是可以使用altool作为Xcode Server的后集成脚本轻松实现机器人。

如果您无法内部管理Mac Mini服务器,则可以从Mac Stadium等服务中租用一些Mac Mini来继续使用Xcode Server实例。

3.基于云的CI服务

有各种基于云的CI服务,例如BuddyBuild,Bitrise,CircleCI,Nevercode,它们提供持续集成以及持续交付服务。 BuddyBuild最近已被Apple收购,我们将在下届会议中进行介绍。 这些基于云的CI服务可处理所有iOS构建过程,包括测试,代码签名以及将应用程序部署到特定服务或iTunes连接。 我们还可以编写自己的自定义脚本来满足特定需求。 这些服务完全不需要iOS项目中的Fastlane或任何类型的脚本。 但是,这些服务不是免费的,并且可以控制您的项目。 如果您没有技能脚本的CI / CD基础结构,那么这将是个不错的选择。 我已经在个人项目中对所有这些基于云的CI服务进行了重要的改进,并在这里写下了结论。 希望在为您的iOS项目选择合适的服务时,您会发现这些比较有用。

4.苹果+ BuddyBuild

苹果在今年年初收购了BuddyBuild,这意味着Apple和BuddyBuild可能正在合作为iOS开发人员提供无痛的持续集成和交付服务。 我们很高兴看到Apple和BuddyBuild将共同构建并在WWDC 2018上展示。我们可能很少期望苹果将Xcode Server保留为自托管解决方案(免费),并将BuddyBuild集成到Xcode中作为Cloud-基于基础的解决方案(付费或免费),或者Apple可能会完全杀死Xcode Server,仅将BuddyBuild保留为免费或付费的服务。 但是,在所有情况下,除非需要,否则都不需要显式编写基础结构脚本。 这也将完全消除对Fastlane之类工具的需求。 我们当前唯一能做的就是等到WWDC 2018。

5.快捷选项(未就绪)

Fastlane最近增加了对使用Swift而不是Ruby配置通道的支持。 但是,当前,实现无法使用,因为它只是Swift在后台执行Ruby命令。 它在项目中添加了许多无关的Swift文件,理想情况下,这些文件应作为Swift软件包(SDK)提供,可以通过CocoaPods,Carthage或Swift软件包管理器进行分发。 我在这里写了Fastlane Swift的第一印象。 另一个解决方案是Autobahn,它纯粹是Swift实现的Fastlane,但在开发中还为时过早,直到开发完成后才能使用。 不幸的是,我们不得不等待这些基于快速的解决方案,它们尚未准备好在当前的iOS项目中使用。 但是,我们希望早晚会有可行的解决方案,使iOS开发人员可以在Swift中编写配置代码。 在我看来,Swift不是脚本语言,但是可以根据需要用作脚本。

选择正确选项的提示

现在,我们已经看到了无需使用Fastlane工具即可设置持续交付的所有选项。 下一步是确定为您的iOS项目设置哪些选项。 这取决于团队中工程师的技能和经验。

  • 如果团队中有没有任何CI / CD知识的iOS工程师,那么处理所有问题的基于云的CI解决方案是值得的。
  • 如果团队中只有少数具有CI / CD经验的iOS工程师,那么值得尝试一下Xcode Server,因为它很容易配置和使用。
  • 如果团队中有经验丰富的iOS开发人员,并且对本地工具有丰富的知识,那么值得编写脚本来构建管道
  • 最好等到WWDC 2018,看看Apple和BuddyBuild将在舞台上呈现什么。

结论

通过使用本地Apple开发人员工具,我们可以为iOS项目编写整个CI / CD管道的脚本,从而无需在iOS项目中使用第三方工具(如Fastlane),但是学习本地Apple需要花费时间和精力。开发者工具。 使用Xcode Server或基于云的CI解决方案的其他选项可以消除脚本发布管道的需求。

像XCBlog的 XCTEQ 发布的帖子一样 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 Github 搜索我们的 服务 ,开源项目, 或者在 Twitter Facebook Youtube LinkedIn 上关注我们 下载我们的 XCBlog iOS应用程序以离线阅读博客。

X CTEQ 一家专门从事基于Mobile DevOps,CI / CD,Mobile,AI / ML的测试自动化Checkout XCTEQ产品和服务的公司, 网址 http://www.xcteq.co.uk 或写信给我们info@xcteq.co。英国..