使用CircleCI测试和部署iOS应用

在Atomic启动新的新项目时,我们总是问自己有关测试和部署工具的问题。 CircleCI在移动和Web应用程序方面都非常幸运,因此当我发现CircleCI有适用于iOS的解决方案时,我很高兴能够利用它。 在这篇文章中,我将回顾如何在您的iOS应用程序中使用CircleCI,并说明如何处理CI和轻松部署道路上的一些障碍。

那么,CircleCI是什么? 简而言之,它是用于持续集成和部署的软件即服务平台。 我使用CircleCI的目标有两个:

  1. 持续集成测试,而无需自己维护服务器
  2. 使用TestFlight为我们的内部测试人员轻松部署

我跟随这篇出色的博客文章解释了CircleCI的启动和运行过程,并强烈建议有兴趣尝试CircleCI的iOS开发人员使用它。 接下来是关于我在CircleCI上部署新应用程序时的进度的分步日志。

1.创建一个帐户

登录到CircleCI并注册。 我们使用了最基本的OS X层服务器,每月费用为40美元。 您可以在此处找到完整的定价信息。

登录并将OS X存储库添加到CircleCI帐户。 他们与GitHub完全无缝集成。

2.分享您的Xcode方案

在Xcode中,确保您的方案是共享的,然后提交更改:

  1. 选择“产品>方案>管理方案”。
  2. 选择要共享的方案的“共享”选项,然后单击“关闭”。
  3. 推零钱。

对于大多数应用程序,您可以只共享您的主要项目方案。 如果仅共享一种方案,CircleCI将自动选择它。

3.创建并上传代码签名证书

CircleCI要求您上载配置文件和代码签名证书。 安装Fastlane工具套件可简化此步骤,并避免麻烦使用Xcode。 要创建签名证书,请运行:

  $ mkdir证书 
$ cert --output_path证书

cert将创建三个文件,包括您需要上传的.P12文件。 同样,请参阅我上面链接的博客文章(我的指示直接来自于此)。 在这一点上,我遇到了第一个问题:

 密码(对于foo@bar.com):*********** 
[09:05:29]:发送崩溃/成功信息。 有关更多信息:https://github.com/fastlane/enhancer
[09:05:29]:未发送个人/敏感数据。 仅共享以下内容:
[09:05:29]:{:cert => 1}
[09:05:29]:证书
[09:05:29]:此信息用于修复失败的工具并改进最常用的工具。
[09:05:29]:您可以通过设置环境变量FASTLANE_OPT_OUT_USAGE = 1来禁用此功能
/Users/foobar/.rvm/gems/ruby-2.2.4/gems/spaceship-0.27.2/lib/spaceship/two_step_client.rb:39:handle_two_step中的[:]太空船目前不支持该推基于2步验证,请同时转换为基于SMS的2因子验证(RuntimeError)

这里发生的是Fastlane的Spaceship工具不支持Apple的基于推式的两步验证过程,因此当我运行证书时,它失败了,我在Macbook Pro上遇到了两步验证挑战。 原来这很烦人-错误消息建议切换到基于SMS的2因子身份验证,但我不知道如何使用AppleID进行此操作。 我采取了这样的方法暂时停用两步验证:

 登录到您的Apple ID帐户页面。 
在“安全性”部分中,单击“编辑”。
单击添加受信任的电话号码。
要添加号码,请输入电话号码并使用文字进行验证。
要删除号码,请单击要删除的电话旁边的X。

如果有人知道如何为iPhone用户切换到SMS,我很想听听。

4.处理无效的颁发者错误

禁用两步验证后,在生成代码签名证书时遇到了另一个问题。 具体来说,我有一个过期的Apple Worldwide Developer Relations证书颁发机构证书。 我什至不知道这甚至存在。 此堆栈溢出文章中描述了此问题的解决方法。 解决方案是删除“钥匙串访问”中的过期证书,然后从Apple下载新证书。

5.上传.P12文件

最终,cert成功了,我将一个.P12文件上传到CircleCI进行代码签名。 您可以通过转到CircleCI应用程序并选择“项目设置”>“ iOS代码签名”来上传文件。

6.创建和上传配置文件

CircleCI部署您的应用程序所需的另一个文件是配置文件。 要创建一个,可以使用“叹气”工具:

  $ mkdir证书 
$ cert --output_path证书

除非有问题,否则sigh将使用.mobileprovision创建一个文件。 就我而言,这是一个问题。 叹气时,它会询问包标识符(首次创建项目时应给它Xcode)。 为了使叹息起作用,Apple开发者门户上必须存在具有该标识符的应用程序。 我尚未在开发人员门户上创建该应用程序,因此叹气失败。 有一个针对此问题的命令行修复程序:

  $产生-u yourappleid-一个yourappbundle 

Produce命令在开发人员门户上创建一个新应用。 运行生产后,创建了我的.mobileprofile文件,因此我将该文件添加到了存储库的根目录中并推送了更改。 在构建过程中,CircleCI将自动找到并使用该文件。

7.配置circle.yml对您的应用程序进行签名

最后一步是设置CircleCI配置文件以构建和部署您的应用程序。 CircleCI可以使用“ gym”与之前上传的.P12文件对应用程序进行签名,但是它还需要更多信息:确切的代码签名标识字符串,可以通过运行安全性来找到该字符串:

 安全查找身份-p代码签名 

该工具的输出是有效签名身份的列表。 选择适当的一个并复制字符串(不带UUID)。 例如,它可能看起来像这样:“ iPhone发行版:YourCompany,Inc.(ABXU908T71)”。
现在,将该字符串添加到circle.yml。

 机: 
环境:
GYM_CODE_SIGNING_IDENTITY:“ iPhone发行:YourCompany,Inc.
(ABXU908T71)”
部署:
beta_distribution:
分行:硕士
命令:
- 健身房

并将circle.yml添加到仓库的根目录并推送更改。 上面的配置告诉CircleCI在使用GYM_CODE_SIGNING_IDENTITY设置的Gym对master分支进行更改时进行部署。

8.部署到iTunes Connect

最后,您已全部配置好CircleCI,以将您的应用程序部署到iTunes Connect。 为此,您需要在CircleCI中的应用程序设置下设置两个环境变量:ITUNES_CONNECT_ACCOUNT(您的iTunes Connect帐户用户名)和ITUNES_CONNECT_PASSWORD:

。 CircleCI使用这些凭据来运行ipa,前提是所有测试均通过,它将上传您成功的构建。

您需要的另一条信息是iTunes Connect AppleID,可以在iTunes Connect网站上的“我的应用程序->您的应用程序->应用程序信息-> Apple ID”下找到。 这是通过-i选项传递给ipa的数字。

最后,再次更新您的circle.yml,如下所示:

 机: 
环境:
GYM_CODE_SIGNING_IDENTITY:“ iPhone发行版:YourCompany,Inc.(ABXU908T71)”
部署:
分期:
分行:硕士
命令:
- 健身房
-ipa distribution:itunesconnect -i 8675309 --upload --verbose

至此,一切正常,并且CircleCI的绿色版本将为您带来成功的成功测试和部署! 访问iTunes connect,在“活动”下将有一个新版本。 苹果需要一些时间来处理文件,但是一旦处理完成,该应用就可以进行测试了,您的TestFlight测试人员将得到通知。

结论

我花了几个小时来解决一些棘手的问题,但是最后,痛苦是值得的。 现在,每次团队成员将变更推送到主服务器(通常是通过合并功能分支)时,测试都会自动运行,并且(如果通过)会自动将构建发送给测试人员。 这是一件美丽的事。