使用Fastlane的iOS连续部署🚀

如果您想在iOS应用程序中添加持续部署(CD),并且很难做到,那么您来对地方了。

我们缺少一篇文章,描述了使用Fastlane安全地执行CD的完整过程,以及一个使用连续集成(CI)服务(在本例中为Travis CI)的工作示例。 考虑到这一点,本指南将为您提供整个过程的分步指南。

现在,我们已经在公司部署了多个应用程序,我们发现手动将应用程序交付到App Store的过程是一个非常重复,令人沮丧且耗时的过程。 使用Fastlane,我们从几个小时的测试和部署缩短到了几分钟。

这是两部分系列的第二篇文章,其中包括:

  1. 自动化测试(引入Fastlane)
  2. 持续部署到TestFlight和App Store

Notes是一个iOS应用程序,允许用户添加,删除和更改注释。 该项目用于说明如何使用Fastlane和Travis CI进行连续部署。

整个项目可在GitHub上找到,供您随意咨询和使用。

  • 创建一个没有2FA的新Apple ID。 避免使用您自己的帐户,该帐户对您来说更安全,并且更容易将项目交付给客户或其他人。 Fastlane支持2FA,但是在管理会话令牌时会遇到问题( 不过应该进行测试! );
  • 将帐户添加到Apple Developer和iTunesConnect中的项目开发团队。 这对于自动创建必要的证书和配置文件,以及将应用程序上载到TestFlight或App Store是必不可少的;
  • 空的 GitHub 私有存储库,用于存储项目中使用的加密证书和配置文件。 不要使用此存储库或将其更改为其他任何内容,脚本将自行管理存储库文件。

您将有多个可用命令,所有命令都在一个文件下,这将使您能够:

  • 测试您的应用程序,最后进行漂亮的打印;
  • 从计算机上手动部署应用程序,并通过从TestFlight获取当前版本来增加构建版本;
  • 通过CI服务自动部署您的应用程序。

我们需要设置Xcode项目,以便与Fastlane和Travis CI脚本和谐地交互。

在撰写本文时,并且在尝试将Xcode与选择的自动管理签名一起使用之后,我们得出结论,正确实施持续部署的唯一可行方法是进行手动证书管理。

这些步骤是:

  1. 创建证书;
  2. 配置对新证书的Xcode签名;
  3. (可选)注册更多设备。

您将需要需求 🎒部分中提到的Apple帐户和GitHub存储库。 只需使用init命令并按照显示的步骤操作(系统将提示您存储库URL)。

 快速通道匹配初始化 

脚本结束时,您将在fastlane文件夹中创建一个Matchfile。 打开它,并将app_identifierusername更改为您的应用程序捆绑包标识符和所创建帐户的Apple ID。

现在,我们需要运行命令以将证书创建为所需的配置文件类型。 由于我们将要正确配置Xcode项目,因此我们将创建development和应用appstore类型。

运行开发脚本,将提示输入密码来加密和解密证书,并保存它,因为稍后我们将需要它。

 快速通道比赛开发 

继续执行appstore脚本:

  Fastlane Match应用程式商店 

将创建所需的每个证书,请记住,如果需要添加更多检查步骤,它将为开发者帐户证书管理器中列出的所有设备创建证书。 3.注册设备 先。

运行上述脚本后,每个证书都将安装在您的计算机中。 这样,您可以打开.xcworkspace.xcodeproj并相应地配置目标签名。

A.2.1。 禁用自动管理签名

请记住,将特定的配置文件与配置相关联,例如使用默认Xcode配置的示例:

  • 匹配调试开发
  • 匹配AppStore以发布

如您所见,我们禁用了“ 自动管理签名” ,并将匹配创建的配置文件设置为其各自的配置。

注意:将测试目标(在上图中:NotesTests和NotesUITests)保持在自动管理签名设置为ON的状态。

A.2.2。 启用Apple通用版本控制系统

仅当您希望Fastlane管理应用程序的版本控制时,它才需要使用Apple Generic系统才能知道它应该如何自动增加构建版本。

为此,您可以根据最适合的情况配置项目(如以下示例)或目标:

此步骤不是强制性的,但如果要在多个设备上进行测试,则需要注册它们并创建适当的配置文件,以便能够在这些设备上运行应用程序。

为了注册设备,您将需要一个名称和一个UUID 。 如果设备连接到计算机,则可以使用仪器列出所有已连接的设备,并使用以下命令查找这两个参数:

 仪器-s设备 

检索设备的名称和UUID之后,您可以做两件事:

  1. 使用工具register_device通过命令行注册单个设备
  fastlane运行register_device名称:“ iPhone 8”被禁止:“ d629fef002af1 ...” 

2.使用Fastlane工具register_devices注册多个设备 。 不幸的是,在撰写本文时尚无命令行支持,因此我无法提供示例,如果发生更改,请告诉我。

注意:您将需要重复步骤1。 使用“ 强制 匹配” 进行 证书管理,以使用新设备更新“ 开发”配置文件。

 快线比赛发展-力 

AppStore配给 配置文件不是特定于您已注册的设备列表,因此不需要 更新它们


配置Xcode之后,我们将需要编写Fastlane脚本来执行手动和自动部署。

注意:如果您没有任何内部版本上传到Testflight或App Store,则需要执行手动部署,然后才能自动执行该过程。

我们需要更新位于fastlane文件夹中的app_identifier ,以包含app_identifierapple_id这两个是必需的。

仅当您的Apple ID在Apple Developers Portal和iTunesConnect上集成到多个团队中时,才需要itc_team_id和team_id。

注意:如果您的Apple ID在多个团队中,请删除设置并运行B.1。 手动部署 脚本中,从脚本日志中提取iTunesConnect ID和团队ID(系统将提示您选择一个团队),然后在Appfile中进行Appfile

Appfile(GitHub)

现在,我们需要创建负责手动部署的Fastlane通道,我们将其称为manual_testflight ,检查以下Fastfile

Fastfile — manual_testflight (GitHub)

该脚本将获取所有必要的证书,通过检查上传到iTunesConnect的最新版本来增加版本号,创建一个.ipa文件并将其上传到TestFlight。

在运行脚本之前,我们需要设置一些环境变量:Apple ID密码和我说过的在步骤A.1中稍后需要的密码 使用Match进行证书管理

 导出FASTLANE_PASSWORD =“ YOUR_APPLE_ID_PASSWORD” 
导出MATCH_PASSWORD =“ YOUR_CERTIFICATES_PASSPHRASE”

如果这是您上载的第一个版本,则可能会提示您输入版本,只需按Enter键,它将正确获取初始版本(1.0)。

注意:如果您不执行步骤A.1。 使用Match进行证书管理 您的计算机上将没有必要的证书来执行手动部署。

现在我们只需要运行manual_testflight通道:

  fastlane manual_testflight 

对于自动部署,我们需要对手动通道进行一些更改,并创建通道travis_testflight ,您可以在下面的Fastfile中检入:

Fastfile — travis_testflight (GitHub)

该脚本将执行与手册相同的操作,但会考虑额外的安全措施。 它将创建一个锁定的钥匙串并将证书保存在那里,并且在脚本末尾,它将删除所有下载的证书以及钥匙串。

注意:请勿在个人计算机上运行此通道,它会弄乱您的钥匙串,并且您最终可能会丢失钥匙串数据。 仅在CI计算机上使用它。


如您在B.2节中所见 自动部署 脚本包含环境变量。 我们将需要将它们加密为Travis CI脚本和其他一些变量。

对于此步骤,您将需要五个环境变量,其中一些与以前相同:

  • MATCH_PASSWORD =证书密码短语;
  • MATCH_KEYCHAIN_NAME =钥匙串名称(选择);
  • MATCH_KEYCHAIN_PASSWORD =钥匙串密码(选择);
  • FASTLANE_PASSWORD =苹果帐户密码;
  • CI_USER_TOKEN =具有repo权限的GitHub个人访问令牌,您可以在此处获取(必须使用证书访问私有存储库)。

获得所有这些文件后,您需要将它们加密到.travis.yml文件中,只需将以下五个命令一个接一个地插入即可:

  travis加密'MATCH_PASSWORD = YOUR_CERTIFICATES_PASSPHRASE'-添加env.globaltravis加密'MATCH_KEYCHAIN_NAME = KEYCHAIN_NAME'-添加env.globaltravis加密'MATCH_KEYCHAIN_PASSWORD = KEYCHAIN_PASSWORD'-添加env.globaltravis加密'FASTLANE_PASSWORD = ID_YOUR_APP。 'CI_USER_TOKEN = YOUR_PERSONAL_ACCESS_TOKEN'-添加env.global 

这会将环境变量直接添加到您的travis脚本中。 现在,我们只需要添加一条命令即可在before_install期间提供GitHub对Travis机器的访问权限,并在script阶段执行Fastlane通道,您可以检查以下最终脚本:

.travis.yml(GitHub)

如果您厌倦了在iTunesConnect上收到“ Missing Compliance警告的信息,可以将密钥添加到Info.plist文件中,该文件会自动符合导出策略。

将密钥ITSAppUsesNonExemptEncryption布尔值设置为NO ,请记住,仅当它适用于您的项目时才应使用它(更多信息在此处)。


希望本指南能帮助您和您的团队节省一些部署时间,并记得不断检查Fastlane的改进和更新。 将会有越来越多的工具可以加速这种持久的部署过程!

非常感谢您的阅读,如果您喜欢本文,请确保单击that按钮。 对我们来说意义重大! 同样不要忘了在 Codium Twitter LinkedIn 关注 Coletiv 因为我们不断发布有关多种技术的越来越有趣的文章。

如果您不知道,Coletiv是来自Porto的软件开发工作室,专门从事Elixir,iOS和Android应用程序开发。 但是我们做各种各样的事情。 我们会为您精心设计UX / UI设计,Web开发,甚至是安全性。

那么, 让我们一起做点什么?