使用 Azure Pipelines 進行 iOS App 自動發布

Jorge K.
Begonia Design 海棠設計
7 min readApr 29, 2020
Xcode

如果 iOS App 要發佈到測試平台提供測試人員下載,開發者必須使用 Xcode 進行 Build , Archive , Export , Upload iPA 到測試平台上,為了減少一連串人工操作,本文使用 Azure Pipelines 實作 iOS App 的自動化發布。

▪︎ 使用情境

  • 當 commit 新內容到 Bitbucket 後,觸發 Azure Pipelines 執行編譯與打包後,上傳到 Visual Studio App Center 並發送 Slack通知,測試者再經由 AppCenter 平台下載測試 App。

▪︎ 使用工具

▪︎ Visual Studio App Center 設定

需要先建立一個 Project 給 Pipelines 上傳 App 用

1. 建立 Token 給 Pipelines 上傳 iPA 檔案用

  • Account Setting > API Tokens > New Token API。
  • 建立之後 Token 只會顯示一次,要好好存起來。
MS App Center Project 產生的 API Token

2. 取得Group ID ,讓 Pipelines 上傳後指定測試群組

a. AppCenter > Project > Distribute > Group > New Group

b. Group > 右上角板手 Group Setting > Group ID

Group ID
Group ID

▪︎ Azure Pipelines 設定

1. 建立 Service Connection

  • Pipelines 對於外部服務的連接設定
  • 設定路徑:Project Setting > Pipelines > Service Connections > New Services
加入 service connection

App Center

  • 自定義 Connection 名稱 ,給設定檔使用
  • Token 填入 App Center 產生的 Token

Bitbucket

  • 與 Bitbucket 驗證連接,使Pipelines 可以存取 Repo

2. 創建 Pipelines

a. 在 Pipelines > New Pipelines > 選擇Code 來源,這邊使用 YAML 設定檔方式

選擇 YAML模式

b. 選擇專案 Repo

選擇專案Repo

c. 建立設定檔,或是選擇已存在的YAML檔案,內容之後也都可以修改

選擇預設YAML範本

d. 這邊會建立一組預設的Xcode Task任務,選擇 Save and Run會出現 Commit 編輯訊息,由於預設設定檔為trigger master,送出後會執行一次 Pipelines 任務,並在專案 Repo 根目錄建立 azure-pipelines.yml 設定檔

若不要執行 Pipelines 任務,可以在 commit 加上 [skip-ci]

送出修改 YAML 的 commit

3. Code Signing

上傳檔案 .p12(Private Key + Certificate) 與 Provisioning Profile

  • Pipelines > Library > Source Files
  • 檔案名稱可以自由命名
上傳p12與描述檔

4. 建立環境變數

為了讓yaml檔讀取p12的密碼,在環境變數中設定

a. 前往已建立 Pipelines > Edit

編輯Pipelines

b. 選擇 Variables

變數設定

c. 建立新的變數名稱與 Value

建立環境變數

假設上傳的 p12 檔案密碼是1234,在此範例 p12pwd = 1234
所以在yaml設定檔中使用 .p12 密碼的變數為 $(p12pwd)

▪︎ YAML 設定檔

  • 每個 Pipelines 所進行任務項目,都是根據根目錄的 azure-pipeline.yaml 設定檔

使用範例

這個設定檔可分成幾個部分來看

  • trigger : 監聽的Repo Branch
  • pool : 編譯的系統環境
  • InstallAppleCertificate@2:載入開發憑證
  • InstallAppleProvisioningProfile@1 : 載入描述檔
  • Xcode@5 : 編譯Xcode專案
  • AppCenterDistribute@3:發佈到App Center

設定檔任務階層概念

  • 設定檔任務中的層級是 Stage > Job > Step > Task
  • 範例:
  • 使用線上編輯就可以看到格式錯誤提示。
  • 每一個 Job 執行結束後會清除產生的檔案

▪︎ Slack 通知設定

  • 安裝 Azure Pipelines 到 Slack
  • 把 @azpipelines 加入到 channel 中
  • 在對話視窗輸入/azpipelines subscribe [pipeline url] 註冊 pipelines
  • 詳細使用可參考 Azure Pipelines with Slack
Pipelines 通知到 Slack

▪︎ 測試者下載

  • 發布完成之後可以在 AppCenter >Project>Distribute > Releases 中看見從 Pipelines 上傳的 iPA 檔案
App Center 已發布內容
  • 隸屬於 AzureGroup 的測試人員,就可以從 email 收到更新連結導到下載頁面,需要登入App Center。
Ad-Hoc下載頁面
  • 由於是ad-hoc方式,測試者手機需要先註冊 UUID 到 provisioning profile

▪︎ 完成

Pipelines 設定完成之後,當 branch 有新的 commit 就會自動部署 iOS App ,不用在 Xcode 進行操作,如有多個專案需要進行部署時,就可省下許多人工。azure-pipelines.yml 設定檔可以組合多種 task 使用,需要其他功能可以再參考官方文件。

▪︎ 文件參考

--

--