iOS 簽名 2026年5月20日 約 17 分鐘 證書續期 描述檔

2026 租雲端 Mac 續 iOS 證書
與描述檔怎麼做?

三類到期對象 · SSH/VNC 決策表 · ASC→鑰匙串→Xcode · 20 分鐘驗收

在租用遠程 Mac 上透過 VNC 處理 Xcode 簽名、證書與描述檔續期的工作場景

沒有自有 Mac、卻在租用雲端節點上維護 iOS 簽名鏈的獨立開發者與外包團隊,常在郵件提醒「證書即將過期」時陷入兩難:該先登入 Apple Developer 點續期,還是先在 Xcode 裡下載描述檔?更糟的是,ASC 顯示已更新,本地卻仍報 Signing certificate not foundProvisioning profile expired——於是在 SSH 裡反覆刪 DerivedData,把按小時計費的租期燒成零產出。本文以「到期續期、吊銷後重簽、續期後仍 Signing 失敗」為單一主線:先釐清三類到期對象,再給僅 SSH / SSH+VNC 分段 / 全程 VNC決策表、ASC → 續期 → 鑰匙串 → Xcode推薦順序與八步 Runbook續期後仍失敗的分界,以及20 分鐘可勾選驗收表;並與站內《遠程 Mac 首次使用清單》《系統時間與證書》《Fastlane Match》《TestFlight 外測》《緊急上架》互鏈。

01

先分清三類「到期」:別在錯誤層級上續費

租用遠程 Mac 時,最容易浪費時間的是把三種不同生命週期混為一談。它們的修復入口、是否需要 VNC、以及對已上架構建的影響都不相同:

  1. 01

    Apple Developer 證書(Certificate):分發證書(Apple Distribution / iOS Distribution)與開發證書(Apple Development)在開發者後台有明確到期日。過期後,依賴該證書簽名的所有描述檔都會連帶失效;僅替換 .mobileprovision 無法根治。

  2. 02

    描述檔(Provisioning Profile):綁定 App ID、Team、設備列表(開發用)與 Capability。證書仍有效時,描述檔可單獨過期;Xcode 常提示 profile doesn't include signing certificate 或設備未包含。此時應在 ASC/Developer 刷新描述檔並讓 Xcode 重新下載,而非盲目 Revoke 證書。

  3. 03

    本機鑰匙串會話(Keychain session):證書與私鑰已匯入,但未解鎖登入鑰匙串、未對 Xcode 點「始終允許」,或 SSH 用戶與 VNC 桌面用戶不一致,會表現為「後台明明有效、本地卻找不到身分」。這類問題不是 ASC 續期能解決,必須在圖形會話修復授權。

  4. 04

    吊銷(Revoke)與續期(Renew)的差異:續期通常生成新證書 + 新私鑰,舊證書在寬限期後不可用;吊銷則立即讓舊簽名鏈失效。團隊若用 Match,應在變更前確認 Git 倉庫與 CI 只讀節點,避免一半機器仍拉舊檔。

  5. 05

    租用邊界:雲端節點上的鑰匙串是會話資產;租期結束若未導出 .p12 或未把 Match 倉庫當唯一真相源,換機後會重演「郵件又說快到期」的恐慌。續費與換節點請對照《續費與換節點備份》

常見誤判:看到 Xcode 紅字就 Revoke 所有證書。若只是描述檔過期或本機鑰匙串未授權,Revoke 會迫使全隊重新簽名,在租用計費環境裡成本極高。

實務上建議在工單標題寫清層級,例如「L1-cert-expiry」「L2-profile-only」「L3-keychain-ui」,避免值班同時改三層導致無法回滾。

02

SSH / VNC 決策表:什麼能在終端做、什麼必須開桌面

下列矩陣按任務 → 推薦接入 → 典型失敗信號 → 常見誤判排列,可直接貼進 Runbook。原則與《Organizer 與 Transporter》一致:涉及 Apple ID、鑰匙串對話框、Xcode Accounts 圖形刷新的步驟,應標記為 needs-vnc

任務推薦接入典型失敗信號常見誤判
在 Developer 後台續期/建立證書瀏覽器(本機或 VNC Safari)2FA 收不到碼以為 SSH 能代替網頁
下載並安裝 .cer / .p12VNC(雙擊 + 鑰匙串)import 成功但 codesign 找不到裝進 System 而非 login
Xcode → Settings → Accounts 刷新VNCSSH 裡 session 無 Team只重裝 CLT
Signing & Capabilities 自動簽名切換VNC自動簽名灰掉手改 project.pbxproj
security find-identity 探針SSH 或 VNC 終端列表為空誤判為證書未續
手動安裝 .mobileprovisionSSH(拷貝到目錄)+ VNC 驗證UUID 仍指向舊檔未刪 ~/Library/MobileDevice 舊檔
fastlane match / sighSSH(倉庫已配置)掛起無輸出其實是鑰匙串彈窗
Revoke 後全隊重簽SSH 編排 + VNC 抽樣驗收CI 與本地不一致只改一台雲端機

經驗法則:ASC/Developer 已顯示新證書,但 find-identity 仍只有舊 CN——先查用戶是否一致、鑰匙串是否解鎖,再查是否下載到新描述檔;不要在第三層就 Revoke。

03

推薦順序:ASC → 續期 → 鑰匙串 → Xcode(八步 Runbook)

在租用節點上,建議固定以下順序,把「需要點按」的步驟集中在一次 VNC 會話完成,減少來回切換:

  1. 01

    凍結變更窗口:通知團隊暫停 Release 構建;若用 Match,確認無人同時 match nuke。先對照時間與 NTP,排除「尚未生效」假陽性。

  2. 02

    Developer / ASC 側續期:Certificates, Identifiers & Profiles 中對過期項執行 Renew 或建立新證書;記錄新證書 Serial / 到期日。若曾洩漏私鑰,選 Revoke 並走重建流程,而非續期。

  3. 03

    刷新描述檔:對受影響 App ID 重新 Generate Profile;確認 Capability(Push、App Groups 等)與工程一致。下載 .mobileprovision 備份到密鑰管理系統。

  4. 04

    VNC 匯入私鑰:雙擊 .p12,選擇登入鑰匙串,密碼正確;在「允許 Xcode 存取」對話框選始終允許。詳見《遠程 Mac 證書配置》《Xcode 簽名圖形指南》

  5. 05

    Xcode Accounts:Settings → Accounts → 選 Team → Download Manual Profiles 或依團隊規範啟用 Automatic Signing。確認無黃色警告。

  6. 06

    工程側對齊:Target → Signing 選正確 Team;若用手動描述檔,比對 UUID 與剛下載檔案一致。清理過期 ~/Library/MobileDevice/Provisioning Profiles 中同名舊檔(可先備份)。

  7. 07

    煙測構建:先 Debug 真機或模擬器,再 Release Archive;Match 團隊在此步執行 match appstore 或 readonly 同步。

  8. 08

    證據留存:截圖 Accounts 頁、find-identity 前幾行、Archive 成功時間戳;若要上傳,接上傳決策表

bash
# 與 VNC 同一 macOS 用戶執行(SSH 或桌面終端均可)
whoami
date
/usr/bin/security find-identity -v -p codesigning | head -n 20
ls -lt ~/Library/MobileDevice/Provisioning\ Profiles | head -n 5

若團隊使用自動簽名,步驟 05–06 可由 Xcode 代勞,但首次在雲端機上仍建議 VNC 親眼確認 Team 與 Bundle ID 無誤。若使用Fastlane Match,應以倉庫為權威:後台續期後執行 match 同步,而非手工改每台機——細節見Match 專文

04

續期後仍失敗:按層級分界,避免「再 Revoke 一次」

下列表格用於值班分流:現象 → 優先懷疑層級 → 建議動作。目標是在租用環境裡最少次數恢復可 Archive 狀態。

現象優先層級建議動作
Certificate not valid yetL0 時間核對 NTP/時區後重試
No signing certificate foundL3 鑰匙串同用戶 VNC 匯入 p12 + 始終允許
Profile doesn't matchL2 描述檔刪舊 UUID、重新下載
find-identity 有證書但 Archive 失敗L2/L3比對 profile 內嵌證書 CN 與 identity
僅 CI 失敗、本地成功用戶/鑰匙串統一 Runner 用戶與 Match readonly
續期後全員失敗L1 證書確認是否 Revoke 未同步 Match
Capability 相關錯誤ASC 設定改 App ID 後必須重生描述檔
  • 結論 1:「後台已續、本地仍紅」在租用 Mac 上超過一半是 L3,不是證書沒續成功。
  • 結論 2:Revoke 是最後手段;執行前必須有 Match 備份與全員停機窗口。
  • 結論 3:Apple ID / 2FA 問題應先走《Apple ID 與 ASC 圖形化》,勿與證書續期混在同一工單。
  • 結論 4:續期完成後的第一個 Release Archive應在 VNC 下完成並存證,再交 CI 無人值守。
05

20 分鐘驗收清單與可引用結論

維護窗口建議預留 ≥20 分鐘,在同一 VNC 用戶下逐項勾選;通過後再釋放團隊構建。

核對項操作要點通過標準
用戶一致VNC 用戶 = SSH whoami無跨用戶鑰匙串
Developer 證書後台到期日晚於維護日+30天Serial 與工單記錄一致
描述檔UUID 與工程一致Xcode 無 profile 黃標
find-identity含正確 Distribution CN至少一條 valid
Debug 煙測真機或模擬器 Run安裝成功
ArchiveRelease + OrganizerArchive 成功有時間戳

新開通的雲端節點請先完成首次使用清單再執行上表。續期後若要外測,接外測檢查表;緊急上架場景可並讀《手術室》

延伸閱讀

與本文配套的站內長文

FAQ

常見問題

底層證書仍有效且 Capability 未變,刷新描述檔常可恢復。若證書已過期或被吊銷,必須先在 Developer 續期/重建,再讓 Xcode 下載並落地鑰匙串。

find-identity、匯入腳本、xcodebuild 可在 SSH 執行;2FA、鑰匙串「始終允許」、Accounts 刷新仍需與構建同一用戶的 VNC。

按第四節分界:時間 → 鑰匙串用戶 → 描述檔 UUID → 證書/Match 同步。在未備份前 Revoke 整條倉庫。

已處理完成的構建通常仍可測;新 Archive 必須用新證書重簽。請更新外測檢查表中的構建號與 CI 密鑰。

結語

證書與描述檔續期不是「點一下 Renew 就結束」,而是後台物件、本機鑰匙串、工程設定三層對齊的過程。在按小時計費的雲端 Mac 上,把 VNC 當作簽名鏈的標準介面而非救火通道,才能把續期壓進可預測的 20 分鐘窗口,並在換機、續費時保留可交接的證據。

若你需要按任務租用帶完整桌面會話的物理 Mac,在本文第五節同款表格下完成續期驗收,可透過 VNCMac 開通遠程節點:主按鈕進入購買頁;連接方式可先查閱站點幫助頁中的 SSH 與 VNC 說明。