托管持续交付的iOS应用程序的ipa和dSYM文件

通过持续交付,可以在产品所有者准备就绪并获得批准后立即频繁发布新功能。 连续交付管道应该能够分析,构建,测试,存档并将iOS应用程序部署到iTunes Connect。 在上一篇文章中,我们已经看到了如何使用Fastlane工具设置基本管道。 作为存档步骤的一部分,部署到iTunes Connect的每个iOS版本都会创建一个.ipa文件,而dSYM文件是一个“调试符号文件 ”。 这些是在构建过程中生成的非常重要的构建工件,可用于返回到iOS应用的早期版本。 将这些IPA文件托管在某个位置非常有用,这样我们就可以轻松访问iOS应用的早期版本。 在本文中,我们将看到将IPA文件托管到GitHub或类似托管服务器的自动化方法。

您可能想知道为什么我们需要在服务器上托管已发布应用程序的IPA文件。 在某些情况下,方便使用IPA文件

  • 如果需要,轻松安装以前版本的iOS应用
  • 由于源代码的构建可能会因Swift版本或其他依赖项的更改而失败,并且在过去发布应用程序时开发人员可能没有相同的环境。
  • IPA文件是通用二进制文件,因此可以部署到iPhone和iPad。

对于Xcode Server,Jenkins,TeamCity等自托管CI服务器,Continuous Integration服务器是托管IPA文件的最佳位置,但是对于TravisCI和CircleCI等云托管CI服务器,我们需要在其他地方托管IPA文件。 这是因为基于云的CI服务器会为每个构建启动新的VM,并且在构建完成后会销毁VM。 除非将其上传到其他服务,否则我们可能会丢失IPA和其他构建构件。 有几种选择,我们可以托管我们的构建工件,例如测试报告,IPA文件dSYMS等。

  • 用于自托管解决方案的Continuous Integration Server
  • AWS S3存储桶或类似第三方服务(例如Artifactory)
  • 的GitHub
  • 公司内部服务器

有自托管CI服务器(如Apple的Xcode Server),其他开源CI服务器(如Jenkins,TeamCity等)。自托管CI服务器的好处是我们无需找到其他任何地方来托管构建工件。 除非我们删除它,否则它在CI服务器上已经可用。 有时,在这种情况下,我们需要清理CI服务器,我们需要将发布版本的构建工件移到同一服务器上的任何其他位置。 在这两种情况下,我们都可以访问IPA文件和dSYMS。

带有Xcode 9的最新版本的Xcode Server具有一项新功能,它将创建和IPA文件,这些文件可以从Xcode Bot中看到。 我在之前的博客文章“ Xcode Server + Xcode 9 =全面的iOS CI”中分享了Xcode Server的新功能。

使用Xcode Server,可以轻松地访问发布漫游器的IPA文件。 同样,我们可以将它们放在Jenkins或其他CI服务器上。

如前所述,从基于可能的CI服务器访问构建工件将具有挑战性,因为已经为每个构建启动了新VM,并在构建结束时将其销毁。 我们必须使用脚本将生成的构建工件上载到其他一些服务,例如AWS或类似服务。 我们可以使用Fastlane set_github_release操作轻松地将资源上传到GitHub。

我们可以结合一些Fastlane动作来实现此目的:

  $ tag =“#{app_version}-#{testflight_build_number}”
 )
 add_git_tag(
       标签:“#{$ tag}”
 )push_to_git_remote(
      远程:“来源”,
       local_branch:“大师”,
       remote_branch:“管理员”,
      标签:真
 )github_release = set_github_release(
   repository_name:“ your_git / repo”,
   api_token:ENV [“ GITHUB_TOKEN”],
  名称:“上传资产”,
   tag_name:“#{$ tag}”,
  承诺:“主人”,
   upload_assets:[“ ./build/myapp.ipa”,“ ./build/myapp.dSYMS”]
 ) 

上面的代码片段将标记推送到GitHub,并通过将IPA和dSYMS上传到Github来创建发行版。

使用GitHub的优缺点

使用GitHub在GitHub上托管IPA和dSYMS有一些利弊。

优点是

  • 轻松设置并访问所有开​​发人员。
  • 它不需要任何其他第三方服务,例如AWS S3存储桶或类似服务
  • GitHub已经与大多数基于云的CI服务器(例如TravisCI和CircleCI等)在网络中,因此无需添加与网络相关的依赖项。
  • 我们不必担心令牌,AWS等第三方服务的凭证的安全性。

缺点是

  • IPA和dSYMS的体积很大,因此它们可能会占用大量可在GitHub服务器上使用的内存
  • 难以与没有Github帐户的非技术人员分享。

现在,我们设法将IPA文件上传到服务器,但是如何使用这些文件返回到iOS应用的旧版本。 有多种方法可以实现此目的,但最简单的方法是使用Xcode。 过程非常简单在插入了iPhone的Xcode 8中,打开Window-> Devices。 在左侧导航中,选择插入的iPhone。单击已安装应用程序下的+符号。 导航到要安装的.ipa。 选择并单击打开以安装该应用程序。

尽管使用Xcode是在真实iOS设备上安装IPA的最简单方法,但是我们需要拥有用于对应用程序进行签名的证书和配置文件。 如果没有证书或配置文件,Xcode无法在设备上安装该应用程序。 还有一点需要注意的是,如果分发证书已过期,那么我们将不再能够使用Xcode安装该应用程序,除非我们使用有效的证书和配置文件将应用程序签名。

在快速交付的世界中,我们经常部署一个iOS应用程序,因此跟踪IPA文件和dSYMS等重要资产以在需要时轻松返回到该应用程序的先前版本非常重要。 您可能想看看您的应用程序在一段时间内是如何发展的,或者可能不是,但是保持构建构件挂起一段时间是个好主意。 我们可以使用Fastlane或自托管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。英国..