運用應用程式發布和 Fastlane 加快發布 iOS 預先發布版的速度

1. 事前準備

4cddd34bd261cea0.png

在本程式碼研究室中,您將瞭解如何使用 Firebase 應用程式發布fastlane 外掛程式,將 iOS 應用程式發布給測試人員、收集測試裝置 UDID,並將這些 UDID 註冊到應用程式的佈建設定檔,以便快速將 Ad Hoc 建構版本提供給測試人員。

課程內容

  • 如何使用 Firebase 應用程式發布和 fastlane,將預先發布的 iOS 應用程式 (Ad Hoc) 上傳及發布給測試人員。
  • 如何註冊成為測試人員,並在測試裝置上下載發布的應用程式。
  • 如何使用 App Distribution 的 fastlane 外掛程式匯出測試裝置 UDID,快速註冊測試裝置。
  • 如何更新應用程式的佈建設定檔,並重新上傳以供發布。

事前準備

  • Google 帳戶
  • 已安裝 XCode 11.7 以上版本的 Apple 裝置
  • 在 Xcode 中建構的臨時預先發布版 iOS 應用程式
  • 付費 Apple 開發人員帳戶
  • 用於測試的實體 iOS 裝置。

iOS 模擬器應用程式適用於大部分的程式碼研究室,但模擬器無法下載版本。

您仍可確認「應用程式發布」測試人員網頁應用程式是否顯示「下載」按鈕,藉此驗證設定是否正常運作。

2. 開始使用

設定 fastlane

應用程式發布與 fastlane 整合,可自動發布應用程式的預先發布版本。應用程式發布會與 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 的 build_app 動作 (也稱為 gym) 建構應用程式,方法是在 ./fastlane/Fastfile 中加入下列內容:
default_platform(:ios)

lane :build do
    build_app(export_method: "ad-hoc")
end
  1. 簽署應用程式以供發布。

在本程式碼研究室中,您將使用 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

您已建構應用程式,現在可以將其上傳至「應用程式發布」了。

建立新的 Firebase 專案

  1. 使用 Google 帳戶登入 Firebase 控制台
  2. 按一下按鈕建立新專案,然後輸入專案名稱 (例如 UDID Export Codelab)。
  3. 按一下「繼續」
  4. 如果系統提示,請詳閱並接受 Firebase 條款,然後按一下「繼續」
  5. (選用) 在 Firebase 控制台中啟用 AI 輔助功能 (稱為「Gemini in Firebase」)。
  6. 本程式碼研究室不需要 Google Analytics,因此請關閉 Google Analytics 選項。
  7. 按一下「建立專案」,等待專案佈建完成,然後按一下「繼續」

將 iOS 應用程式加進專案

  1. 按一下 iOS 圖示建立新的 Firebase iOS 應用程式,然後輸入應用程式的套件組合 ID。

9c26c130a6c42212.png

  1. 略過接下來的幾個步驟,然後按一下「Continue to console」(前往主控台)。您稍後會在應用程式中加入 SDK。

專案和應用程式現在會顯示在「專案總覽」頁面。

66f79cc8a97fa8e9.png

啟用應用程式發布

  1. 在「發布與監控」部分下方,按一下「應用程式發布」
  2. 接受條款後,按一下「開始使用」,即可為應用程式啟用應用程式發布功能。

460213326c2784ae.png

fastlane 中設定發布作業

  1. 在 iOS 專案的根目錄中執行下列指令,將 App Distribution 新增至 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. 邀請測試人員下載您的應用程式

測試人員接受測試 Ad Hoc 版本的邀請時,系統會要求他們授權分享 UDID。如果對方同意,應用程式發布就會收集裝置資訊,並透過電子郵件通知您。在本節中,您將自己新增為測試人員,以便下載及測試發布的應用程式。

將自己新增為版本的測試人員

  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 應用程式發布的電子郵件,邀請您測試應用程式。您現在是第一位測試人員!請繼續閱讀下節,瞭解如何在測試裝置上設定為測試人員。

註冊測試裝置

測試人員必須在測試裝置上登入 Google,才能存取受邀測試的應用程式版本。由於測試版本是 Ad Hoc 發行版本,您也必須安裝 Firebase 設定檔來註冊測試裝置。之後,您就可以透過新增到裝置主畫面的網頁剪輯片段,從 App Distribution 測試人員網頁應用程式存取可用的版本。

  1. 在 iOS 測試裝置上開啟 Firebase 應用程式發布服務傳送的電子郵件,然後輕觸「開始使用」連結。請務必在 Safari 中開啟連結。
  2. 您現在已進入 App Distribution 測試人員網頁應用程式。在顯示的頁面中,登入 Google 帳戶並輕觸「接受邀請」

d833407de251b89f.png

  1. 你現在可以查看受邀參與的發行內容。在其中一個版本下方輕觸「註冊裝置」

fd141215e54a938d.png

  1. 系統出現提示時,請下載 Firebase 設定檔,然後在「設定」應用程式中安裝該設定檔。

安裝設定檔後,Firebase 就能執行下列操作:

  • 收集裝置的專屬裝置 ID (UDID),註冊測試裝置。

Firebase 會傳送電子郵件給 Firebase 專案的所有擁有者和編輯者,內含測試裝置的 UDID。

  • 將網頁剪輯片段安裝到測試裝置的主畫面。網頁剪報會開啟「應用程式發布」測試人員網頁應用程式,方便您安裝及存取所有測試應用程式。

在「應用程式發布」測試人員網頁應用程式中,測試裝置現在已註冊應用程式版本。

fe93d649dfa25877.png

您已將測試裝置的 UDID 分享給 Firebase,現在可以繼續以開發人員身分作業。在應用程式發布資訊主頁的「測試人員」分頁中,測試人員資訊現在會顯示在應用程式版本下方,狀態為「已接受」:

7b9f665a63a384cf.png

在下一節中,您會將裝置 UDID 新增至應用程式的 Provisioning Profile,然後建構適用於測試裝置的應用程式版本。

匯出測試人員裝置的 UDID

開發人員會收到 Firebase 寄來的電子郵件,內含測試裝置的 UDID。您也可以直接從 Firebase 控制台匯出原始文字檔,一次收集多個新裝置的 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. 設定新通道,使用 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 開發人員控制台

  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. build 管道的佈建設定檔步驟中新增 force 引數,以便在每次建構時強制選取新裝置。
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 測試人員網頁應用程式。

前往 UDID 程式碼研究室應用程式時,您會看到版本已可供下載。

dad6d03b6ad78746.png

  1. 如果你使用實體裝置,請按下「下載」,然後安裝並執行應用程式!

7. 恭喜

您已設定應用程式發布和 fastlane,可自動執行預先發布測試程序。現在,如要邀請其他測試人員,或將他們的 UDID 新增至應用程式,只要執行 fastlane distribute 指令即可。

因此,您不必再個別向測試人員收集 UDID,也不必前往 Apple 開發人員主控台更新裝置清單或 Provisioning Profile。你甚至不必開啟 XCode!

這個工作流程設定簡單,可在持續整合環境中每小時或每天執行。

延伸閱讀