首頁 / 部落格 / Xcode 27 CI 網路白名
ENGINEERING_BLOG · 2026.09.21

Xcode 27 CI 網路白名單怎麼配?2026 企業清單

截至 2026 年 9 月 21 日,Apple 的企業網路文件是按「主機名稱」與「TCP/UDP 連接埠」兩類資訊說明服務連線要求,而不是提供一條可涵蓋所有情境的萬用規則(Apple 企業網路主機與連接埠要求)。因此,本週不要先放行 *.apple.com:請按原始碼、依賴、Xcode 元件、簽名發布、通知與管理服務拆分規則,並讓每條規則對應真實 CI 流程驗證。生產簽名節點也應與普通構建節點使用不同的出站範圍。

本週建議時間表

  • 第 1 個工作日:記錄每個失敗階段、請求目標、執行帳號、代理模式和錯誤證據。
  • 第 2—3 個工作日:建立服務分類、節點信任域與最小出站規則。
  • 第 4 個工作日:以 CI Runner 服務帳號完成逐層連線測試。
  • 第 5 個工作日:執行完整構建、簽名、上傳及公證流程,決定放行或隔離試點。

這篇適合企業網路與安全負責人:你需要為 Mac CI 設計最小出站權限和變更審核依據。平台工程負責人:你正在交付 Xcode 27、Apple Silicon 與 CI Runner 環境。採購與基礎設施負責人:你需要判斷遠端 Mac 節點是否具備可驗證的網路交付能力。

SECTION 01 為什麼主機能上網,Xcode 27 CI 仍然會失敗?

「Mac 可以瀏覽網站」只代表某一個使用者、某一條連線和某一個應用程式曾經成功,不能證明流水線所需的全部請求都能完成。Xcode 27 CI 網路白名單至少有以下幾個容易被忽略的阻斷域:

  • 執行身份不同:管理員終端可能讀到使用者的 SSH 金鑰、Keychain 憑證和代理設定,但 CI 服務帳號未必具有相同權限。
  • 依賴來源不同:Git、Git LFS、Swift Package、CocoaPods、私有制品庫和 Apple 服務不是同一組網域,不能把它們全部歸入 Apple 白名單。
  • 請求階段不同:下載工具鏈成功,不等於簽名認證、App Store Connect 上傳、Notary 狀態查詢和票據裝訂都能完成。
  • 代理行為不同:顯式代理、透明代理、TLS 檢查、內部 CA、DNS 重寫和重新導向,都可能令同一個 URL 在終端機和 Runner 中得到不同結果。
  • 信任域不同:普通 PR 可以接觸較多依賴來源;生產簽名節點則應限制程式碼來源、憑證、私鑰和出站路徑,避免不可信工作與發布權限交叉。

先把錯誤定位到網路階段,再修改規則。否則「加一個網域再重試」很容易掩蓋實際的權限、憑證或服務帳號問題。

SECTION 02 Xcode 27 CI 網路白名單按流量拆分

建議把一條完整的 iOS CI 流程拆成六類請求。下表中的目標不是預先替你填入所有網域,而是要求你從 Apple 官方文件、企業內部記錄和實際流水線日誌取得可核對的清單。

流量類型 主要用途 規則應記錄的內容 常見失敗證據
原始碼 Git、Git LFS、分支與標籤拉取 儲存庫、協定、Runner 身份、代理路徑 clone 失敗、權杖拒絕
依賴解析 Swift Package、CocoaPods、私有制品庫 套件來源、鎖檔、快取策略、內部 DNS resolve timeout、雜湊不符
Xcode 元件 Xcode 額外元件與模擬器執行環境 元件名稱、下載來源、安裝帳號 元件下載中斷、版本缺失
開發與管理服務 Apple Developer、裝置管理、帳戶認證 服務用途、權杖範圍、審計記錄 認證失敗、裝置不可見
簽名與發布 App Store Connect、上傳、公證 發布節點、API 金鑰、狀態查詢、日誌 上傳成功但狀態查不到
結果回傳 Webhook、通知、內部 CI 控制台 回傳目標、來源 IP、重試規則 Job 卡住、結果遺失

Xcode 元件下載應按 Apple 的元件安裝文件核對,而不是只測試 Xcode 主程式是否能啟動(Apple Xcode 額外元件下載說明)。Xcode 27 的系統條件與支援狀態則只採用 Apple Xcode 27 發布說明;不要把企業內部節點「能下載」推論成 Apple 已保證的網路相容性。

第一個阻斷域:原始碼與依賴

請以 CI 服務帳號重新執行拉取和依賴解析,不要以管理員已成功的互動式終端作為證據。驗證時同時檢查:

  • Package.resolved 是否與提交內容一致,快取失效後能否重新解析。
  • Git LFS 物件是否走另一個主機或重新導向。
  • 私有 Swift Package、CocoaPods 與內部制品庫是否需要不同的代理或認證。
  • 企業 DNS 是否只在私網區域可解析。
  • 自託管 Runner 是否透過標籤和 Runner Group 被派到正確的網路區域。

GitHub Actions 的自託管 Runner 文件說明了 Runner 的管理與路由邊界;標籤配置也會影響工作被分派到哪一類節點(自託管 Runner 說明Runner 標籤配置)。如果依賴只存在於私網,沒有對應標籤的工作可能會被送到沒有私網出口的 Mac,最後看似是套件故障,實際上是路由錯誤。

SECTION 03 Apple 服務與簽名節點的權限應怎樣分層?

普通構建、歸檔、簽名、上傳和公證不應共用同一個信任域。你可以用以下邏輯設計節點,而不是把所有出站流量都放到一台「萬用打包機」:

  • 普通構建節點:可拉取已批准的原始碼和依賴,通常不持有生產私鑰或發布權杖。
  • 依賴構建節點:允許經審批的私有制品庫和套件來源,使用獨立快取與可追溯鎖檔。
  • 生產簽名節點:只接收已批准的構建產物,限制分支來源、憑證範圍與出站目標。
  • 災備節點:規則與生產節點保持一致,但必須以獨立測試任務驗證,不應等到主節點故障才首次連線。

App Store Connect API 金鑰的建立與權限範圍,應依 Apple 官方 API 金鑰文件配置。自動化公證則不應只測試「檔案上傳成功」;你還要驗證提交、狀態查詢、日誌取得與票據裝訂,並依 Apple Notary API 文件保留請求和結果證據。

提醒:生產簽名節點若同時下載不可信分支依賴、執行一般除錯工作並持有發布權杖,網路白名單即使寫得很窄,仍然無法消除憑證、原始碼和供應鏈交叉暴露的風險。

SECTION 04 代理、TLS 與防火牆規則怎樣驗證?

Mac CI 代理和企業防火牆白名單的驗收,不能只靠 ping 或瀏覽器開頁面。每個目標都應留下以下六層證據:

  1. DNS 解析:確認 CI 服務帳號取得的位址與管理員終端是否一致,並記錄是否使用內部 DNS。
  2. TCP 建連:確認實際協定和連接埠能否建立連線;Apple 軟體產品的 TCP/UDP 說明可作為官方核對依據(Apple 軟體產品連接埠文件)。
  3. TLS 握手:檢查憑證鏈、內部 CA、SNI 和代理重新導向,不要只看是否「有回應」。
  4. 認證授權:以實際服務帳號和最小權杖測試,分辨網路拒絕與權限拒絕。
  5. 業務請求:執行依賴解析、元件下載、簽名、上傳或公證等真正動作。
  6. 完整流水線:確認結果能回傳 CI 控制台,並保留時間、節點、日誌和規則編號。

對 Apple 端點、程式碼託管、套件來源和內部制品庫分別建立變更負責人、復核週期與回滾動作。Apple 端點清單變更時,不能只更新防火牆;還要重新跑受影響的流水線,確認簽名和發布路徑沒有被代理策略一併改壞。

SECTION 05 上線前應用哪份驗收矩陣?

先把規則轉成可審計的紀錄,再決定節點是否能進入生產。建議每一條規則至少有規則編號、目標服務、業務用途、最小權限、驗證命令或流水線、失敗日誌、審批人和復核日期。

節點類型 必驗證請求 不應直接假設的事項 驗收結果
普通構建節點 原始碼、批准依賴、編譯與結果回傳 能開 Apple 網頁就代表依賴完整 放行/限期整改
依賴構建節點 私有套件、LFS、快取失效後重新解析 公開套件與私有制品庫共用規則 放行/隔離試點
生產簽名節點 歸檔、簽名、上傳、公證、狀態與日誌 上傳成功就代表發布流程完成 放行/禁止上線
災備節點 與生產一致的完整流水線及重連 備援節點只要能 SSH 就足夠 放行/限期整改

第二步:建立可勾選的上線清單

  • [ ] 已將原始碼、依賴、Xcode 元件、開發帳戶、簽名發布和結果回傳分開編號。
  • [ ] 已從 Apple 官方文件核對相關主機與連接埠,沒有以全域 Apple 網域取代具體目標。
  • [ ] 已用 CI 服務帳號,而不是管理員帳號,重現所有關鍵請求。
  • [ ] 已分別記錄 DNS、TCP、TLS、認證、業務請求和完整流水線結果。
  • [ ] 已確認代理是否進行 TLS 解密、DNS 重寫或重新導向,並保存內部 CA 證據。
  • [ ] 已將普通構建與生產簽名節點分成不同網路和憑證信任域。
  • [ ] 已完成 Xcode 元件下載、依賴解析、簽名、上傳、公證和票據裝訂測試。
  • [ ] 已為每條規則指定審批人、變更負責人、復核日期和回滾動作。
  • [ ] 已對遠端 Mac 節點測試失聯後重連,以及流水線結果是否能正常回傳。
  • [ ] 若有任何關鍵證據缺失,已選擇隔離試點,而不是直接投入生產。

最後更新於 2026 年 9 月 21 日;資料核實自 Apple Xcode 27 發布說明、Apple 企業網路主機與連接埠文件、Apple Notary API 文件,以及 CI Runner 官方路由說明。若 Xcode 27 由測試版轉為正式版、Apple 服務端點改動,或企業代理政策變更,請重新執行上述驗收。

SECTION 06 常見問題與驗收邊界

Xcode 27 構建機需要放行哪些網路地址?

不要以 *.apple.com 作為最終答案。你應把 Apple 工具鏈、開發者帳戶、App Store Connect、公證和原始碼依賴分開,使用官方文件建立候選目標,再用企業 DNS、代理日誌和實際 CI 請求確認。私有 Git、Git LFS、Swift Package、CocoaPods 和內部制品庫必須有獨立規則與審批記錄。

iOS CI 存取 Apple 服務失敗時,先查哪裡?

先定位 DNS、TCP、TLS、認證、業務請求或結果回傳的失敗層,不要先擴大白名單。你應在同一台 Mac、同一個 Runner 服務帳號和同一種代理模式下重現,保存錯誤時間、目標、回應和權杖範圍。瀏覽器能開啟頁面,不能證明簽名、上傳或公證流程可用。

Mac CI 代理和企業防火牆白名單怎樣避免互相干擾?

先記錄顯式代理、透明代理、TLS 檢查、內部 CA、DNS 重寫和重新導向的實際行為,再為原始碼、依賴、Apple 服務和內部制品庫分組。每組都應有可重跑的流水線驗證,而不是只用連接測試。若管理員終端和服務帳號結果不同,優先檢查環境變數、Keychain、憑證和代理認證。

企業簽名發布節點是否需要獨立出口?

通常應該獨立設計,因為它持有比普通構建節點更敏感的簽名身份和發布權限。實際出口範圍仍要以你的 App Store Connect、公證、狀態查詢和日誌需求為準;不要讓它同時承擔不可信分支依賴下載。任何上傳成功但狀態或票據取得失敗的情況,都應判定為未完成驗收。

遠端 Mac 構建機如何證明網路白名單真的可用?

在遠端 Mac 上以實際 Runner 服務帳號完成完整流程,依次保留 DNS、TCP、TLS、認證、業務請求和流水線結果證據。測試範圍至少應包含依賴解析、Xcode 元件下載、簽名、發布、公證和失聯後重連。若供應商只能保證主機可登入,卻無法提供代理、私網依賴、隔離和恢復驗證,你應先把它列為隔離試點。

如果你目前是自行維護 Mac CI,實體採購方案的問題通常不只在硬體折舊:還包括固定資產交付週期、故障後需要現場處理、出口規則由你自行維護,以及閒置節點仍要持續承擔電力、空間和管理成本。遠端 Mac 租賃也不是所有企業的答案;長期滿載、需要實體外設或必須完全控制機房的團隊,直接採購可能更合理。但對需要先驗證 Xcode 27、Apple Silicon、企業代理、簽名隔離和失聯恢復的團隊,VPSNIX 的遠端 Mac 節點可先放入 PoC,並以同一份驗收矩陣確認網路交付,而不是只比較登入價格。你可以先查看 VPSNIX 的遠端 Mac 服務入口,再按 方案與租賃資訊核對適合測試的資源範圍;真正進入生產前,仍應要求代理、私網依賴、簽名發布和失聯恢復各自留下可審計證據。