決策矩陣 · Fastlane Match · 共享遠端 Mac · iOS CI

2026年小團隊共享遠端 Mac 決策矩陣:Fastlane Match 憑證倉庫並發拉取、鑰匙圈分區與 Codesign 佇列逾時參數清單

2026.05.19 Meshmac 約 9 分鐘閱讀

💻 2–8 人 iOS 團隊共用一台共享遠端 Mac時,Fastlane Match 憑證倉並發拉取撞車、分發憑證誤入login 鑰匙圈Codesign 佇列無逾時掛死,是發版前最常見的三類浪費。本文給出決策矩陣、可抄flock/佇列參數表五步落地;上線前請對照首頁SSH 與 VNC 選型指南共享構建機權限隔離 FAQ

痛點拆解

  1. 並發拉取:兩車道同時 match development,加密 git 倉 mid-push 損壞,憑證「隨機消失」。
  2. 鑰匙串串味:分發憑證記進 GUI login,SSH 無頭任務卻讀 lane 檔,codesign 報 identity 找不到。
  3. 佇列假死:flock -w 大於作業逾時,無人記錄鎖持有者,歸檔掛一整夜。

收斂目標:讀可並行、寫必串行lane 鑰匙圈與互動工作階段分離;鎖等待小於作業逾時

車道佈局 vs 爆炸半徑(決策矩陣)

模式 Match + lane 鑰匙圈 僅共用 login
並發拉取 shallow + 讀鎖;寫入 flock 串行 push 競態;憑證回滾難查
Codesign 佇列 單機一歸檔;CI 車道排隊 雙 archive 搶 USB 授權
MeshMac 2–8 席 池化 M4 構建機預設 僅實驗室;勿上生產

① Match git 並發與 shallow 策略

🚀 把憑證倉當生產資料:讀可重疊,寫不可

  • Shallow:CI 用 git clone --depth 1;Match 前 git fetch --depth 1 origin $BRANCH
  • 讀並發:無寫鎖時允許多路 match readonly/development fetch。
  • 寫串行:match developmentappstorenuke 共用一個 match-repo.lock
MATCH_GIT_URL=git@github.com:org/certificates.git
export GIT_SSH_COMMAND="ssh -o ControlMaster=auto -o ControlPath=/tmp/ssh-%r@%h:%p"
flock -w 180 /var/run/meshmac/match-repo.lock \
  fastlane match development --readonly false

② login keychain 分區

SSH 分帳戶不能替代簽名分區;圖形 VNC 與無頭 CI 須分鑰匙圈(見共享構建權限隔離)。

  • Lane 檔案:/srv/keychains/team-a-ci.keychain-db 每應用或租戶一份。
  • 解鎖視窗:僅在 Codesign 包裝器內 security unlock-keychain
  • 環境變數:MATCH_KEYCHAIN_NAMEMATCH_KEYCHAIN_PASSWORD 寫入 lane,勿寫共用 login。
security list-keychains -s "$LANE_KEYCHAIN" login.keychain-db
security set-keychain-settings -lut 21600 "$LANE_KEYCHAIN"
security find-identity -v -p codesigning "$LANE_KEYCHAIN"

③ 構建鎖與逾時(flock/佇列參數清單)

資源 flock/佇列 作業逾時
Match git 寫入 flock -w 180 match-repo.lock lane 步 15 分鐘封頂
Codesign/archive flock -w 600 codesign.queue 歸檔 45–90 分鐘
DerivedData 熱路徑 flock -w 60 dd-sync.lock 整合 35–60 分鐘
佇列深度 每 lane 最多 12 作業 磁碟餘量低於 15% 即 fail-fast
flock -w 600 /var/run/meshmac/codesign.queue \
  xcodebuild -workspace App.xcworkspace -scheme Release archive

④ 失敗重試與稽核

  • 重試:git fetch 瞬時錯誤最多 2 次;鑰匙圈 unlock 失敗零重試
  • 稽核 JSON:每作業輸出 lanematch_git_shakeychain_pathlock_wait_ms
  • 告警:連續三次歸檔 lock_wait p95 超過 120 秒即值班。

五步落地(MeshMac 池化 Mac)

  1. 凍結寫入:排空 archive;共享機構建機禁止 match nuke
  2. Shallow 基線:釘選 MATCH_GIT_BRANCH;在 /var/run/meshmac/ 安裝 repo 鎖。
  3. Provision 鑰匙圈:按 lane 建 .keychain-db;每 lane 僅匯入一次分發身份。
  4. 接佇列:archive 外包 flock codesign.queue;逾時取自上表。
  5. 開稽核:JSON 日誌接 Webhook;重放一次 unlock 失敗演練再開池。

可引用參數(評審可直接摘)

  • 並發 Match 唯讀 + shallow 可把池化 M4 冷啟動 git 時間壓到分鐘級且不放大寫競態。
  • Lane 鑰匙圈 讓分發憑證遠離 GUI login,與SSH/VNC 分車道一致。
  • 雙車道共機時 Codesign flock -w 600 配 45–90 分鐘歸檔逾時是合理預設起點。

⑤ FAQ

兩人能同時跑 match development 嗎?

僅當 shallow fetch、讀並發且寫入經 match-repo.lock 串行;禁止並行 nuke 或改密。

CI 該解鎖 login.keychain 嗎?

否。用 lane 檔並在 Codesign 包裝器內 unlock;VNC 圖形簽名用獨立帳戶。

何時加第二台 MeshMac 節點?

調參後 lock_wait p95 仍超過 2 分鐘,或需並行多歸檔;按 lane 拆節點而非無限拉長 flock(見多節點負載與故障轉移)。

總結

MeshMac 多節點可在佇列飽和時為每條簽名車道分配獨立 Apple Silicon;單機先串行 Match 寫、分區鑰匙圈、公布 flock 逾時。遠端接入與帳戶邊界見共享構建權限 FAQ;節點規格見套餐頁首頁

首頁 · 幫助 · 套餐 · 部落格

立即租用