使用 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 模拟器应用程序适用于大多数 Codelab,但模拟器无法下载版本。

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

2. 开始使用

设置快速通道

App Distribution 与fastlane集成,使您能够自动分发应用程序的预发布版本。 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设置一些全局变量./fastlane/Appfile.包括您的应用程序 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 钥匙串中。但是,通常情况下,您需要使用fastlanesync_code_signing 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. 跳过接下来的几个步骤,然后单击继续控制台。稍后您将向您的应用程序添加 SDK。

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

66f79cc8a97fa8e9.png

启用应用程序分发

  1. 在“发布和监控”部分下,单击“应用程序分发”
  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. 运行以下命令将 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.邀请测试人员下载您的应用程序

当测试人员接受测试 Ad Hoc 构建的邀请时,他们会被要求获得共享其 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参数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 才能访问受邀测试的应用版本。由于您的测试版本是临时版本,因此您还需要通过安装 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 Clip 安装到测试设备的主屏幕。该 Web 剪辑将打开 App Distribution 测试器 Web 应用程序,您可以通过该应用程序安装和访问所有测试应用程序。

在应用程序分发测试器 Web 应用程序中,您的测试设备现已注册以用于应用程序的发布。

fe93d649dfa25877.png

现在您已将测试设备的 UDID 共享到 Firebase,现在您可以继续担任开发者了。在应用程序分发仪表板测试人员选项卡中,您的测试人员信息现在显示在您的应用程序版本下方,状态为“已接受”:

7b9f665a63a384cf.png

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

导出您的测试设备 UDID

作为开发者,您将收到一封来自 Firebase 的电子邮件,其中包含测试设备的 UDID。作为一个选项,App Distribution 允许您直接从 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导出通道

  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. 设置一个新通道,使用应用程序分发插件的 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 应用程序时,您可以看到该版本已准备好下载。

爸爸6d03b6ad78746.png

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

7. 恭喜你

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

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

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

进一步阅读