使用 Fastlane 将 iOS 应用分发给测试人员

您可以使用 Fastlane 将构建版本分发给测试人员,Fastlane 是一个开源平台,可自动执行 iOS 和 Android 应用的构建与发布过程。它遵循 Fastfile 中定义的简单说明。设置 Fastlane 和 Fastfile 后,您可以将 App Distribution 与您的 Fastlane 配置进行集成。

第 1 步:设置 Fastlane

  1. 安装并设置 Fastlane

  2. 如需将 App Distribution 添加到您的 Fastlane 配置,请从 iOS 项目的根目录运行以下命令:

    fastlane add_plugin firebase_app_distribution

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

第 2 步:进行 Firebase 身份验证

您必须首先通过以下方法之一对 Firebase 项目进行身份验证,然后才能使用 Fastlane 插件。默认情况下,若未使用其他身份验证方法,Fastlane 插件会从 Firebase CLI 查找凭据。

第 3 步:设置 Fastfile 并分发应用

  1. ./fastlane/Fastfile 通道中,添加 firebase_app_distribution 代码块。请使用以下参数配置分发:
    firebase_app_distribution 参数
    app

    只有在您的应用不包含 Firebase 配置文件 (GoogleService-Info.plist) 时才需要此参数:您应用的 Firebase 应用 ID。您可以在 Firebase 控制台的“常规设置”页面中找到此应用 ID。

    app: "1:1234567890:ios:0a1b2c3d4e5f67890"
    googleservice_info_plist_path

    指向 GoogleService-Info.plist 文件的路径(相对于已归档产品的路径)。默认设置为 GoogleService-Info.plist

    如果未指定 app 参数,系统会使用此文件来获取应用的 Firebase 应用 ID。

    firebase_cli_token

    使用 Firebase CLI 对 CI 环境进行身份验证时输出的刷新令牌(如需了解详情,请参阅将 CLI 与 CI 系统配合使用)。

    service_credentials_file

    您的 Google 服务账号 json 文件的路径。如需了解如何使用服务账号凭据进行身份验证,请参见上文。

    ipa_path

    取代 apk_path(已弃用)。您要上传的 IPA 文件的绝对路径。如果未指定,则 Fastlane 会根据生成文件的通道确定该文件的位置。

    release_notes
    release_notes_file

    此 build 的版本说明。

    您可以直接指定版本说明:

    release_notes: "Text of release notes"

    或者指定一个纯文本文件的路径:

    release_notes_file: "/path/to/release-notes.txt"
    testers
    testers_file

    您要邀请的测试人员的电子邮件地址。

    您可以采用以英文逗号分隔的电子邮件地址列表的形式指定测试人员:

    testers: "ali@example.com, bri@example.com, cal@example.com"

    或者,您可以指定一个纯文本文件的路径,该文件包含以英文逗号分隔的电子邮件地址列表:

    testers_file: "/path/to/testers.txt"
    groups
    groups_file

    您要邀请的测试人员群组(请参阅管理测试人员)。使用群组别名指定群组,您可以在 Firebase 控制台中查找群组别名。

    您可以采用以英文逗号分隔的列表的形式来指定群组:

    groups: "qa-team, trusted-testers"

    或者,您可以指定一个纯文本文件的路径,该文件包含以英文逗号分隔的群组名称列表:

    groups_file: "/path/to/groups.txt"
    test_devices
    test_devices_file

    以下分发类型属于自动化测试助手 Beta 版功能的一部分。

    您要向其分发 build 的测试设备(请参阅自动化测试)。

    您可以采用以英文分号分隔的测试设备列表的形式指定测试设备:

    test_devices: "model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait"

    或者,您可以指定一个纯文本文件的路径,该文件包含以英文分号分隔的测试设备列表:

    test_devices_file: "/path/to/test-devices.txt"
    test_username

    自动化测试期间要使用的自动登录的用户名。

    test_password
    test_password_file

    自动化测试期间要使用的自动登录的密码。

    或者,您可以指定一个纯文本文件的路径,该文件包含密码:

    test_password_file: "/path/to/test-password.txt"
    test_username_resource

    自动化测试期间要使用的自动登录的用户名字段的资源名称。

    test_password_resource

    自动化测试期间要使用的自动登录的密码字段的资源名称。

    test_non_blocking

    异步运行自动化测试。访问 Firebase 控制台查看自动测试结果。

    debug

    布尔值标志。您可以将其设置为 true 以显示详细的调试输出。

例如:

platform :ios do
    desc "My awesome app"
    lane :distribute do
        build_ios_app(...)
        # build_ios_app is a built-in fastlane action.

        release = firebase_app_distribution(
            app: "1:123456789:ios:abcd1234",
            testers: "tester1@company.com, tester2@company.com",
            release_notes: "Lots of amazing new features to test out!"
        )

    end
end

如需向测试人员提供此 build,请运行您的通道:

fastlane <lane>

该操作的返回值是用于表示上传版本的哈希值。 您也可以使用 lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] 获取此哈希值。如需详细了解此哈希值中的可用字段,请参阅 REST API 文档

Fastlane 插件会在上传版本后输出以下链接。这些链接可帮助您管理二进制文件,并确保测试人员和其他开发者拥有正确的版本:

  • 指向显示单个版本的 Firebase 控制台的链接。您可以将此链接分享给贵组织中的其他开发者。
  • 指向测试人员体验(iOS Web Clip)中的版本的链接,可让测试人员查看版本说明,并将应用安装在设备上。测试人员需要有权访问相应版本才能使用该链接。
  • 一个签名链接,用于直接下载并安装应用二进制文件(IPA 文件)。该链接会在 1 小时后过期。

在您分发 build 后,可在 150 天内通过 Firebase 控制台的 App Distribution 信息中心中访问该 build。当该 build 距离到期还有 30 天的时候,控制台中和测试人员的测试设备上的 build 列表中都会显示到期通知。

之前未受邀测试应用的测试人员会收到邀请其开始测试的电子邮件。当有新的 build 准备接受测试时,现有测试人员会收到电子邮件通知。如需了解如何安装测试应用,请参阅测试人员设置指南。您可以在 Firebase 控制台中监控每个测试人员的状态,以确定他们是否接受了邀请以及是否下载了应用。

(可选)如需在每次通过 App Distribution 创建新版本时自动递增 build 编号,您可以使用 firebase_app_distribution_get_latest_release 操作和 increment_build_number 操作。 以下代码提供了有关如何自动递增 build 编号的示例:

lane :increment_version do
  latest_release = firebase_app_distribution_get_latest_release(
    app: "<your Firebase app ID>"
  )
  increment_build_number({ build_number: latest_release[:buildVersion].to_i + 1 })
end

如需详细了解此 Fastlane 插件功能,请参阅获取应用最新版本的信息

第 4 步(可选):管理发行版本的测试人员

您可以使用 Fastfile 文件或直接运行 Fastlane 操作在项目或群组中添加测试人员,以及从项目或群组中移除测试人员。运行操作会直接替换 Fastfile 中设置的值。

将测试人员添加到 Firebase 项目后,您可以将其添加到各个版本中。从 Firebase 项目中移除的测试人员将无法再访问项目中的版本,但仍可能在一段时间内保留对这些版本的访问权限。

如果您有大量测试人员,则应考虑使用群组。

使用 Fastfile

# Use lanes to add or remove testers from a project.
lane(:add_testers) do
  firebase_app_distribution_add_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) add testers to this group
  )
end

lane(:remove_testers) do
  firebase_app_distribution_remove_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) remove testers from this group only
  )
end
# Add or remove testers with the terminal
$ fastlane add_testers
$ fastlane remove_testers

运行 Fastlane 操作

fastlane run firebase_app_distribution_create_group display_name:"QA Team" alias:"qa-team"
fastlane run firebase_app_distribution_add_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_remove_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_delete_group alias:"qa-team"

您还可以使用 --file="/path/to/testers.txt(而非 --emails)指定测试人员。

firebase_app_distribution_add_testersfirebase_app_distribution_remove_testers 任务也接受以下参数:

  • project_name:您的 Firebase 项目编号。
  • group_alias(可选):如果指定,则将测试人员添加到指定的群组(或从指定的群组中移除测试人员)。
  • service_credentials_file:Google 服务凭据文件的路径。
  • firebase_cli_tokenFirebase CLI 的身份验证令牌。

service_credentials_filefirebase_cli_token 与上传操作使用的参数相同。

第 5 步(可选):获取有关应用最新版本的信息

您可以使用 firebase_app_distribution_get_latest_release 操作在 App Distribution 中获取有关应用最新版本的信息,包括应用版本信息、版本说明和创建时间。用例包括自动增加版本编号以及沿用上一版本中的版本说明。

该操作的返回值是用于表示最新版本的哈希值。 您也可以使用 lane_context[SharedValues::FIREBASE_APP_DISTRO_LATEST_RELEASE] 获取此哈希值。如需详细了解此哈希值中的可用字段,请参阅 REST API 文档

参数

firebase_app_distribution_get_latest_release 参数
app

只有在您的应用不包含 Firebase 配置文件 (GoogleService-Info.plist) 时才需要此参数:您应用的 Firebase 应用 ID。您可以在 Firebase 控制台的“常规设置”页面中找到此应用 ID。

app: "1:1234567890:ios:0a1b2c3d4e5f67890"
googleservice_info_plist_path

指向 GoogleService-Info.plist 文件的路径(相对于已归档产品的路径)。默认设置为 GoogleService-Info.plist

如果未指定 app 参数,系统会使用此文件来获取应用的 Firebase 应用 ID。

firebase_cli_token

使用 Firebase CLI 对 CI 环境进行身份验证时输出的刷新令牌(如需了解详情,请参阅将 CLI 与 CI 系统配合使用)。

service_credentials_file

您的 Google 服务账号 json 文件的路径。如需了解如何使用服务账号凭据进行身份验证,请参阅前面的文档。

service_credentials_json_data

Google 服务账号 json 文件内容。如需了解如何使用服务账号凭据进行身份验证,请参阅前面的文档。

debug

布尔值标志。您可以将其设置为 true 以显示详细的调试输出。

后续步骤