使用Fastlane的iOS连续部署🚀
如果您想在iOS应用程序中添加持续部署(CD),并且很难做到,那么您来对地方了。
我们缺少一篇文章,描述了使用Fastlane安全地执行CD的完整过程,以及一个使用连续集成(CI)服务(在本例中为Travis CI)的工作示例。 考虑到这一点,本指南将为您提供整个过程的分步指南。
现在,我们已经在公司部署了多个应用程序,我们发现手动将应用程序交付到App Store的过程是一个非常重复,令人沮丧且耗时的过程。 使用Fastlane,我们从几个小时的测试和部署缩短到了几分钟。
这是两部分系列的第二篇文章,其中包括:
- 自动化测试(引入Fastlane)
- 持续部署到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与选择的自动管理签名一起使用之后,我们得出结论,正确实施持续部署的唯一可行方法是进行手动证书管理。
这些步骤是:
- 创建证书;
- 配置对新证书的Xcode签名;
- (可选)注册更多设备。
您将需要需求 🎒部分中提到的Apple帐户和GitHub存储库。 只需使用init命令并按照显示的步骤操作(系统将提示您存储库URL)。
快速通道匹配初始化
脚本结束时,您将在fastlane文件夹中创建一个Matchfile。 打开它,并将app_identifier
和username
更改为您的应用程序捆绑包标识符和所创建帐户的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之后,您可以做两件事:
- 使用工具register_device通过命令行注册单个设备 :
fastlane运行register_device名称:“ iPhone 8”被禁止:“ d629fef002af1 ...”
2.使用Fastlane工具register_devices注册多个设备 。 不幸的是,在撰写本文时尚无命令行支持,因此我无法提供示例,如果发生更改,请告诉我。
注意:您将需要重复步骤1。 使用“ 强制 匹配” 进行 证书管理,以使用新设备更新“ 开发”配置文件。
快线比赛发展-力
AppStore配给 配置文件不是特定于您已注册的设备列表,因此不需要 更新它们 。
配置Xcode之后,我们将需要编写Fastlane脚本来执行手动和自动部署。
注意:如果您没有任何内部版本上传到Testflight或App Store,则需要执行手动部署,然后才能自动执行该过程。
我们需要更新位于fastlane文件夹中的app_identifier
,以包含app_identifier
和apple_id
这两个是必需的。
仅当您的Apple ID在Apple Developers Portal和iTunesConnect上集成到多个团队中时,才需要itc_team_id和team_id。
注意:如果您的Apple ID在多个团队中,请删除设置并运行B.1。 手动部署 脚本中,从脚本日志中提取iTunesConnect ID和团队ID(系统将提示您选择一个团队),然后在Appfile
中进行Appfile
。
现在,我们需要创建负责手动部署的Fastlane通道,我们将其称为manual_testflight
,检查以下Fastfile
:
该脚本将获取所有必要的证书,通过检查上传到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
中检入:
该脚本将执行与手册相同的操作,但会考虑额外的安全措施。 它将创建一个锁定的钥匙串并将证书保存在那里,并且在脚本末尾,它将删除所有下载的证书以及钥匙串。
注意:请勿在个人计算机上运行此通道,它会弄乱您的钥匙串,并且您最终可能会丢失钥匙串数据。 仅在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通道,您可以检查以下最终脚本:
如果您厌倦了在iTunesConnect上收到“ Missing Compliance
警告的信息,可以将密钥添加到Info.plist
文件中,该文件会自动符合导出策略。
将密钥ITSAppUsesNonExemptEncryption
布尔值设置为NO
,请记住,仅当它适用于您的项目时才应使用它(更多信息在此处)。
希望本指南能帮助您和您的团队节省一些部署时间,并记得不断检查Fastlane的改进和更新。 将会有越来越多的工具可以加速这种持久的部署过程!
非常感谢您的阅读,如果您喜欢本文,请确保单击that按钮。 对我们来说意义重大! 同样不要忘了在 Codium , Twitter 和 LinkedIn 上 关注 Coletiv ,因为我们不断发布有关多种技术的越来越有趣的文章。
如果您不知道,Coletiv是来自Porto的软件开发工作室,专门从事Elixir,iOS和Android应用程序开发。 但是我们做各种各样的事情。 我们会为您精心设计UX / UI设计,Web开发,甚至是安全性。
那么, 让我们一起做点什么?