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

1. 准备工作

4cddd34bd261cea0

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

学习内容

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

您需要满足的条件

  • Google 账号
  • 一台安装了 XCode 11.7 或更高版本的 Apple 机器
  • 在 Xcode 中构建的临时预发布 iOS 应用
  • 一个付费的 Apple 开发者账号
  • 一台用于测试的 iOS 实体设备。

iOS 模拟器应用适用于大多数 Codelab,但模拟器无法下载版本。

您仍然可以通过验证“下载”按钮。

2. 开始使用

设置 Fastlane

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

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

安装 Firebase CLI

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

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. 将以下内容添加到 ./fastlane/Fastfile,以创建您的第一条通道,并使用 Fastlane build_app 操作(也称为 gym)构建应用:
default_platform(:ios)

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

在此 Codelab 中,您将使用 get_certificates(也称为 cert)管理自己的认证和配置文件。get_certificates 会在本地生成签名证书,并将所有内容存储在 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. 点击 Create project

将您的 iOS 应用添加到项目

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

9c26c130a6c42212.png

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

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

66f79cc8a97fa8e9.png

启用 App Distribution

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

460213326c2784ae

fastlane 中设置分发

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

如果该命令提示您选择某个选项,请选择 Option 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 的新通道,用于调用构建通道,然后使用 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 发送的电子邮件,然后点按 Get Started(开始)链接。请务必在 Safari 中打开该链接。
  2. 您现在进入了 App Distribution 测试人员 Web 应用。在随即显示的页面中,使用您的 Google 账号登录,然后点按接受邀请

d833407de251b89f

  1. 现在,您可以查看自己受邀参与的版本。点按某个版本下方的注册设备

fd141215e54a938d.png

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

安装该配置文件可让 Firebase 执行以下操作:

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

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

  • 在测试设备的主屏幕上安装一个 Web Clip。Web Clip 会打开 App Distribution 测试人员 Web 应用,供您安装和访问所有测试应用。

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

fe93d649dfa25877.png

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

7b9f665a63a384cf.png

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

导出测试人员设备 UDID

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

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

241a9936898a2fc0.png

  1. 点击导出 Apple UDID

bcf0c26c522d9b4e

此文件应包含测试设备的 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 Developer Console

  1. 创建以下车道,将 UDID 添加到 Apple 开发者控制台中的设备列表,以便您使用 fastlaneregister_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

  1. 如果您使用的是实体设备,请按下载,然后安装并运行应用!

7. 恭喜

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

因此,您无需再分别向测试人员收集 UDID,也无需前往 Apple 开发者控制台更新设备列表或配置文件。您甚至无需打开 XCode!

此工作流可轻松设置为在您的持续集成环境中每小时或每天运行。

深入阅读