iOS 開發憑證遷移:2026 更換打包 Mac 驗收清單
📋 本文目錄
症狀:導入 .cer 後,Xcode 仍提示沒有私鑰,或新 Mac 能編譯卻無法 Archive、上傳。
最快解法:不要只搬憑證檔案;遷移包含私鑰的簽名身份,或在新 Mac 重新建立憑證,再逐項核對 Provisioning Profile、App ID、entitlements 和上傳憑據。
這篇適合三類人:準備把舊 Mac 換成遠端 Mac 的獨立開發者、維護無人值守 iOS 打包伺服器的小型團隊,以及舊 Mac 已損壞、需要判斷哪些密鑰可以重建的人。你不需要先理解所有證書類型,但必須按時間線完成驗收,不能把「編譯成功」當成「遷移完成」。
先分清:憑證檔案、私鑰與簽名身份不是同一件事
Apple 的代碼簽名指南明確指出,簽名身份由私鑰加數位憑證組成;憑證本身不是秘密,也不包含私鑰。只有兩者在同一個可用的 Keychain 中,codesign 或 Xcode 才能使用該身份完成簽名。Apple 代碼簽名指南:簽名身份與私鑰
因此,以下檔案不能互相替代:
.cer:公開憑證,通常不能單獨完成簽名。.p12:常用於連同憑證與私鑰匯出的受保護檔案,必須由你設定密碼。.mobileprovision或.provisionprofile:Provisioning Profile,描述 App ID、憑證及可用能力等關係。- App Store Connect API Key、APNs Key:服務或上傳用途的獨立密鑰,不是代碼簽名憑證。
- Xcode 專案設定:包括 Team ID、Bundle ID、Signing & Capabilities、配置名稱及自動簽名狀態。
你需要同時處理三個限制。第一,缺少私鑰時,導入公開憑證不會恢復簽名能力。第二,換了證書後,原有 Profile 可能不再匹配。第三,打包伺服器能讀取密鑰,不代表重啟後仍能安全且自動地讀取密鑰。
第一步:遷移前先鎖定簽名模式與成功標準
先把專案分成以下其中一種模式,不要在遷移途中混用:
- Xcode 自動簽名:由 Xcode 根據團隊、App ID、Capabilities 和可用證書處理 Profile。
- 手動簽名:專案或 Export Options 明確指定證書與 Profile。
- 自動化簽名:由 CI、Shell、fastlane 或其他任務讀取 Keychain、Profile 和上傳憑據。
在舊 Mac 尚未失效時,建立一份脫敏清單,至少記錄:
- Team ID、Bundle ID 及所有 Target。
Signing & Capabilities內已啟用的 App Services。- Debug、Release 使用的簽名模式。
- Apple Distribution 憑證及其對應私鑰。
- 各 Target 的 Provisioning Profile。
- App Store Connect API Key 或 Transporter 使用的上傳方式。
- 打包使用者、Keychain 名稱、任務啟動方式及重啟後行為。
最終成功標準不是「新 Mac 上的 Xcode 已登入」,而是同一個真實專案能完成:
Release Archive → 簽名驗證 → Export → App Store Connect 上傳 → 平台處理完成。
Apple 說明,App Store Connect 收到構建後仍需在平台處理,完成前不能只憑本地 IPA 判定上傳成功。Apple App Store Connect:上傳構建 另外,帳戶角色也會影響上傳操作;使用 API 或後台功能前,應按官方角色權限頁核對目前帳戶安排。
第二步:舊 Mac 上只匯出完整簽名身份
在舊 Mac 開啟 Keychain Access,搜尋與 Apple Distribution 或專案相關的身份。不要只看一行憑證名稱,應展開項目,確認其下方存在對應私鑰。
若看到憑證但沒有私鑰,先不要匯出,也不要以為它可以在新 Mac 上使用。這通常表示私鑰不在目前 Keychain,或該憑證原本是在另一個 Mac 建立。
建議按以下順序處理:
- 在 Keychain Access 確認憑證與私鑰屬於同一個簽名身份。
- 選取完整身份,以受密碼保護的格式匯出。
- 將匯出檔案放入加密儲存位置,密碼不要與檔案放在同一處。
- 另外下載仍有效的 Provisioning Profile。
- 備份專案的簽名設定、Export Options 及自動化環境變數名稱。
- 逐一盤點 App Store Connect API Key、APNs Key 等獨立憑據。
Apple 的官方說明也指出,私鑰不在憑證檔案內;如果更換開發機,必須從原系統匯出私鑰,再在新系統另行導入。Apple Code Signing Guide:遷移私鑰
注意:私鑰檔案、Keychain 密碼、API 私鑰內容和完整 CI 環境變數不可提交到 Git 儲存庫。日誌可以保留,但要先移除 Team 以外的敏感識別資料、Token、路徑中的帳戶名稱與密鑰內容。
第三步:舊 Mac 無法使用時,改走重建與輪換路徑
如果舊 Mac 已無法開機,先查找安全備份,而不是立即撤銷舊證書。可檢查的來源包括:
- 團隊受控的 Keychain 備份。
- 既有打包伺服器或隔離的自動化環境。
- 由負責人保存的受密碼保護簽名身份匯出檔。
- App Store Connect API Key 和 APNs Key 的獨立安全保存位置。
如果只有公開 .cer,不能從它反推出原私鑰。這時應在帳戶權限允許的情況下建立新證書,然後把新證書加入相應 Profile。Apple 提供的憑證簽署請求流程要求透過 Mac 的 Keychain Access 建立 CSR;重新建立時,私鑰會在新環境生成。Apple:建立憑證簽署請求
不要把「清理舊證書」當成一般整理工作。Apple 說明,撤銷證書後,包含該證書的 Provisioning Profile 會變成無效;如非必要,不要在新 Mac 尚未完成驗收前撤銷。Apple:撤銷憑證的影響
第四步:新 Mac 恢復 Keychain,再恢復專案關係
在新 Mac 導入完整簽名身份後,重新開啟 Keychain Access 檢查:
- 憑證是否顯示為有效。
- 憑證項目下是否能展開對應私鑰。
- 私鑰是否允許目標打包工具使用。
- 自動化使用的 Keychain 是否與互動式登入時相同。
接著再處理 Xcode:
- 登入正確的 Apple Developer 團隊。
- 核對 Team ID 與 Bundle ID。
- 檢查每個 Target 的
Signing & Capabilities。 - 確認 entitlements 沒有遺漏或誤指向另一個 App ID。
- 導入或重新下載正確的 Provisioning Profile。
- 若使用手動簽名,核對 Release 配置與 Export Options。
- 若使用自動簽名,確認 Xcode 沒有因快取或團隊變更使用錯誤 Profile。
Provisioning Profile 包含單一 App ID 及分發憑證;啟用或停用 App Services、Profile 過期,或證書被撤銷,都可能要求重新生成。Apple:Provisioning Profile 更新規則 Apple 也說明,自動簽名會根據 Bundle ID、entitlements、註冊裝置及證書設定取得合適 Profile,但設定改變時仍可能需要更新。Apple:編輯、下載或刪除 Provisioning Profile
對無人值守打包機,還要測試 Keychain 的解鎖方式。你可以為專用打包使用者建立受控流程,但不應用移除密碼、廣泛放寬存取權或把私鑰明文放入腳本的方式換取「自動化成功」。
第五步:用真實 Archive 分層驗收,不要只看編譯結果
首次驗收應使用真實專案,而不是新建的空白 App。按以下層次記錄結果:
- Build 成功:代表程式碼可編譯,不代表簽名完整。
- Archive 成功:代表已產生歸檔,但仍需檢查簽名身份與 entitlements。
- Export 成功:代表可按指定方式輸出,但仍不能代替平台驗收。
- 簽名驗證通過:確認產物使用正確 Team、Profile 和證書。
- 上傳完成並處理成功:App Store Connect 顯示構建已完成處理,才算發布鏈路通過。
如果使用命令列,所有專案名稱、路徑、Team ID 和密鑰名稱都使用占位符,例如:
xcodebuild \
-workspace <WORKSPACE_NAME>.xcworkspace \
-scheme <SCHEME_NAME> \
-configuration Release \
-archivePath <ARCHIVE_PATH> \
archive
驗收記錄應保留完整錯誤上下文,但對外分享或提交工單前要脫敏。常見分界如下:
- 「沒有私鑰」:先回到 Keychain Access,不要重新下載
.cer。 - 「Profile 不匹配」:比較 App ID、證書、Capabilities 和 entitlements。
- 「無法上傳」:分開檢查 Export 產物、App Store Connect 角色及上傳密鑰。
- 「構建長時間處理」:查看 App Store Connect 的上傳狀態與錯誤明細。
Apple 的上傳狀態分為 Processing、Failed 和 Complete;若構建長時間停留在 Processing,應按官方狀態說明進一步排查,而不是重複更換憑證。Apple:構建上傳狀態
中段 FAQ:遷移失敗時先判斷是哪一層出錯
上面的流程解決一般遷移路徑;以下情況則要分開處理,避免把上傳密鑰問題誤判成代碼簽名問題。
iOS 開發憑證要怎樣遷移到另一台 Mac?
先在舊 Mac 匯出包含私鑰的完整簽名身份,再於新 Mac 導入。.cer 只代表公開憑證,不能取代私鑰。Provisioning Profile、專案設定和 App Store Connect 上傳憑據要分開備份,不能只搬一個檔案就宣稱遷移完成。
為甚麼導入憑證後 Xcode 仍提示沒有私鑰?
因為導入的可能只是公開 .cer。在 Keychain Access 展開憑證項目,確認下方有對應私鑰;如果沒有,必須從原 Mac 導出完整身份,或在帳戶權限允許時重新建立證書並更新 Profile。
舊 Mac 無法開機,還能恢復 iOS 簽名嗎?
只有在其他安全備份或打包環境仍保存原私鑰時,才可能直接恢復。公開證書不能還原私鑰。找不到私鑰時,要建立新的簽名憑證,並評估哪些 Profile、CI 憑據和服務密鑰需要同步輪換。
更換遠端 Mac 後 Provisioning Profile 要重新生成嗎?
不一定。若原 Profile 仍有效,且 App ID、Capabilities 和證書沒有變更,可以先下載並導入。但新證書、Profile 過期、App Service 改動或舊證書撤銷,都可能要求重新生成。
怎樣確認新打包 Mac 可以正常簽名和上傳 App?
使用真實專案跑一次乾淨 Release Archive,逐層核對簽名身份、Team ID、Profile 和 entitlements,再完成 Export 及 App Store Connect 上傳。平台顯示構建處理完成後,再測試一次無人值守任務和重啟後的密鑰存取。
下線前決策:保留雙環境,還是立即切換
在新 Mac 已經完成一次成功上傳後,不要立即刪除舊環境。至少保留一段可回退窗口,並完成一次計劃任務或重啟後的打包測試。這不是為了追求兩套永久環境,而是避免新 Mac 的 Keychain 解鎖、Profile 快取或上傳密鑰在無人值守時才暴露問題。
你可以按以下條件作決定:
- 若舊 Mac 仍可用,且新 Mac 尚未完成真實上傳:保留雙環境,暫停清理舊密鑰。
- 若新 Mac 已完成 Archive、簽名驗證、上傳及平台處理:把新 Mac 設為主要環境,再保留舊 Mac 作短期回退。
- 若只有本地 Export 成功,沒有 App Store Connect 處理結果:不要下線舊 Mac,回到上傳驗收。
- 若舊 Mac 已損壞且找不到私鑰:走新證書與 Profile 重建流程,不要繼續嘗試用
.cer修復。 - 若遠端 Mac 只作臨時發布:採短週期使用,完成發布演練後再決定是否保留常駐環境。
- 若團隊需要每日或按計劃打包:只有在重啟後任務仍能安全讀取 Keychain 和上傳憑據時,才適合轉為長期打包機。
結尾前對照:自有 Mac、雲端流水線與遠端 Mac
| 方案 | 遷移時最常見的問題 | 驗收重點 | 適合情況 |
|---|---|---|---|
| 舊 Mac 搬到新 Mac | 私鑰遺失、Profile 不匹配、舊設定殘留 | 完整簽名身份與真實 Archive | 你已有可用舊環境 |
| 雲端 CI | 環境不可見、密鑰注入與權限分層較複雜 | 機密變數、快取、重跑及上傳結果 | 你已經有成熟自動化流程 |
| 遠端 Mac | Keychain 解鎖、連線權限、環境交接 | Root 權限、重啟後任務及上傳驗收 | 你需要可控的真實 macOS 打包機 |
| 新購本地 Mac | 硬體成本、維護及長期閒置 | 本機安全、備份和持續運作 | 你長期需要實體設備或本地介面 |
| 驗收項目 | 通過條件 | 未通過時的回退動作 |
|---|---|---|
| 簽名身份 | 憑證與私鑰在同一 Keychain | 重新導入完整身份或重建證書 |
| 專案關係 | Team ID、Bundle ID、Capabilities 一致 | 修正 Xcode 設定與 Profile |
| Archive | 真實 Release Archive 成功 | 脫離上傳問題,先處理簽名鏈 |
| Export 與驗證 | 產物簽名及 entitlements 符合預期 | 比對 Export Options 和 Profile |
| App Store Connect | 構建已接收並完成處理 | 查看上傳狀態與平台錯誤 |
| 無人值守任務 | 重啟後仍能安全使用 Keychain | 修正使用者、解鎖與憑據注入流程 |
如果目前方案是直接在一台個人 Mac 上長期打包,常見缺點是硬碟空間和環境維護責任集中在單一設備、故障時難以即時接手,而且不容易讓團隊按權限共用一套可重現的 macOS 環境。若改用不透明的雲端流水線,則可能遇到環境限制、密鑰注入方式受限及除錯上下文不足。
若舊 Mac 即將停用,你可以先租用 MacDate 的遠端 Mac,以短週期完成簽名遷移、真實 Archive 和 App Store Connect 發布演練;確認流程可重複後,再按發版頻率決定是否保留為常駐 iOS 打包伺服器。選擇前可先查看遠端 Mac 方案與可用環境,並對照裸機 macOS 方案的費用說明。若你需要的是穩定、可保留的專用環境,也可以進一步比較可租用的 M 系列計算節點。