使用Fastlane和Travis CI建立发行自动化

曾经有种感觉,就像您花费大量的办公时间来构建测试仪一样。 您正在构建版本,而不是对它们报告的错误进行修复。 好吧,如果您这样做了,那么您很幸运。 我们将讨论如何使用iOS开发人员可以使用的两个最简单的工具解决该问题。

  1. 快车道
  2. 特拉维斯CI

在将Swift集成到项目中(用Objective-C编写)之前,我们的构建时间非常短。 但是随着我们开始越来越多地在Swift中编写代码,这种情况发生了变化。 创建存档只需要3到5分钟的时间,而花费了15到20分钟的时间。 我们尝试了Apple建议的所有优化技术,但令我们沮丧的是,仅几分钟就对我们有所帮助。 如果您要花一些时间来上传构建版本,则很容易花费我们30-40分钟。 因此很显然,我们必须解决此问题,因为它会占用开发人员的时间及其生产力。

所以我们开始吧

如果您想直接跳到本教程,请向下滚动。 对于好奇的人,这里有一些关于我为什么选择Fastlane和Travis的见解。

快车道:

  1. 该工具使您可以非常轻松地自动化构建过程。 您的所有进程都位于这些很小的“通道”中,这些通道是可读的,因此,即使是新手,也可以通过查看代码确切地知道发生了什么。 而且,fastlane提供的输出非常有见地并且易于阅读。
  2. 管理代码签名:O !!!
  3. Fastlane提供与Fabric,HockeyApp,Testflight等第三方应用程序的完美集成。我们使用Fabric从测试人员下载构建的位置上传构建。 由于我想避免使用Fabric编写集成代码,因此Fastlane对我来说是一个显而易见的选择。
  4. 它拥有一个了不起的开发人员社区,您可以找到最常见问题的解决方案。

特拉维斯CI:

我不得不使用CI工具来分发我的构建,因此我选择在Jenkins和Travis之间进行一次小型调查。 以下是Travis与Jenkins相比的一些优势:

  1. Travis集成了GitHUB Web挂钩! 它还为您提供了一些漂亮的功能,例如在拉取请求中显示构建状态,队列管理,仅在最新提交时运行作业等。 您在Jenkins上确实有GitHUB插件,但是这一次您需要花费时间来集成它。
  2. 特拉维斯不需要任何设置。 我只需要创建一个帐户就可以了。
  3. Travis是基于云的解决方案,因此您无需像Jenkins那样依赖于系统。

无论如何,足够了……。 让我们继续前进!!!


该工具将使我们的生成生成过程自动化。 我们将使用fastlane的两个工具:

  1. 匹配—管理不同分发方案的证书和配置文件
  2. 健身房—创建iPA

在系统上安装fastlane

brew cask install fastlane

转到您的项目文件夹并运行

fastlane init

这将在项目目录中创建一个名为fastlane的文件夹,其中包含要在其中写入“ 泳道”的fastfile

通道遵循非常简单的结构:

 车道:build do 
选项
scheme =“ SchemeName”
如果选项[:方案]
方案=选项[:方案]
结束
配置=选项[:配置]
export_method =选项[:export_method]
健身房(方案:方案,配置:配置,export_method:export_method,output_name:“ Name.ipa”)
结束

与上面的类似。

对于默认的生成生成配置,您还可以有一个单独的Gymfile和Matchfile,但是出于我们的目的,我们使通道足够通用以完成工作。

使用match也非常简单。 您可以使用match做两件事:

  1. 为构建选项创建配置文件和证书。
  2. 下载这些供应配置文件和证书,然后使用下载的配置文件和证书对构建进行签名。

您可以使用match nuke删除所有现有的配置文件和证书,这是fastlane建议的,<-这是我所做的。

要么

您可以使用match创建一个新的。 Match创建新的配置文件或修复现有的配置文件,并将其提交到私有GitHUB存储库。

因此,首先,在GitHUB上创建一个私人仓库,您将在其中存储您的个人资料和证书。

然后跑

fastlane match init

这将创建一个匹配文件,您可以在其中指定

  1. 先前创建的仓库的URL。
  2. 匹配的github用户的用户名将用于下载证书和配置文件。
  3. 应用中所有目标的捆绑包标识符,格式如下
  [“捆绑包标识符1”,“捆绑包标识符2”,...] 

fastlane match adhoc

这将生成一个临时的配置文件和证书,您需要对它们进行签名。 您可以从以下四个不同的选项中进行选择:应用商店,临时,企业或开发

如果只想下载现有的证书和配置文件,也可以指定--readonly标记。

如果您是第一次根据Matchonly标签运行match ,它将创建新的匹配或下载现有的匹配并将其提交到您先前创建的证书存储库中 。 首次运行时,您将必须输入与在匹配文件中指定的GitHUB用户名关联的密码。 现在,可能会令您感到震惊的是,在CI环境中,您将无法输入此密码,或者即使您这样做,也意味着有人将不得不手动执行此操作……我们讨厌:)。

为了克服这个问题,我们将不得不添加一个名称为MATCH_PASSWORD的环境变量。该变量将存储匹配文件中提供的用户名的密码。 稍后在CI集成中对此有更多的了解。

将github帐户与travis连接后,为使travis运行CI流程所需执行的.travis.yml是创建.travis.yml文件。 这是您要指定在持续集成过程中需要发生的所有事情的文件。

确保travis.yml文件像这样启动

 语言:Objective-C 
osx_image:xcode8.3

或任何您喜欢的图像。

在我们开始之前,我想提一提,在基于云的CI环境中,您不能指望将证书安装在可用于创建内部版本的全局钥匙串上。 这引起三件事:

  1. 手动代码签名:除非在自己的机器上设置了钥匙串,否则Fastlane不能与自动代码签名一起很好地发挥作用。 因此,我建议您使用一个可以在Xcode中创建的虚拟构建配置。 您将使用此配置来生成您的构建。
  2. 设置手动代码签名参数:现在,您已经创建了虚拟配置,请确保已在所有目标的“构建设置”中设置了开发团队。 将与此虚拟配置相关的供应配置文件和证书设置为已创建的匹配配置文件和证书。 如果不执行这些步骤,则您的构建将无法在CI环境中进行代码签名。
  3. 创建一个新的钥匙串:由于不能使用全局钥匙串,因此必须为此构建自己的本地钥匙串。 否则,您可能会遇到以下问题

因此,让我们深入了解它。

首先是第一件事。

为了解决第一个问题,即自动代码签名,我们将其禁用! 我们将使用手动代码签名来构建我们的应用程序 。 这样做的原因是实践经验。

使用自动代码签名,我有两个实体管理配置文件,一个实体是我们(使用fastlane),另一个是Xcode。 我发现最好只控制证书和预配置文件之类的东西,这样我才能确切地知道对它们进行更改的时间和地点。 请记住,如果在自动和手动代码签名之间切换,Xcode将重新生成配置文件。

您始终可以使它与自动代码签名一起工作,但是我觉得使用自动代码签名很麻烦。

自动代码签名

对于那些想使用自动代码签名的人,请按照以下步骤操作:

  1. 在健身电话上方添加此行

disable_automatic_code_signing(path: "myproject.xcworkspace")

而这在您的健身电话下面

enable_automatic_code_signing(path: "myproject.xcworkspace")

2.从Xcode->Preferences->Accounts->Download Manual Profiles下载所有配置配置Xcode->Preferences->Accounts->Download Manual Profiles

3.转到每个项目目标的“ Build Settings选项卡中的“ Provisioning Profile部分,打开将在其中存档项目的构建配置(例如: Release或您自己的自定义配置)。 选择您使用匹配创建的配置文件。

现在要解决创建钥匙串的第二个问题,请确保在travis上构建时创建了钥匙串, 然后再使用进行构建操作

  create_keychain( 
名称:ENV [“ MATCH_KEYCHAIN_NAME”],
密码:ENV [“ MATCH_KEYCHAIN_PASSWORD”],
default_keychain:是的,
解锁:是的,
超时:3600,
add_to_search_list:是

ENV[]参数基本上是环境变量,可以在fastfile的before_all脚本中分配。

这样就完成了travis的快速通道准备。 现在该学习一些有关Travis的特定知识了。

环境变量

您需要使用这些参数在此处指定这些参数,以便“ fastfile”可以在需要时访问它们。 现在,这些也可以是机密参数(例如,我们之前讨论的MATCH_PASSWORD )。 在将它们添加到我们的.travis.yml文件之前,我们需要对其进行加密。

安装travis

 宝石安装特拉维斯 

然后,您可以运行crypto命令来加密您的秘密环境密钥

 travis encrypt MY_SECRET_ENV=super_secret --add 

PS:请确保不要在值之前添加引号,除非该值实际需要。

  • 太棒了 因此,现在让我们使用上面的命令将MATCH_PASSWORD添加到它。
 travis encrypt MATCH_PASSWORD=password --add 

现在,我要解决的另一个问题是允许Travis访问我们的私有存储库,因为我们的证书位于私有存储库中。 为了解决这个问题,Travis建议了四种方法,我从中选择了“ API令牌”解决方案。

为您的CI GitHUB用户生成访问令牌。 使用加密

 travis encrypt CI_USER_TOKEN=token --add 

命令,并将以下内容添加到travis.yml文件的before_install部分。

 echo -e "machine github.com\n login $CI_USER_TOKEN" >> ~/.netrc 

恭喜,您已经为旅途做好准备。

对于下一步,您可以将通道写入fastfile中,该文件创建构建并将其上载到要上载到的任何托管服务。 然后,您可以在.travis.yml文件的脚本部分中调用这些通道。 例如:

 脚本: 
-快速通道create_travis_build
-快速通道upload_to_hosting_service

然后你走了! Fastlane和Travis CI完成了构建自动化!

这是一些额外的链接,您可能会发现有帮助

快速通道/比赛

fastlane —🚀自动构建和发布iOS和Android应用程序的最简单方法

github.com

快速通道/高级

fastlane —🚀自动构建和发布iOS和Android应用程序的最简单方法

github.com

私人依赖-Travis CI

travis sshkey —生成-r myorg / main我们需要您要将密钥添加到的帐户的GitHub登录名。 这个…

docs.travis-ci.com

环境变量— Travis CI

此外,Travis CI设置了可在构建中使用的环境变量,例如,标记构建或在发布后运行…。

docs.travis-ci.com

常见的构建问题– Travis CI

我们建议将这些库移到Gemfile中的单独组中,然后在Travis CI上安装RubyGems。

docs.travis-ci.com

在Twitter上关注我们以进行定期更新。 如果您喜欢本文,请点击“手形”图标进行推荐。 这将帮助其他中级用户找到它。