2026 年企業 Mac CI 資源池:並發 codesign、Keychain 與 Provisioning Profile 隔離

多 Job 同機 codesign 常見三條衝突線:Keychain 解鎖與分割列表互相踩、Provisioning Profile 依 UUID 落碟被並行改寫、共用 DerivedData 與輸出樹造成快取污染。把身分、授權、工作區拆開,才能把並行度寫進容量表。資源池見 企業 Mac CI 資源池選型;併發矩陣見 GitHub Actions 多機協作手冊

一、衝突面:並發 codesign 在爭什麼

Keychain 決定憑證可讀性,解鎖逾時會讓整批簽章排隊;Provisioning Profile 在系統與私有目錄並存時仍可能 race。工作區若共用 -derivedDataPath 或 IPA 樹,增量索引會互相覆寫。先指定 Owner;身分沙箱、Profile 私有路徑、一 Job 一路徑前綴。

二、Keychain 與 Profile:兩種常用檔位

Runner 級:每 Runner 獨立 macOS 使用者,鑰匙圈長期保存、輪換簡單,但帳號治理成本高。Job 級:流水線內建暫存鑰匙圈、匯入 p12、設定分割列表後刪除;吞吐高但腳本須冪等。Profile 複製到 Job 私有目錄並在 xcodebuildexportOptions.plist 明確指定;清理以 UUID 精準刪除。

三、工作區與落地步驟

以 Job ID 作目錄前綴,包住原始碼、DerivedData、簽章暫存與 IPA;always() 做冪等清理。簽章路徑不可跨 Job 共用;遠端快取與可寫簽章樹分層。

  • 寫死 Keychain 檔位、解鎖逾時與分割列表命令,並在壓測日誌驗證。
  • Profile 私有路徑+精準清理;xcodebuild 強制獨立 -derivedDataPath

四、對比 FAQ(精簡)

  • 能共用登入鑰匙圈嗎?多 Job 並發不建議;改分使用者或暫存鑰匙圈。
  • 自動簽章還要隔離 Profile 嗎?要,磁碟解析與快取仍可能競態。
  • 先並行還是先隔離?隔離優先。

在 Mac mini 上把簽章池跑穩

企業 Mac CI 資源池多半長時間、無人值守、I/O 敏感macOS 與 Xcode 版本一致能壓低簽章與編譯的偶發長尾;Mac mini 的 Apple Silicon 記憶體頻寬利於多 Job 並行,待機約 4W 適合 7×24 池化。Gatekeeper、SIP、FileVault 疊出安全邊界。

Runbook 定稿後若要驗節點,可先打開 Macstripe 首頁對照區域。Mac mini M4 仍是 2026 年擴容簽章池的高性價比起點;隔離做對,再讓並行度用資料說話。