利用 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 的大部分内容,但模拟器无法下载版本。

您仍然可以通过验证 App Distribution 测试人员 Web 应用上是否显示“下载”按钮,验证设置是否有效。

2. 开始使用

设置 Fastlane

App Distribution 与 Fastlane 集成,可让您自动分发应用的预发布版本。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. 将以下内容添加到 ./fastlane/Fastfile,以创建您的第一条通道,并使用 Fastlane build_app 操作(也称为 gym)构建应用:
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 Developer Console 中创建应用:

$ 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

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

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

66f79cc8a97fa8e9

启用 App Distribution

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

460213326c2784ae

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. 运行以下命令,将 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

由于您添加了自己的电子邮件地址,因此会收到一封 Firebase App Distribution 邀请您测试该应用的电子邮件。您现在是首位测试人员了!继续下一部分,在测试设备上设置为测试人员。

注册测试设备

作为测试人员,您需要在测试设备上登录 Google,才能访问您受邀参与测试的应用版本。由于您的测试 build 是临时版本,因此您还需要安装 Firebase 配置文件来注册测试设备。之后,您可以使用添加到设备主屏幕上的 Web Clip 通过 App Distribution 测试人员 Web 应用访问已提供给您的版本。

  1. 在您的 iOS 测试设备上,打开 Firebase App Distribution 发送的电子邮件,然后点按开始使用链接。请务必在 Safari 中打开该链接。
  2. 您现在会进入 App Distribution 测试人员 Web 应用。在随即显示的页面中,使用您的 Google 账号登录,然后点按接受邀请

d833407de251b89f

  1. 你现在可以查看受邀加入的专辑了。点按其中一个版本下方的注册设备

fd141215e54a938d

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

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

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

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

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

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

fe93d649dfa25877

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

7b9f665a63a384cf.png

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

导出测试人员设备 UDID

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

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

241a9936898a2fc0

  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 导出通道

  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 Developer Console

  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 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!

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

补充阅读材料