1. 事前準備
在本程式碼研究室中,您將瞭解如何使用 Firebase 應用程式發布和 fastlane 外掛程式向測試人員發布 iOS 應用程式、收集測試裝置 UDID,並將這些裝置註冊到應用程式的佈建設定檔,以便快速將 Ad Hoc 版本提供給測試人員。
課程內容
- 如何使用 Firebase 應用程式發布和 fastlane 上傳 iOS 預先發布版應用程式 (Ad Hoc) 並發布給測試人員。
- 如何申請成為測試人員,並在測試裝置上下載已發行的應用程式。
- 如何使用 App Distribution 的 fastlane 外掛程式匯出測試裝置 UDID,快速註冊測試裝置。
- 如何更新應用程式的佈建設定檔,並重新上傳應用程式進行發布。
事前準備
- Google 帳戶
- 已安裝 XCode 11.7 以上版本的 Apple 電腦
- 內建於 Xcode 的 Ad Hoc 預先發布版 iOS 應用程式
- 付費的 Apple 開發人員帳戶
- 用於測試的實體 iOS 裝置。
iOS 模擬器應用程式適用於本程式碼研究室的大部分內容,但模擬器無法下載版本。
您還是可以檢查設定是否成功按鈕,即可開啟「應用程式發布測試人員」網頁應用程式。
2. 開始使用
設定百貨公司
應用程式發布功能已與 Fastlane 整合,方便您自動發布應用程式的預先發布版本。應用程式發布功能會與 fastlane 設定整合。
- 安裝並設定Fastlane。
- 在設定期間,於專案的根目錄中執行
fastlane init
,然後選擇「手動設定」。您會看到名為fastlane
的子目錄,其中含有Fastfile
、Appfile
和Pluginfile
,可用來設定 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 建構應用程式
建構應用程式
- 在
./fastlane/Appfile.
中為 fastlane 設定一些全域變數,包括應用程式 ID 和 Apple ID:
app_identifier("<your app's bundle identifier>")
apple_id("<your Apple id>")
- 將以下內容新增至
./fastlane/Fastfile
,即可建立您的第一條車道,並使用 fastlane 的build_app
動作 (也稱為gym
) 建構應用程式:
default_platform(:ios)
lane :build do
build_app(export_method: "ad-hoc")
end
- 簽署要發布的應用程式。
在本程式碼研究室中,您將使用 get_certificates
(也稱為 cert
) 管理自己的認證和設定檔,這會在本機產生簽署憑證,並將所有內容儲存在 macOS 鑰匙圈。但一般來說,建議您使用「Fastlane」 sync_code_signing action
(也稱為 match
) 功能,安全地管理團隊的程式碼簽署憑證和設定檔。
lane :build do
get_certificates()
build_app(export_method: "ad-hoc")
end
- 使用
get_provisioning_profile
動作 (也稱為sigh
) 為應用程式設定佈建設定檔。以便與測試人員分享應用程式。
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true)
build_app(export_method: "ad-hoc")
end
- [選用] 如果您從未執行過應用程式,請執行下列指令,在 Apple Developer Console 建立應用程式:
$ fastlane produce --skip_itc
- 最後,以在車道的方向上建構應用程式。
系統會提示你輸入 Apple ID、密碼 (儲存在「鑰匙圈」中的密碼),以及應用程式軟體包 ID。
$ fastlane build
如有任何問題,請參閱 fastlane 疑難排解指南。
4. 將應用程式上傳至 Firebase
應用程式已建立完成,現在可以將應用程式上傳到「應用程式發布」。
建立及設定 Firebase 專案
- 登入 Firebase 帳戶。
- 在 Firebase 控制台建立或新增專案,然後將專案命名為「UDID Export Codelab」。
您不必為這項專案啟用 Google Analytics。
- 按一下 [Create Project]。
將 iOS 應用程式加入專案
- 按一下 iOS 圖示建立新的 Firebase iOS 應用程式,並輸入應用程式的軟體包 ID。
- 略過後續步驟,然後按一下「繼續前往主控台」。稍後您將會在應用程式中加入 SDK。
您現在可以在「專案總覽」頁面存取專案和應用程式。
啟用應用程式發布功能
- 發行期間,以及在「監控」部分,按一下「應用程式發布」。
- 接受條款後,按一下「開始使用」來啟用應用程式發布功能。
設定在車道的配送服務
- 在 iOS 專案的根目錄執行下列指令,將應用程式發布新增至 fastlane 設定。
如果指令提示您選擇選項,請選取「Option 3: RubyGems.org」:
$ fastlane add_plugin firebase_app_distribution
- 確認外掛程式已安裝:
$ fastlane
輸出內容應會在已安裝的外掛程式清單中顯示 fastlane-plugin-firebase_app_distribution
。
- 確認外掛程式已安裝後,選擇選項 0 以取消。
驗證 Firebase 專案
如要使用 fastlane 外掛程式,您需要先驗證 Firebase 專案。
- 執行下列指令,將 CLI 連結至 Google 帳戶:
$ firebase login
- 指令列印驗證連結後,請在瀏覽器中開啟連結。
- 畫面上出現提示時,請登入 Google 帳戶,並授予 Firebase 專案的存取權。
發布應用程式
現在可以發布應用程式了。
- 在
./fastlane/Fastfile
頂端定義名為firebase_app_id
的變數。將<your_app_id>
替換成您所建立應用程式的 Firebase 應用程式 ID (可在專案設定頁面中找到)。
Fastfile
是以 Ruby 編寫,因此請使用 Ruby 語法來定義變數。
firebase_app_id = "<your_app_id>"
- 新增名為
distribute
的新車道,以呼叫車道,然後使用firebase_app_distribution
動作發行應用程式。
lane :distribute do
build
firebase_app_distribution(
app: firebase_app_id,
release_notes: "Try out this app!",
)
end
- 跑到全新賽道,建構應用程式並建立發行版本。
$ 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 控制台後,就會看到應用程式的新版本。
5. 邀請測試人員下載應用程式
測試人員接受測試 Ad Hoc 版本的邀請時,系統會要求他們共用 UDID 的權限。如果同意,「應用程式發布」會收集裝置資訊,並透過電子郵件通知您。在本節中,您要將自己新增為測試人員,以便下載及測試您發行的應用程式。
將自己新增為版本測試人員
- 在 Fastfile 頂端的
firebase_app_id
下方,建立變數以保留測試人員,並提供您自己的電子郵件地址以及其他您想嘗試的電子郵件地址。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
- 套用 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
- 再次行駛車道。
$ fastlane distribute
踏上車道後,你新增的測試人員會收到來自應用程式發布活動的邀請電子郵件,通知他們有可用的新版本。現在只要前往 Firebase 控制台,就能在應用程式版本底下查看新增的測試人員。
由於您已提供電子郵件地址,因此您將收到 Firebase 應用程式發布的電子郵件,邀請您測試應用程式。你現在已是第一位測試人員!繼續按照下一節的說明在測試裝置上設定測試人員。
註冊測試裝置
測試人員需要在測試裝置上登入 Google,才能存取您受邀測試的應用程式版本。由於測試版本是 Ad Hoc 版本,因此您也必須安裝 Firebase 設定檔來註冊測試裝置。之後可用的版本,可以透過應用程式發布測試人員的網頁應用程式存取,並使用已新增至裝置主畫面的網站片段。
- 在 iOS 測試裝置上開啟從 Firebase 應用程式發布傳送的電子郵件,然後輕觸「開始使用」連結。請務必在 Safari 中開啟該連結。
- 你現已進入「應用程式發布」測試人員網頁應用程式。在隨即顯示的頁面中,使用你的 Google 帳戶登入,然後輕觸「接受邀請」。
- 系統隨即會顯示您受邀加入的版本。輕觸任一版本下方的「註冊裝置」。
- 當系統提示時,請下載 Firebase 設定檔,然後在「設定」應用程式中安裝設定檔。
安裝設定檔會授予 Firebase 權限:
- 收集裝置的專屬裝置 ID (UDID) 來註冊測試裝置。
Firebase 傳送電子郵件給 Firebase 專案的所有擁有者和編輯者,並附上測試裝置的 UDID。
- 將網路片段安裝在測試裝置的主畫面。網站片段會開啟應用程式發布測試人員網頁應用程式,讓您安裝及存取所有測試應用程式。
在「應用程式發布測試人員」網頁應用程式中,您的測試裝置現已註冊應用程式版本。
與 Firebase 共用測試裝置的 UDID 後,您現在可以繼續成為開發人員。應用程式發布資訊主頁的「測試人員」分頁現在會顯示在應用程式版本下方,狀態為「已接受」:
在下一節中,您會將裝置 UDID 新增至應用程式的佈建設定檔,然後建構與測試裝置相容的應用程式版本。
匯出測試人員裝置 UDID
Firebase 傳送電子郵件給開發人員,內含測試裝置的 UDID。應用程式發布功能可讓您直接將多部新裝置 UDID 匯出為原始文字檔案,輕鬆一次收集。
- 如要匯出所有 UDID,請開啟「測試人員與」群組標籤。
- 按一下「匯出 Apple UDID」。
檔案應包含測試裝置的 UDID。
Device ID Device Name Device Platform
1234567890 udid.codelab.tester@gmail.com - iPhone SE 2nd Gen ios
您也可以透過指令列使用 fastlane 匯出 UDID,這些作業將在下一節進行。
6. 更新應用程式的佈建設定檔並重新建構
現在請將測試裝置的 UDID 新增至應用程式的佈建設定檔,重新建立適用於裝置的應用程式版本,並發布新版本。
新增 UDID 匯出車道
- 在 Fastfile 頂端新增另一個變數,並設為測試人員的檔案路徑系統將會下載裝置的 UDID。
firebase_app_id = "<your Firebase app ID>"
app_testers = [
"your@email.com",
"another@email.com",
]
tester_udids_file = "tester_udids.txt"
- 設定新車道,使用「應用程式發布」外掛程式的 UDID 匯出動作下載測試人員 UDID,就像從控制台執行一樣。
lane :download_udids do
firebase_app_distribution_get_udids(
app: firebase_app_id,
output_file: tester_udids_file,
)
end
- 執行下列車道即可下載 UDID。
$ fastlane download_udids
- 列印下載的檔案,當中應包含測試裝置 UDID。
$ cat tester_udids.txt
新增裝置至 Apple Developer Console
- 建立下列車道,將 UDID 新增至 Apple Developer Console 的裝置清單,並使用 fastlane 的
register_devices
動作將 UDID 新增至佈建設定檔:
lane :add_new_devices do
register_devices(devices_file: tester_udids_file)
end
- 然後跑車:
$ fastlane add_new_devices
您應該會在開發人員控制台的裝置清單中看到新裝置。
將裝置新增至佈建設定檔
- 將
force
引數新增至build
車道的佈建設定檔步驟,以便在每次建構時強制要求其取得新裝置。
lane :build do
get_certificates()
get_provisioning_profile(adhoc: true, force: true)
build_app(export_method: "ad-hoc")
end
重新執行車道來建造和上傳
現在,請設定新車道的「distribute
」車道,以便將裝置新增至佈建設定檔、重新建立應用程式,然後再發布。
- 呼叫
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
- 走
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,因此可以安裝到測試裝置上。
- 在測試裝置上,使用電子郵件中的連結或裝置主畫面上的圖示,返回「應用程式發布測試人員」網頁應用程式。
前往 UDID 程式碼研究室應用程式時,您會看到該版本已經可供下載。
- 如果您使用的是實體裝置,請按下下載、安裝並執行應用程式!
7. 恭喜
現在您已經設定應用程式發布和 fastlane,可以自動執行預先發布版測試程序。現在,如果您要邀請其他測試人員,或將他們的 UDID 加到應用程式,只需執行一個指令:fastlane distribute
。
如此一來,您就不必再逐一向測試人員收集 UDID,或前往 Apple 開發人員控制台更新裝置清單或佈建設定檔。您甚至不需要開啟 XCode!
這項工作流程易於設定,在持續整合環境中每小時或每天執行一次。
延伸閱讀
- 探索 Firebase 應用程式發布的功能,包括 iOS 適用的應用程式內 SDK
- 進一步瞭解快車道
- 使用
match
管理團隊的程式碼簽署功能 - 整合 Fastlane 到 CI