使用 Fastlane 管理開發憑證

Kaylla Wen
6 min readMay 18, 2021

先來說說憑證,可到 developer 網站中的 Certificates, Identifiers & Profiles 查看。

Automatically manage signing

  1. 開發憑證 development certificate

開發者從 Xcode Account 中登入 Apple ID, Xcode 即會為你的帳號產生一個 development certificate。

2. 生產憑證 distribution certificate

上架 App 的時候會需要用到的憑證。當使用 Xcode 的 Product > Archive 上傳 App 選擇 auto signing 的情況下,developer 中沒有 distribution 憑證的話,可以透過 Xcode 幫你建立一個。

這個 distribution certificate 包含了目前這台上傳 App 的 Mac 的 private key,最好是保存起來,如果需要從別的 Mac 上傳 App,需要安裝這個包含 private key 的 certificate。

一般生成憑證的步驟:需要生成好 CSR(.certSigningRequest) 檔,拿著 CSR 去產生憑證。

  1. 建立 Distribution certificate
選擇 Apple Distribution 然後 Continue
選擇妳生成出來的 CSR 並且 Continue
建立好了

記得 Download 並且在 Keychain 中導出含有私鑰的 .p12,並且備份好。

Manually manage signing

有不少因為勾選 auto signing 然後產生一堆問題。如果使用手動管理憑證,要對每台 Mac 都手動給它 certificate 也是蠻累的,想想如果團隊內有 10 幾個人,然後每次有新人來就要找出 certificate 給他。而且在 developer 中憑證個數是有上限的,當自動生成的數量一多,會造成互踢的情況。

所以我選擇使用 fastlane 來管理這些麻煩的憑證。

{ 乾淨的開發者帳號:使用 nuke & match }

  1. 使用加密 repo 來存放憑證 ,對應的資料架結構如下:必須包含 certs 與 profiles 這兩個資料夾。

官方說明:

The certs folder contains all certificates with their private keys

The profiles folder contains all provisioning profiles

資料夾結構(底下不需手動添加 .cer 與 .p12)

然後 push 到 master。基本上會用到的就 master,如果你有多帳號或多 target 可以使用不同的 branch 來管理不同的憑證。

2. 在 terminal 下執行 ,將憑證清理乾淨

fastlane match nuke developmentfastlane match nuke distribution

3. 接著執行

fastlane match developmentfastlane match adhocfastlane match appstore

fastlane 會自動幫你建立好開發與生產的憑證,包含 .cer 與 .p12,並同步更新 repo 底下的檔案。

如果說,你的開發者帳號是與其他 App 共用,且 certificate 已經達上限了,該怎麼辦呢?或者無法使用 nuke 呢?或者你根本沒有權限可以 access 開發者帳號,你只能拿到一個 .cer 檔。

那就必須取得開發者帳號上特定的 certificate 來建立 provision profile 了。

{ 使用存在的 .cer 來 match 開發者憑證 }

首先,你仍需準備一個加密 repo 來存放憑證 ,對應的資料架結構如下:包含 certs 與 profiles 這兩個資料夾。

  1. import 下載的 .cer 至 keychain
  2. export 需要的 .p12
Export your certificate with private key

請不要為你的 p12 添加任何密碼(password)

現在你會擁有兩個檔案:.cer 跟 .p12

這邊我將分別將他們命名為 certificates.cer 與 certificates.p12 方便後續說明

3. 再來,請為這兩個檔案進行加密(Encrypt)

openssl enc -aes-256-cbc -k "ENCRYPT_WITH_PASSWORD" -in "certificates.cer" -out "certificates.new.cer" -a -e -saltopenssl enc -aes-256-cbc -k "ENCRYPT_WITH_PASSWORD" -in "certificates.p12" -out "certificates.new.p12" -a -e -salt

ENCRYPT_WITH_PASSWORD 是指之後執行 match 指令要輸入的密碼,團隊中成員第一次使用 match 下載憑證時輸入的密碼。請自行替換~

4. 請把由指令產生的 certificates.new.cer 與 certificates.new.p12 重新命名成你的 certificate ID。

certificate ID 可以由 apple developer 網址中找到。

點擊開發者帳號底下已存在的 certificate,上方網址列中最後的序號就是 certicate ID

5. 將命名好的 .cer 跟 .p12 推上 repo

6. 此時可以使用 fastlane match 來產生對應的 provision profiles 了

(下一步:用 fastlane 下載憑證…)

--

--

Kaylla Wen

簡單的紀錄日常生活,以及在工程師開發上的遇到的事情。如果發現有問題,謝謝你告訴我一聲:)