首頁 / 部落格 / GitLab Hosted ma
ENGINEERING_BLOG · 2026.09.05

GitLab Hosted macOS Runner 支援 Xcode 27 嗎?2026 企業選型

截至 2026 年 9 月 5 日,GitLab 官方 Hosted macOS Runner 公開映像列出的是 macOS 15/Xcode 16 與 macOS 26/Xcode 26,尚未列出 Xcode 27;Apple 則已發布 Xcode 27 Beta 系列,可在GitLab Hosted macOS Runner 官方映像文件Apple Xcode 27 Release Notes核對。因此,本週不要把 Hosted Runner 當成 Xcode 27 生產遷移的唯一環境:讓託管節點繼續承擔現有穩定工具鏈與非敏感驗證,另以自託管 Mac 承擔 Xcode 27 試點、私網任務及正式簽名。

SECTION 01 誰需要先看這份選型判斷?

如果你正在制定 Xcode 27 適配計劃,需要確認 GitLab 託管映像的支援邊界,本文會提供可核對的版本與容量條件。

如果你負責程式碼簽名、內部依賴、網路隔離或企業採購,也可以用本文判斷哪些工作不能直接送入 Hosted Runner。

本文同樣適合需要比較託管計算用量、自託管 Mac 維運成本與節點備援責任的技術總監及研發效能負責人。

SECTION 02 先分清四種「版本狀態」

GitLab Hosted macOS Runner 的 Beta 狀態、單一 macOS 映像的生命週期、Xcode 本身的發布階段,以及自託管 Runner 應用程式版本,並不是同一件事。

截至本文核實日期,官方文件將 Hosted runners on macOS 標為 Beta,公開映像包含 macOS 15/Xcode 16 和 macOS 26/Xcode 26,沒有 Xcode 27 映像。這只代表官方目前沒有提供可直接選用的 Xcode 27 託管映像,不代表 Xcode 27 本身不能在其他 Mac 環境執行。

Apple 已發布 Xcode 27 Beta 系列,但 Beta 可用性不等於 GitLab 已完成映像、Runner 相容性、Simulator Runtime 和企業簽名流程的整體驗證。你應將「Apple 已發布」和「GitLab 已託管」放在兩個不同的驗收欄位。

注意:不要用媒體報道或社群猜測推算 Xcode 27 映像的上線日期。本文只把 GitLab 官方映像文件和 Apple 官方 Release Notes 當作版本可用性的依據。

這個版本落差直接導出第一個決策:現有 Xcode 26 工作流程可以繼續評估託管方案,但 Xcode 27 生產遷移需要獨立自託管 Mac Runner,至少先完成 PoC。

SECTION 03 GitLab Hosted macOS Runner Xcode 27 的環境控制邊界

託管映像的優點是交付速度和維護責任較低,但「可以選擇某個映像」不等於你能控制該映像何時更新、何時退役,以及 Simulator Runtime 和預裝工具的變更窗口。

自託管 Mac 則相反:你可以自行安裝 Xcode 27、指定命令列工具版本、保留特定 Simulator Runtime,並將依賴工具寫入環境清單;但這也代表你要負責更新、修復、磁碟清理、權限管理和節點一致性。

對企業而言,真正需要驗收的不是「今天能否成功建置」,而是同一提交能否在相同工具鏈下重複得到相同結果。建議為每個節點保留以下資料:

  1. 記錄 Xcode、Swift、SDK、Simulator Runtime 和命令列工具版本。
  2. 將依賴工具與安裝方式寫入可審查的建置設定。
  3. 為託管映像與自託管 Mac 分別保存環境清單。
  4. 以同一提交重跑編譯、單元測試和封裝任務。
  5. 比較產物雜湊、測試結果、警告和簽名狀態。
  6. 在映像更新或 Xcode Beta 轉換時重新執行基線驗證。

這也是 GitLab CI/CD 選型中最容易被忽略的條件:短期成功不代表長期可重現。你可以參考 GitLab Runner macOS 安裝文件理解自託管 Runner 的安裝邊界,也可先查看 VPSNIX 的支援中心確認遠程 Mac 交付與管理問題,再將安裝、權限和版本驗收分開記錄。安裝完成只代表節點可接收工作,不代表工具鏈已完成企業驗收。

SECTION 04 簽名、權限與任務隔離應怎樣分流?

正式發布任務比一般編譯更敏感,因為它會接觸 Apple Developer 憑證、Provisioning Profile、Keychain、發布帳號和可追溯的產物流程。

Hosted Runner 適合放入一般編譯、公開測試和不含生產憑證的驗證任務。正式簽名則要逐項確認:

  • 憑證是否以短生命週期方式注入,工作結束後能否清理。
  • 任務是否擁有管理員權限,其他工作負載是否可能接觸工作區。
  • Keychain、Profile 和臨時檔案是否有明確的建立與銷毀步驟。
  • 是否保存足夠的任務、操作者和產物稽核紀錄。
  • 安全團隊是否接受託管節點的隔離模型和資料邊界。

自託管專用 Mac 能提供較清楚的節點歸屬、固定 Keychain 和內部稽核邊界,但責任也轉回企業:你必須清理工作區、限制 Runner 標籤、隔離簽名任務、輪換憑證,並處理節點失陷或誤用後的撤銷流程。

因此,預設分流應是:普通編譯和測試進入託管池;Xcode 27 試點、正式簽名和高敏感任務進入通過審計的專用自託管 Mac。不要因為某個託管任務能執行簽名命令,就直接推定它符合你的發布政策。

SECTION 05 私網、內部依賴與資料邊界

能夠從 GitLab 拉取程式碼,並不代表 Runner 能存取完整企業依賴。常見阻塞點包括私有套件庫、內部 API、固定出口 IP、代理伺服器、公司 DNS、白名單和資料駐留要求。

你應先畫出網路流向,而不是在 Pipeline 失敗後才猜測原因。最少要列出:

  1. 原始碼與子模組的來源端點。
  2. Swift Package、CocoaPods 或其他依賴的制品庫。
  3. 測試所需的內部 API、資料庫和服務模擬器。
  4. 簽名服務、通知服務和產物儲存位置。
  5. 出口 IP、代理、DNS 和防火牆規則。
  6. 每個端點傳輸的資料類型與保存期限。

若工作負載依賴固定出口或不能離開企業網段,通常應回退到自託管 Mac。若只需要公開依賴、公開測試和不含敏感資料的驗證,託管節點才有較高的彈性價值。

驗收證據應包括網路流向圖、端點清單、實際失敗日誌,以及安全團隊簽字記錄。只憑「程式碼可以拉下來」作為合規證據,不能覆蓋制品、測試資料和發布服務的實際邊界。

SECTION 06 佇列與容量要用任務組合核算

Hosted Runner 的成本和產能,不能只看單次建置時間;自託管 Mac 也不能只看晶片規格。企業真正要測量的是等待時間、執行時間、快取命中、失敗重試、空閒容量與故障恢復。

建議將工作負載拆成四類:Pull Request 編譯、測試、正式歸檔,以及需要重試或人工介入的簽名任務。測試時要使用真實任務組合,而不是一次乾淨建置;否則會低估佇列、快取失效和歸檔流程對節點池的影響。

GitLab 的計算用量規則應直接對照官方 Compute Minutes 文件,企業帳單則應以實際消耗為準。自託管方案要另外記錄節點租賃或採購、儲存、維護、備援、人力與停機損失。

可用以下變數建立容量模型:

  • W:指定週期內的總計算工作量。
  • P:高峰時段的並行工作量。
  • E:單一節點在真實任務組合下的有效產能。
  • R:重試、失敗和維護造成的容量折損。
  • B:備援與故障恢復所需的保留容量。

穩定基線可用 W ÷ E 估算,峰值則應以 PB 重新檢查;這些是模型變數,不應在沒有企業實測時預填節點數或分鐘數。你也可以使用 Runner Fleet Dashboard 文件觀察 Runner 狀態,但儀表板指標仍需和企業自己的任務分類及恢復紀錄配合解讀。

SECTION 07 用決策條件清單確定混合節點池

在採購或申請資源前,按以下分支處理:

  • 現有工具鏈仍是官方託管映像,且任務不含私密憑證,先保留 Hosted Runner,避免為穩定工作負載提前承擔自託管維運。
  • 需要 Xcode 27、固定 Simulator Runtime 或特殊命令列工具,建立隔離的自託管 Mac Runner,先做同一提交的 A/B 驗證。
  • 任務需要私有制品庫、固定出口或內部 API,優先放在可通過網路審查的自託管節點。
  • 只做普通編譯、公開測試或短期峰值驗證,使用託管節點,並把計算用量與佇列納入月度監控。
  • 需要 App Store 正式簽名,只有在安全團隊確認隔離、憑證、Keychain、清理與稽核條件後,才可考慮託管;否則回退到專用自託管 Mac。
  • 單一節點故障會阻塞發布,把備援節點、恢復時間與未完成任務重跑納入 TCO,而不是只比較月租或計算分鐘。
  • 企業仍未確定 Xcode 27 映像的可用日期,不要等待公告才開始,先以自託管 Runner 完成版本和安全 PoC。

SECTION 08 方案與 TCO 對照

指標 Hosted macOS Runner 自託管 Mac Runner 混合節點池
Xcode 27 即時可用性 截至 2026 年 9 月 5 日,官方清單未列出 可自行部署,但要自行驗證 以自託管承擔 Xcode 27,託管保留穩定版本
工具鏈控制 受公開映像與更新窗口限制 可固定 Xcode、Runtime 和依賴 按工作負載分配控制責任
私網依賴 需逐項核對出口、代理和白名單 可放入企業網路邊界 敏感任務走自託管
正式簽名 需通過企業安全審查 可建立專用 Keychain 與節點政策 生產簽名與一般測試分離
維運責任 映像維護較少,但需監測版本與佇列 企業負責更新、清理、修復與備援 需治理兩套生命週期
適合的負載 穩定工具鏈、非敏感測試、波動峰值 Xcode 27、私網、固定環境、正式簽名 多數企業的過渡與長期方案

TCO 應寫成可追溯的變數模型,而不是填入未驗證的單價:

成本項目 託管方案 自託管 Mac 方案
計算或租賃費 依實際計算用量與企業帳單核算 依 Mac 租賃或採購、儲存與使用週期核算
維運人力 映像和佇列監控 Runner 更新、Xcode 維護、清理與故障處理
安全治理 憑證注入、任務隔離、供應商審查 Keychain、節點隔離、輪換、稽核與恢復
容量損失 等待、重試、計算用量波動 閒置容量、備援節點與維護窗口
中斷風險 版本缺口或託管服務狀態變更 硬體、網路、磁碟及人員故障
決策依據 官方計算規則與企業帳單 真實任務產能、恢復紀錄與維運工時

若你只是為短期 Xcode 27 PoC 添置節點,租用獨立遠程 Mac 通常比立即採購實機更容易控制試點週期與資本支出;你可以先查看 VPSNIX 的 Mac 方案與計價資訊,再把實際租期、節點維護和恢復責任放回同一張 TCO 表,而不是只看表面月費。

SECTION 09 目前方案與遠程 Mac 的取捨

只依賴 GitLab Hosted macOS Runner,現階段有三個實際缺點:Xcode 27 映像尚未列出、私網與固定出口不一定符合企業邊界,以及正式簽名的隔離和稽核責任仍需逐項確認。全部改成自購 Mac,則會增加硬體折舊、節點閒置、遠端維護和故障恢復負擔。

如果你的目標是先驗證 Xcode 27、私網依賴或專用簽名流程,VPSNIX 的遠程 Mac 可作為獨立 Runner PoC,讓你以真實 Pipeline、佇列和重啟恢復紀錄決定是否擴展節點池。這種做法不取代長期穩定重負載下的自有基礎設施,也不適合需要本地實體介面的工作;但對版本過渡、臨時容量和企業試點,通常比等待託管映像更新更直接。

先用本文的分流條件標記 Xcode 27、簽名和私網任務,再申請一台隔離節點完成驗證,會比一次性全量遷移更容易控制風險。