iOS 打包機遷移要備份什麼?2026 Xcode 27 清單
Apple 的 Xcode 27 官方系統需求頁已把 Xcode 27 的相容條件列為遷移前必查資料。對 Xcode 27 iOS 打包機遷移而言,獲勝者是「以恢復指標驗收的新主機」:適合準備退租遠端 Mac、重建打包機,或把持續整合任務交給另一台 Mac 的團隊。只複製專案目錄或重新安裝 Xcode,都不足以證明發布能力已經轉移。
本文的基準很直接:新環境必須能獨立解析依賴、完成建置、產生 Archive、使用正確簽名身份,並完成與原流程一致的上傳。只有在真實發布與舊主機離線測試都通過後,舊機才適合清理或退租。
這篇適合誰?
準備退租遠端 Mac,但不確定哪些檔案、憑據和金鑰必須帶走的獨立開發者。
需要把 Xcode 27 建置任務遷移至另一台 Mac 的 CI 維護者。
接手外包專案、重建故障打包機,並需要確認發布鏈路可恢復的小型團隊。
最後更新於 2026 年 9 月 8 日;版本與平台行為核對自 Apple 的 Xcode、簽名、Archive、App Store Connect 文件,以及自託管 Runner 官方移除流程。
先用發布能力,而不是檔案數量,定義遷移完成度
一個常見失敗案例是:專案已經複製到新 Mac,依賴也能下載,Debug 建置看似正常;到了正式發版,才發現舊主機的 Keychain 裡保存著唯一可用的私鑰。這不是檔案搬漏,而是遷移的驗收指標設錯。
遷移前先保存最近一次成功發布的對照基線。內容包括:
- Xcode 27 的安裝版本與系統相容條件。
- 專案入口、Workspace、Scheme、Build Configuration。
- 依賴解析結果、建置腳本與匯出設定。
- Bundle ID、Team ID、分發方式與簽名身份。
- Archive、版本號、Build 號碼、上傳結果與產物位置。
- CI 任務名稱、Runner 標籤、環境變數和告警入口。
Xcode 的 Archive 與分發步驟,應以 Apple 官方 Archive 與 App 分發流程作為驗收依據。不要以「新 Mac 上看得到憑證」代替真正的發布測試。
五項恢復指標
| 驗收指標 | 必須保留的對象 | 通過證據 | 舊主機清理條件 |
|---|---|---|---|
| 可重建性 | 原始碼、子模組、鎖定檔、腳本、必要設定 | 乾淨檢出後能解析依賴並建置 | 不再依賴舊主機目錄 |
| 工具鏈一致性 | Xcode 27、SDK、命令列工具、Scheme | 工具路徑與建置設定可追溯 | 新主機能完成目標工作 |
| 簽名可用性 | 憑證、私鑰、Provisioning Profile、Keychain 設定 | 能產生目標分發方式的 Archive | 私鑰已備份且有回退方案 |
| 產物可恢復性 | xcarchive、dSYM、xcresult、匯出設定 | 能開啟 Archive,並核對 UUID | 歷史版本仍能查核 |
| 自動化可接管性 | Runner、fastlane、API Key、環境變數、告警 | 新 Runner 完成隔離驗證任務 | 舊 Runner 已停止接單 |
源碼與工具鏈:可重新下載,不代表可獨立重建
更換 iOS 打包機需要複製哪些檔案?核心不是複製整個使用者目錄,而是帶走能重建發布流程的輸入。建議把內容分成「版本庫已有」、「可由鎖定檔重新取得」和「不在版本庫但不可遺失」三類。
必須逐項核對:
- 主專案、Workspace、子模組與必要的私有套件來源。
- Swift Package Manager、CocoaPods 或其他依賴的鎖定檔。
Gemfile、Gemfile.lock、fastlane 設定與建置腳本。- 未納入版本控制的設定檔、環境變數範本及必要的本機設定。
- Xcode 27 的安裝位置、命令列工具選擇和 Scheme。
- 私有倉庫的存取方式,但不把長期有效的 Token 直接寫進腳本。
可以先在新主機執行以下檢查。路徑必須改成脫敏後的實際位置:
xcode-select -p
xcodebuild -version
git submodule status
bundle exec fastlane --version
預期輸出應能對應原先保存的工具鏈基線,例如:
/Applications/Xcode.app/Contents/Developer
Xcode 27.x
[完成的子模組狀態]
fastlane [版本已記錄]
這段輸出的重點不是追求文字完全相同,而是確認新主機使用的 Xcode 路徑、命令列工具和自動化入口沒有偷偷指向舊硬碟。DerivedData、套件快取和暫存建置目錄可以加快工作,但不能當作專案可重建性的證明。
驗收時先建立乾淨檢出目錄,再解析依賴並建置。若只有複製後的工作目錄能成功,乾淨檢出失敗,代表版本庫或腳本仍缺少必要輸入。
簽名身份:憑證、私鑰與 Profile 必須分開驗收
遠端 Mac 退租前如何備份簽名憑證和私鑰?先確認 Apple Distribution 憑證、對應私鑰、Provisioning Profile 和 Keychain 使用方式,再進行任何匯出或撤銷。只下載 .cer 或只看到 Keychain 中的憑證,並不等於新主機擁有完整簽名身份。
Apple 的 身份匯入與 PKCS #12 說明是檢查憑證與私鑰匯入方式的依據。私鑰匯出檔必須以受控方式保存,密碼不能與檔案放在同一個共享目錄,也不應貼進 Shell 歷史、聊天工具或 CI 日誌。
Provisioning Profile 則應依照 Apple 的 Profile 管理文件重新下載或核對。備份清單至少包括:
- Apple Distribution 憑證名稱與有效狀態。
- 與該憑證配對的私鑰。
- 目標 Bundle ID 對應的 Provisioning Profile。
- 新主機的 Keychain 存取權限與解鎖方式。
- 自動簽名或手動簽名的明確選擇。
- 匯出位置、備份加密方式和回退責任人。
| 資產 | 可否單獨替代 | 新主機驗收方法 | 高風險動作 |
|---|---|---|---|
| Apple Distribution 憑證 | 不能替代私鑰 | 確認憑證與私鑰形成完整身份 | 撤銷前先記錄影響範圍 |
| 私鑰 | 不能由 .cer 還原 |
匯入受控 Keychain 後完成簽名 | 輪換前保留可回退備份 |
| Provisioning Profile | 可重新下載,但須符合 Bundle ID 與用途 | 用目標 Archive 核對簽名 | 刪除前確認沒有其他建置依賴 |
| App Store Connect API Key | 不等同簽名身份 | 以隔離任務測試上傳權限 | 撤銷前更新所有使用者 |
| CI 環境變數 | 不應直接公開 | 使用脫敏值完成流程測試 | 清除舊主機與日誌副本 |
完成匯入後,先做一個與正式分發方式一致的 Archive。驗收證據應是簽名成功、匯出設定正確,並能進入驗證或上傳流程,而不是 Finder 或 Keychain 裡出現幾個檔案。
產物保存:xcarchive 與 dSYM 的價值不同於 IPA
xcarchive 和 dSYM 是否需要長期保存?如果團隊需要日後重新匯出、核查歷史版本或分析崩潰,兩者都不應只因「可以重新建置」而立即刪除。IPA 是可交付檔案;xcarchive 則保留更完整的 Archive 資訊;dSYM 用於把崩潰位址對應回可讀的符號。
Apple 的 dSYM 缺失核對說明應作為符號檔核查依據。每個正式版本至少建立可追溯關係:
版本:<VERSION_PLACEHOLDER>
Build:<BUILD_NUMBER_PLACEHOLDER>
Archive UUID:<ARCHIVE_UUID_PLACEHOLDER>
dSYM:<DSYM_UUID_PLACEHOLDER>
匯出設定:<EXPORT_OPTIONS_PLACEHOLDER>
上傳紀錄:<UPLOAD_RECORD_PLACEHOLDER>
保存時不要只備份 IPA。應分別整理:
xcarchive:用於歷史 Archive 核查及後續匯出。dSYM:用於崩潰符號化與版本對照。xcresult:保留測試、建置與診斷結果。- Export Options:記錄 App Store、Ad Hoc 或其他目標的匯出選擇。
- 正式發布記錄:包含版本、Build、Archive UUID 和上傳結果。
備份完成後,實際開啟 Archive 並檢查內容。若只是把整個資料夾複製到另一個硬碟,卻沒有測試解壓、讀取和匯出,仍不能排除損壞副本。產物與快取也要分開:快取遺失通常可重新產生,正式 Archive 和符號檔則可能直接影響歷史版本恢復。
自託管 Runner:先接管,再停止舊主機接單
自託管 Runner 換到新 Mac 後如何恢復?新 Runner 應先以隔離標籤或非發布任務驗證,確認路徑、權限、環境變數、Keychain 和工具鏈都正確,再讓它接手正式工作。兩台主機同時接收同一類發布工作,可能造成重複建置、重複上傳或難以追查的版本衝突。
遷移清單應包含:
- Runner 名稱、標籤和所屬儲存庫或組織。
- fastlane 入口、Bundler 設定與工作目錄。
- App Store Connect API Key、Key ID、Issuer ID 和權限範圍。
- Team ID、Bundle ID、簽名身份及 Profile 路徑。
- LaunchAgent、排程工作、背景服務和日誌位置。
- 失敗告警、通知頻道和任務保留規則。
App Store Connect API Key 的建立、下載與管理規則,應核對 Apple 官方 API 文件。API Key 不是 Apple Distribution 私鑰的替代品,兩者必須在清單中分開標記。
可以先用占位符執行環境檢查,避免把真實帳號寫進文章、腳本或日誌:
echo "$APPLE_TEAM_ID"
echo "$APPSTORE_KEY_ID"
bundle exec fastlane ios verify_environment
輸出只應顯示脫敏值,例如:
TEAM_ID=<TEAM_ID_PLACEHOLDER>
KEY_ID=<KEY_ID_PLACEHOLDER>
environment check: passed
新 Runner 通過隔離驗證後,再停止舊 Runner 接單。若使用的自動化平台提供 Runner 移除功能,應依照其 自託管 Runner 官方移除流程操作。移除前記錄 Runner 名稱、標籤和回退方法;不要在尚未完成真實發布前直接刪除唯一的舊 Runner。
斷線測試與清理:什麼時候才可以退租舊 Mac?
舊打包機什麼時候可以安全清理?至少要先完成新主機上的真實 Archive、目標分發方式的驗證或 TestFlight 上傳,再暫時讓舊主機離線,重新執行關鍵流程。若流程仍讀取舊主機路徑、舊 Keychain 或舊 Runner,便不能清理。
可使用以下驗收卡:
| 狀態 | 新主機結果 | 舊主機處置 |
|---|---|---|
| 未通過 | 依賴、簽名或上傳仍失敗 | 保留完整環境,不撤銷、不刪除 |
| 部分通過 | 可建置但無法完成正式 Archive 或上傳 | 修正缺口,維持短期並行 |
| 發布通過 | 真實 Archive 與上傳成功 | 先保留回退備份,再停止舊 Runner |
| 斷線恢復通過 | 舊主機離線後仍能重跑關鍵任務 | 清理臨時憑據並安排退租 |
清理前逐項確認:
- 新主機能從乾淨檢出完成建置。
- 新主機能產生與目標分發方式一致的 Archive。
- Apple Distribution 與私鑰能完成簽名。
- Provisioning Profile、API Key 和環境變數均已接管。
- xcarchive、dSYM、xcresult 和發布記錄已在可讀備份中。
- 舊 Runner 已停止接單或按官方流程移除。
- 舊主機的背景服務、排程和登入工作已停止。
- 臨時 Token、過期憑據與共享目錄副本已撤銷或刪除。
- Shell 歷史、CI 日誌和共享資料夾沒有遺留私鑰或 API Key。
任何憑證撤銷、API Key 撤銷、Runner 移除和檔案刪除,都應先寫下影響範圍及回退方法。若沒有可用的私鑰備份,便不要以「新環境看起來正常」作為退租理由。
遷移前的方案取捨:保留舊機、並行驗證,還是直接退租
完整遷移不一定代表必須立即刪除舊主機。根據驗收結果,可採用以下決策:
- 來源碼與工具鏈已通過,但簽名未通過:保留舊機,先完成私鑰和 Profile 接管。
- 簽名已通過,但 Archive 或 dSYM 保存不完整:先補齊產物備份,再做斷線測試。
- 新 Runner 能建置,但正式上傳未驗證:維持舊 Runner 可回退,禁止關閉原任務。
- 真實發布與離線恢復都通過:才進入舊主機清理與退租流程。
如果現有方案是臨時雲端建置,常見缺點是無法直接檢查底層 Keychain、背景服務和長期產物位置;如果是共用或短期主機,還可能遇到環境狀態不透明、Runner 權限難以交接,以及下次發布時才發現私鑰不在手上的問題。對需要 Xcode 27、Apple Distribution 和常駐自動化任務的團隊,改用具備完整權限、固定交付條件的遠端 Mac,通常比在截止日前重新猜測環境更容易驗收。可先查看 SFTPMAC 的遠端 Mac 方案與方案價格頁,再按實際使用週期判斷是否適合。
若目前租用環境即將到期,建議先在新遠端 Mac 完成一次不依賴舊主機的真實發布,再安排退租。需要香港交付條件的團隊,也可核對 SFTPMAC 香港 Mac 方案;但對長期固定重負載、必須持有實體介面,或已有完善本地備援的團隊,自購 Mac 仍可能更合適。