借助 App Distribution 和 Fastlane,更快地分发预发布的 iOS build

1. 准备工作

4cddd34bd261cea0.png

在此 Codelab 中,您将学习如何使用 Firebase App Distribution 及其 fastlane 插件将 iOS 应用分发给测试人员、收集测试设备 UDID 并将其注册到应用的预配配置文件中,以便您可以快速将临时 build 提供给测试人员。

学习内容

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

您需要满足的条件

  • Google 账号
  • 已安装 XCode 11.7 及更高版本的 Apple 计算机
  • 在 Xcode 中构建的 Ad Hoc 预发布 iOS 应用
  • 付费 Apple 开发者账号
  • 用于测试的 iOS 实体设备。

iOS 模拟器应用适用于此 Codelab 的大部分内容,但模拟器无法下载版本。

您仍然可以通过验证 App Distribution 测试人员 Web 应用中是否显示“下载”按钮来验证设置是否成功。

2. 开始使用

设置 fastlane

App Distribution 与 fastlane 集成,可让您自动分发应用的预发布 build。App Distribution 与您的 fastlane 配置集成。

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

安装 Firebase CLI

您还需要安装 Firebase CLI。如果您使用的是 macOS 或 Linux,可以运行以下 c网址 命令:

curl -sL https://firebase.tools | bash

如果您使用的是 Windows,请阅读安装说明,以获取独立二进制文件或通过 npm 进行安装。

安装 CLI 后,运行 firebase --version 应报告 12.0.0 或更高版本:

$ firebase --version
12.0.0

3. 使用 fastlane 构建应用

构建应用

  1. ./fastlane/Appfile. 中为 fastlane 设置一些全局变量。请添加您的应用 ID 和 Apple ID:
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
  1. 创建您的第一个 lane,并使用 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. 最后,运行 lane 来构建应用。

系统会提示您输入 Apple ID、密码(存储在钥匙串中)和应用的软件包 ID。

$ fastlane build

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

4. 将应用上传到 Firebase

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

创建和设置 Firebase 项目

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

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

  1. 点击 Create project

将您的 iOS 应用添加到项目

  1. 点击 iOS 图标以创建新的 Firebase iOS 应用,然后输入应用的软件包 ID。

9c26c130a6c42212.png

  1. 跳过接下来的几个步骤,然后点击继续前往控制台。您稍后会将 SDK 添加到应用中。

您的项目和应用现在会显示在项目概览页面中。

66f79cc8a97fa8e9.png

启用 App Distribution

  1. 在“发布和监控”部分下,点击 App Distribution
  2. 接受条款后,点击“开始使用”为您的应用启用 App Distribution。

460213326c2784ae.png

fastlane 中设置分发

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

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

$ fastlane add_plugin firebase_app_distribution

  1. 确认插件已安装:

$ fastlane

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

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

对 Firebase 项目进行身份验证

如需使用 fastlane 插件,您需要先对 Firebase 项目进行身份验证。

  1. 运行以下命令,将 CLI 连接到您的 Google 账号:

$ firebase login

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

分发应用

现在,您可以开始分发应用了。

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

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

firebase_app_id = "<your_app_id>"
  1. 添加一个名为 distribute 的新轨道,该轨道会调用 build 轨道,然后使用 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. 邀请测试人员下载您的应用

当测试人员接受邀请来测试临时 build 时,系统会询问他们是否同意共享其 UDID。如果他们同意,App Distribution 会收集其设备信息,并通过电子邮件通知您。在本部分中,您将自己添加为测试人员,以便下载并测试您分发的应用。

将自己添加为版本的测试人员

  1. 在 Fastfile 顶部的 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 参数
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,才能访问您受邀测试的应用版本。由于您的测试 build 是临时发行版,因此您还需要通过安装 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 片段。Web 片段会打开 App Distribution 测试人员 Web 应用,您可以通过该应用安装和访问您的所有测试应用。

在 App Distribution 测试人员 Web 应用中,您的测试设备现已注册,可用于测试应用发布版本。

fe93d649dfa25877.png

现在,您已将测试设备的 UDID 分享给 Firebase,接下来可以继续以开发者身份进行操作。在应用分发信息中心“测试人员”标签页中,测试人员信息现在会显示在应用的版本下方,状态为“已接受”:

7b9f665a63a384cf.png

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

导出测试人员设备 UDID

作为开发者,您会收到一封来自 Firebase 的电子邮件,其中包含测试设备的 UDID。作为一种可选方案,“应用分发”可让您直接从 Firebase 控制台导出多个新设备 UDID,以原始文本文件的形式一次性轻松收集这些 UDID。

  1. 如需导出所有 UDID,请打开测试人员和群组标签页。

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 导出 lane

  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. 运行以下 lane 以下载 UDID。

$ fastlane download_udids

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

$ cat tester_udids.txt

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

  1. 创建以下通道,以便在 Apple 开发者控制台中将 UDID 添加到设备列表,然后使用 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 时强制它选取新设备。
lane :build do
    get_certificates()
    get_provisioning_profile(adhoc: true, force: true)
    build_app(export_method: "ad-hoc")
end

重新运行 lane 以构建和上传

现在,您将使用新轨道更新 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 Developer Console 更新设备列表或配置文件。您甚至无需打开 Xcode!

此工作流易于设置,可在持续集成环境中每小时或每天运行。

更多详情