首頁 / 部落格 / Xcode Cloud vs i
ENGINEERING_BLOG · 2026.08.11

Xcode Cloud vs iOS 打包伺服器:2026 怎麼選?

Apple Developer Program 目前包含每月 25 個 Xcode Cloud 計算小時;因此,低頻建置、依賴簡單,而且主要使用 Apple 原生發布流程的獨立開發者,先選 Xcode Cloud 通常較合理。相反地,如果你需要長期在線的 Mac、自訂工具鏈、持久快取,或要讓 fastlane 持續執行後台任務,iOS 打包伺服器會更合適。負載忽高忽低時,日常驗證放在 Xcode Cloud,發布與特殊任務交給獨立 Mac,通常更容易控制風險。(Apple 官方 Xcode Cloud 方案說明)

本週先不要急著比較套餐名稱或單次建置價格。你應該先匯出最近一段時間的建置紀錄,整理觸發頻率、平均任務時間、失敗重跑、平行測試,以及是否有非建置的常駐工作。這組資料,才是比較 Xcode Cloud vs iOS 打包伺服器時真正可用的共同基準。

這篇適合三類讀者:

  • 每月建置次數有限,希望快速啟用 Apple 原生 CI/CD 的個人開發者。
  • 使用 fastlane、私有依賴或自訂腳本,需要完整 macOS 控制權的開發者。
  • 正在比較雲端計算時數與長期 Mac 環境成本的小型 App 團隊。

SECTION 01 先用時間線整理你的建置負載

把工作拆成一條完整時間線,比只看「一次打包要多少錢」更準確:

  1. 程式碼提交或 Pull Request 觸發建置。
  2. 依賴下載、腳本安裝與環境準備。
  3. 編譯、測試、封存及產生 .ipa
  4. 簽署並上傳至 TestFlight 或 App Store Connect。
  5. 失敗後重跑、人工排錯,以及後續通知或交付任務。

Xcode Cloud 的計算小時,是執行雲端任務所消耗的時間。Apple 官方例子指出,5 個各執行 12 分鐘的測試等於 1 個計算小時;測試也可以與分析、封存及建置等工作平行執行。這代表你不能只用「一次編譯花幾分鐘」估算用量,平行測試和失敗重跑也必須納入。(Apple 官方 Xcode Cloud 入門文件)

另外,要先區分兩種環境:

  • 臨時建置環境:任務開始時建立,適合標準化 CI 工作;完成後不應假設現場仍然保留。
  • 長期在線 Mac 主機:你可以透過 SSH、VNC 或網頁控制台登入,保留專案快取、工具設定與後台流程。

兩者都能完成 iOS 建置,但維護模型完全不同。前者把主機管理交給平台,後者則把環境控制權交還給你。

SECTION 02 成本要看失敗重跑與空閒時間,不只看單次建置

Xcode Cloud 採用計算資源使用邏輯。Apple Developer Program 包含 25 小時/月,另有 100、250、1,000 和 10,000 小時/月的訂閱級距;Apple 公開價格分別為 49.99、99.99、399.99 和 3,999.99 美元/月,未使用的小時不會累積至下一個月。這些是 Xcode Cloud 的官方方案,不應拿來推算 VPSNIX 的租用價格。(Apple 官方計算資源方案)

比較時,建議把成本拆成以下項目:

  • 實際編譯與測試時間。
  • 依賴下載及每次重新建立環境的時間。
  • 失敗後的重跑次數。
  • 平行測試造成的額外用量。
  • 長期 Mac 的租用週期與閒置時間。
  • 你自己處理工具更新、憑證、磁碟空間和故障排查的時間。

可以用三種情境作初步判斷:

建置情境 Xcode Cloud 的傾向 iOS 打包伺服器的傾向 較合理的選擇
低頻建置、依賴單純、以 TestFlight 為主 啟用快、主機維護少 可能出現較多閒置時間 Xcode Cloud
穩定高頻建置、需要固定工具與快取 計算時數及重建環境需持續監控 可保留環境並集中處理任務 iOS 打包伺服器
發布週期波動大,偶爾有特殊工作 高峰期可能快速消耗額度 長期租用可能浪費 雙軌方案

不要自行設定一個「每月超過多少次就一定要換方案」的盈虧分界點。不同專案的測試數量、依賴下載、快取命中率和失敗原因差異很大,應以你自己的連續建置紀錄計算。

如果你希望先了解 VPSNIX 的租用週期與方案,可查看繁體中文方案頁;但真正比較前,仍應把租用週期換算成你的實際建置與維護成本,而不是直接拿月費和計算小時做表面對照。

SECTION 03 依賴與環境控制權,會決定專案能否重現

Xcode Cloud 並不是沒有自訂能力。Apple 官方文件說明,你可以在專案的 ci_scripts 目錄放置 ci_post_clone.shci_pre_xcodebuild.shci_post_xcodebuild.sh,用來安裝工具、準備依賴或處理建置後產物;臨時環境也提供 Homebrew,以便安裝部分第三方工具。(Apple 自訂建置腳本文件)

但這種自由度仍然有邊界:

  • 臨時環境不應被視為你可以永久修改的主機。
  • 私有 Swift Package、Git submodule 或其他私有依賴,需要先完成來源存取授權。
  • Swift Package Manager 應提交 Package.resolved,不要依賴每次建置時的自動解析。
  • CocoaPods 可以透過鎖定檔和腳本處理;Carthage 則通常需要額外安裝工具。
  • Apple 文件明確指出,自訂腳本不能透過 sudo 取得管理員權限。(Apple 依賴管理文件)

這裡是兩種方案的關鍵差異:Xcode Cloud 適合「環境可以由 Git 儲存庫和腳本重建」的專案;iOS 打包伺服器則適合「環境本身就是資產」的專案,例如固定版本的 Homebrew 工具、私有二進位依賴、長時間存在的快取,或需要持續運作的自訂服務。

因此,若你的 fastlane 流程每次都能從乾淨環境安裝完成,放在 Xcode Cloud 沒有問題;若流程依賴某些只在特定 Mac 環境中穩定運作的工具,完整主機會更容易維護。

SECTION 04 簽署流程應先決定,再選建置節點

iOS CI/CD 最容易出問題的部分,通常不是編譯,而是憑證、Provisioning Profile、Bundle ID 和上傳權限之間的配合。

Apple 原生工作流適合希望少寫腳本的團隊。Xcode Cloud 可以在 Xcode 或 App Store Connect 中建立工作流,並執行建置、測試及交付任務;Apple 也提供 App Store Connect API,讓你讀取工作流、建置、產物和測試結果,並啟動新的建置。(Apple 工作流與建置 API 文件)

若你使用 fastlane,則可把簽署與發布拆成明確步驟:

  1. 先建立 App Store Connect API Key,保存 Key ID、Issuer ID 和 .p8 私密金鑰。
  2. 使用 app_store_connect_api_key 載入 API 權杖。
  3. match 同步憑證和 Provisioning Profile。
  4. gym 建置並簽署 App。
  5. pilotdeliver 上傳至 TestFlight 或 App Store Connect。

fastlane 官方文件指出,API Key 通常比 Apple ID 登入更適合 CI,因為不需要 2FA,並使用正式的 App Store Connect API。match 則可把簽署憑證和設定檔集中管理;在 CI 環境中,官方建議使用 readonly 模式,避免建置節點意外建立或撤銷簽署資產。(fastlane API Key 與 match 官方文件)

你應該避免以下做法:

  • .p8.p12 或密碼直接提交到 Git 儲存庫。
  • 在建置輸出中印出 API Key、Token 或 match 密碼。
  • 讓多個 App 共用沒有清楚權限範圍的金鑰。
  • 把「能夠成功上傳」誤認為「簽署資產已經可長期維護」。

Apple 的環境變數文件也說明,秘密變數可以在建置日誌中遮罩;因此,API Key 和憑證密碼應放在 CI 的秘密變數中,而不是寫進 Fastfile。(Apple 環境變數參考)

SECTION 05 用恢復能力評估穩定性,而不是看一次成功

一次建置成功,只能證明當下的提交和環境可以工作,不能代表方案適合長期運作。你應該在連續紀錄中觀察四個指標:

  • 失敗後能否取得足夠完整的建置日誌。
  • 相同提交能否重現相同錯誤。
  • 依賴和快取是否每次都需要重新建立。
  • 遇到憑證、網路或服務中斷時,是否需要人工登入處理。

Xcode Cloud 的優勢是不用自己維護主機,並可在 App Store Connect 查看工作流、建置、產物、問題與測試結果;限制則是建置環境屬於臨時環境,不能把現場狀態當成永久資產。

獨立 Mac 環境的優勢相反:你可以直接登入、檢查檔案、查看快取、執行診斷命令,也能讓背景服務持續運作;代價是你要自行處理 macOS 更新、Xcode 版本、磁碟容量、登入權限、SSH 金鑰和故障復原。

SECTION 06 第一步:用代表性工作流做一輪驗收

在長期遷移前,先選一條最能代表日常工作的流程,例如「Pull Request 測試」或「Release 建置並上傳 TestFlight」,然後按下面清單執行:

  • [ ] 記錄一次完整流程從觸發到產物交付的時間。
  • [ ] 分開記錄依賴下載、編譯、測試、封存與上傳階段。
  • [ ] 讓同一個提交在相同條件下重跑,確認錯誤是否可重現。
  • [ ] 刻意測試一次私有依賴或自訂腳本失敗,檢查日誌是否足夠排錯。
  • [ ] 確認 API Key、憑證密碼和其他秘密沒有出現在日誌或提交紀錄。
  • [ ] 記錄失敗後需要多少人工介入,以及是否必須登入主機。
  • [ ] 連續觀察一段時間後,再把實際紀錄代入月度成本。

如果驗收結果顯示所有環境都能由儲存庫和腳本重建,Xcode Cloud 的低維護特性會更有價值;如果你需要登入主機才能恢復工作,或必須保留快取與背景任務,iOS 打包伺服器的控制權就不只是方便,而是流程的一部分。

你也可以先閱讀沒有 Mac 開發 iOS 的方案選擇遠端 Mac 使用及驗收資訊,再決定是否需要把完整 macOS 節點納入 CI/CD 架構。

SECTION 07 最後的選擇條件:單軌、獨立 Mac,還是雙軌?

你可以用以下條件收束判斷:

  • 若每月建置量不高、專案依賴簡單,而且主要使用 Apple 原生工作流,選 Xcode Cloud。
  • 若需要 root 權限、自訂 Homebrew 工具、私有依賴、持久快取或常駐 fastlane 任務,選 iOS 打包伺服器。
  • 若日常驗證量大但發布任務集中,採用雙軌:Xcode Cloud 負責 Pull Request 和一般測試,獨立 Mac 負責 Release、特殊腳本與長時間任務。
  • 若你目前沒有連續建置紀錄,先不要長期遷移;先跑一輪代表性工作流,再根據實際失敗重跑和維護時間決定。

常見方案的隱性代價

Xcode Cloud 的問題通常不是「不能建置」,而是臨時環境、依賴授權和額外腳本會增加重建要求;iOS 打包伺服器的問題則是你需要自行處理更新、磁碟、權限和主機故障。前者可能讓特殊流程需要更多適配,後者則可能在低頻使用時產生閒置成本。

所以,如果你現在使用的方案是純雲端計算,卻經常遇到計算時數不足、依賴每次重裝、失敗後難以保留現場;或者你已經自建 Mac,但長期被主機維護、硬體採購和閒置時間拖住,那麼租用 VPSNIX 的遠端 Mac 會是較容易控制的中間方案。你可以先按週或按月建立一個可登入、可保留環境的打包節點,完成實際驗收後,再決定是否擴大使用,而不是先按硬體型號做長期承諾。