使用 App Distribution 和 fastlane 更快地分发您的预发布 iOS 版本

1. 开始之前

4cddd34bd261cea0.png

在此 Codelab 中,您将学习如何使用Firebase App Distribution及其fastlane插件将 iOS 应用分发给测试人员,收集测试设备 UDID,并将它们注册到应用的配置文件中,这样您就可以将 Ad Hoc 快速构建到测试人员中'手。

你会学到什么

  • 如何使用 Firebase App Distribution 和fastlane向测试人员上传和分发预发布的 iOS 应用(Ad Hoc)。
  • 如何注册为测试人员并在测试设备上下载分布式应用程序。
  • 如何通过使用 App Distribution 的fastlane插件导出测试设备 UDID 来快速注册测试设备。
  • 如何更新应用的配置文件并重新上传以进行分发。

你需要什么

  • 一个谷歌帐户
  • 安装了XCode 11.7+ 的 Apple 机器
  • 在 Xcode 中构建的 Ad Hoc 预发布 iOS 应用程序
  • 付费的Apple 开发者帐户
  • 用于测试的物理 iOS 设备。

iOS 模拟器应用程序适用于大多数代码实验室,但模拟器无法下载版本。

您仍然可以通过验证“下载”按钮是否出现在 App Distribution 测试程序 Web 应用程序上来验证设置是否有效。

2. 开始

设置快车道

App Distribution 与fastlane集成,使您能够自动分发应用程序的预发布版本。 App Distribution 与您的fastlane配置集成。

  1. 安装并设置fastlane
  2. 在设置过程中在项目的根目录中运行fastlane init ,然后选择“手动设置”。您将看到一个名为fastlane的子目录,其中包含一个FastfileAppfilePluginfile ,您将使用它们来配置fastlane

3. 使用 fastlane 构建您的应用

构建您的应用

  1. ./fastlane/Appfile.中为fastlane设置一些全局变量。包括您的应用程序 ID 和您的 Apple ID:
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
  1. 创建您的第一个通道并使用fastlane 的build_app操作(也称为gym )通过将以下内容添加到您的./fastlane/Fastfile来构建您的应用程序:
default_platform(:ios)

lane :build do
    build_app(export_method: "ad-hoc")
end
  1. 签署您的应用程序以进行分发。

对于此 Codelab,您将使用get_certificates (也称为cert )管理自己的认证和配置文件,它会在本地生成签名证书并将所有内容存储在您的 macOS 钥匙串中。但是,通常情况下,您需要使用fastlane sync_code_signing action (也称为match )来安全地管理团队的代码签名证书和配置文件。

lane :build do
    get_certificates()
    build_app(export_method: "ad-hoc")
end
  1. 使用get_provisioning_profile操作(也称为sigh )为您的应用设置配置文件。这允许您与测试人员共享您的应用程序。
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end
  1. [可选] 如果您以前从未运行过您的应用,请运行以下命令在 Apple 开发者控制台中创建您的应用:

$ fastlane produce --skip_itc

  1. 最后,通过运行车道构建您的应用程序。

系统将提示您输入您的 Apple ID、密码(存储在您的钥匙串中)和应用程序的捆绑包 ID。

$ fastlane build

如果您遇到任何问题,请参阅fastlane故障排除指南

4. 将您的应用上传到 Firebase

现在您已经构建了您的应用程序,您可以将其上传到 App Distribution。

创建并设置 Firebase 项目

  1. 登录 Firebase。
  2. Firebase 控制台中,创建或添加一个新项目,然后将您的项目命名为“UDID Export Codelab”。

您无需为此项目启用 Google Analytics。

  1. 单击创建项目

将您的 iOS 应用程序添加到项目中

  1. 单击 iOS 图标以创建新的 Firebase iOS 应用,然后输入应用的捆绑包 ID。

9c26c130a6c42212.png

  1. 跳过接下来的几个步骤,然后单击Continue to console 。稍后您将向您的应用添加 SDK。

您的项目和应用程序现在可在“项目概述”页面中使用。

66f79cc8a97fa8e9.png

启用应用分发

  1. 在 Release & Monitor 部分下,单击App Distribution
  2. 接受条款后,单击“开始”为您的应用启用应用分发。

460213326c2784ae.png

fastlane中设置发行版

  1. 从 iOS 项目的根目录运行以下命令,将 App Distribution 添加到您的fastlane配置中。

如果命令提示您一个选项,请选择选项 3:RubyGems.org

$ fastlane add_plugin firebase_app_distribution

  1. 确认插件已安装:

$ fastlane

输出应在已安装插件列表中显示fastlane-plugin-firebase_app_distribution

  1. 确认安装插件后,选择选项0取消。

验证您的 Firebase 项目

要使用fastlane插件,您将首先验证您的 Firebase 项目。

  1. 运行以下命令:

$ fastlane run firebase_app_distribution_login

  1. 当命令打印身份验证链接时,请在浏览器中打开该链接。
  2. 出现提示时,登录您的 Google 帐户并授予访问您的 Firebase 项目的权限。

从登录浏览器复制生成的代码并将其粘贴到命令行中。

  1. 然后登录操作会打印一个刷新令牌,App Distribution 插件使用该令牌向 Firebase 进行身份验证:

dbd61c40c4131158.png

  1. 通过设置FIREBASE_TOKEN环境变量传递令牌:

$ export FIREBASE_TOKEN= <token>

分发您的应用程序

您现在已准备好分发您的应用程序。

  1. ./fastlane/Fastfile的顶部,定义一个名为firebase_app_id的变量。将<your_app_id>替换为您创建的应用的 Firebase 应用 ID(可在项目设置页面中找到)。

Fastfile是用 Ruby 编写的,因此请使用 Ruby 语法来定义变量。

firebase_app_id = "<your_app_id>"
  1. 添加一个名为distribute的新通道,该通道调用构建通道,然后使用firebase_app_distribution操作分发您的应用程序。
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end
  1. 运行新通道以构建您的应用程序并创建分发。

$ fastlane distribute

此时,您的 Fastfile 应如下所示:

firebase_app_id = "<your Firebase app ID>"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
    )
end

刷新 Firebase 控制台后,您将看到应用的新版本。

c59dc1a94de3bf3c.png

5. 邀请测试人员下载你的应用

当测试人员接受测试 Ad Hoc 构建的邀请时,会要求他们获得共享其 UDID 的权限。如果他们同意,App Distribution 会收集他们的设备信息并通过电子邮件通知您。在本部分中,您将自己添加为测试人员以下载和测试您分发的应用程序。

将自己作为测试人员添加到版本中

  1. 在您的firebase_app_id顶部的 firebase_app_id 下,创建一个变量来保存测试人员并包含您自己的电子邮件地址,以及您想尝试的其他可选电子邮件地址。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
  1. 应用 Ruby 的Array#join方法将app_testers数组转换为以逗号分隔的字符串,这是testers参数所期望的。然后,将结果传递给 firebase_app_distribution 的testers参数firebase_app_distribution.
lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end

此时,您的 Fastfile 应如下所示:

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end
  1. 再次运行车道。

$ fastlane distribute

运行通道后,您添加的测试人员将收到来自 App Distribution 的邀请电子邮件,通知他们新的可用版本。在 Firebase 控制台中,您现在可以看到您在应用版本下添加的测试人员。

2e0fc9603b868af8.png

由于您包含了您的电子邮件地址,您将收到一封来自 Firebase App Distribution 的电子邮件,邀请您测试该应用程序。你现在是第一个测试者!继续下面的部分,在您的测试设备上设置为测试人员。

注册您的测试设备

作为测试人员,您需要在测试设备上登录 Google 才能访问受邀测试的应用版本。由于您的测试版本是 Ad Hoc 版本,因此您还需要通过安装 Firebase 配置文件来注册您的测试设备。之后,您可以使用添加到设备主屏幕的 Web 剪辑从 App Distribution 测试程序 Web 应用程序访问可供您使用的版本。

  1. 在您的 iOS 测试设备上,打开从 Firebase App Distribution 发送的电子邮件,然后点击开始链接。确保在 Safari 中打开该链接。
  2. 您现在处于 App Distribution 测试程序 Web 应用程序中。在出现的页面中,使用您的 Google 帐户登录,然后点击接受邀请。

d833407de251b89f.png

  1. 您现在可以看到您被邀请参加的发布。点击其中一个版本下的注册设备

fd141215e54a938d.png

  1. 出现提示时,下载 Firebase 配置文件,然后在“设置”应用中安装该配置文件。

安装配置文件可让 Firebase 获得以下权限:

  • 通过收集设备的唯一设备 ID (UDID) 来注册测试设备。

Firebase 会向 Firebase 项目的所有所有者和编辑者发送一封电子邮件,其中包含测试设备的 UDID。

  • 将网络剪辑安装到测试设备的主屏幕。 Web 剪辑打开 App Distribution 测试器 Web 应用程序,它允许您安装和访问所有测试应用程序。

在 App Distribution 测试程序 Web 应用程序中,您的测试设备现在已为您的应用程序版本注册。

fe93d649dfa25877.png

现在您已将测试设备的 UDID 共享给 Firebase,您现在可以恢复为开发人员。在App Distribution 仪表板Testers 选项卡中,您的测试人员信息现在显示在您的应用发布下,状态为“已接受”:

7b9f665a63a384cf.png

在下一部分中,您会将设备 UDID 添加到应用的配置文件中,然后构建适用于您的测试设备的应用版本。

导出您的测试仪设备 UDID

作为开发人员,您会收到一封来自 Firebase 的电子邮件,其中包含测试设备的 UDID。作为一个选项,App Distribution 可以让您直接从 Firebase 控制台将它们导出为原始文本文件,从而轻松地一次收集多个新设备 UDID。

  1. 要导出所有 UDID,请打开Testers & Groups选项卡。

241a9936898a2fc0.png

  1. 单击导出 Apple UDID

bcf0c26c522d9b4e.png

该文件应包含测试设备的 UDID。

Device ID            Device Name                            Device Platform
1234567890     udid.codelab.tester@gmail.com - iPhone SE 2nd Gen        ios

也可以使用fastlane从命令行导出 UDID,您将在下一节中执行此操作。

6. 更新您应用的配置文件并重建它

现在,您需要将测试设备 UDID 添加到应用的配置文件中,重新构建适用于您的设备的应用版本,然后分发新版本。

添加 UDID 导出通道

  1. 在您的 Fastfile 顶部添加另一个变量,并将其设置为将下载测试人员的设备 UDID 的文件路径。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"
  1. 设置一个新通道,使用 App Distribution 插件的 UDID 导出操作来下载测试程序 UDID,就像您在控制台中所做的那样。
lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end
  1. 运行以下通道以下载 UDID。

$ fastlane download_udids

  1. 打印下载的文件,其中应包含测试设备 UDID。

$ cat tester_udids.txt

设备添加到 Apple 开发者控制台

  1. 创建以下通道以将 UDID 添加到 Apple 开发人员控制台中的设备列表中,以便您可以使用fastlane 的register_devices操作将它们添加到您的配置文件中:
lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end
  1. 然后,运行车道:

$ fastlane add_new_devices

然后,您应该会在开发者控制台的设备列表中看到新设备。

将设备添加到您的配置文件

  1. force参数添加到build通道中的配置文件步骤,以强制它在每次构建时拾取新设备。
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

重新运行车道以构建和上传

现在,您将使用新通道更新您的distribute通道,以便将设备添加到配置文件中,重新构建应用程序,然后分发它。

  1. distribute调用新通道:
lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: "1:123456789:ios:abcd1234",
        release_notes: "Try out this app!"
        testers: app_testers.join(","),
    )
end
  1. 运行distribute通道:

$ fastlane distribute

此时,您的 Fastfile 应如下所示:

firebase_app_id = "<your Firebase app ID>"
app_testers = [
  "your@email.com",
  "another@email.com",
]
tester_udids_file = "tester_udids.txt"

default_platform(:ios)

lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

lane :distribute do
    download_udids
    add_new_devices
    build
    firebase_app_distribution(
        app: firebase_app_id,
        release_notes: "Try out this app!",
        testers: app_testers.join(","),
    )
end

lane :download_udids do
    firebase_app_distribution_get_udids(
        app: firebase_app_id,
        output_file: tester_udids_file,
    )
end

lane :add_new_devices do
    register_devices(devices_file: tester_udids_file)
end

从测试设备下载版本

现在您的应用程序包含测试设备 UDID,它们可以安装到测试设备上。

e275f73d57cc8fb1.png

  1. 在您的测试设备上,使用电子邮件中的链接或设备主屏幕上的图标返回 App Distribution 测试程序 Web 应用程序。

当您导航到 UDID codelab 应用程序时,您可以看到该版本已准备好下载。

dad6d03b6ad78746.png

  1. 如果您使用的是物理设备,请按下载,然后安装并运行该应用程序!

7. 恭喜

您现在已配置 App Distribution 和fastlane以自动化您的预发布测试过程。现在,当您想邀请其他测试人员或将他们的 UDID 添加到您的应用程序时,您只需要运行一个命令: fastlane distribute

因此,无需再单独从测试人员那里收集 UDID,也无需前往 Apple 开发人员控制台更新设备列表或配置文件。你甚至不需要打开 XCode!

此工作流易于设置为在您的持续集成环境中每小时或每天运行一次。

进一步阅读