利用 App Distribution 和 Fastlane 更快地分发您的预发布 iOS build

1. 准备工作

4cddd34bd261cea0.png

在此 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 的 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. 点击 Create project

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

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

9c26c130a6c42212.png

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

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

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 的新通道,该通道会调用 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 配置文件来注册测试设备。之后,您可以通过 App Distribution 测试人员 Web 应用(使用添加到设备主屏幕的网页剪辑)访问已提供给您的版本。

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

d833407de251b89f

  1. 您现在可以查看受邀加入的发行内容。点按其中一个版本下方的注册设备

fd141215e54a938d.png

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

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

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

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

  • 在测试设备的主屏幕上安装网页剪辑。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

  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 应用后,您会看到相应版本已可供下载。

父亲 6d03b6ad78746

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

7. 恭喜

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

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

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

补充阅读材料