PR 已建立,但 Xcode 建置只能在 Agent Host 上勉強重跑,結果不穩定。
最快解法:讓 VS Code 1.138 Agent 建立 PR 留在 Agent Host,通用檢查交給確定性 CI,Xcode、簽名與 Apple 平台回歸則移到獨立雲端 Mac。
本文最後更新於 2026 年 9 月 20 日;功能狀態核實自 VS Code 1.138 發布說明、Agent Host 架構文件及 GitHub 官方的分支保護與 Runner 文件。
這篇適合三類讀者:
- iOS、macOS 團隊:你需要判斷 Agent 建立 PR 後,哪一台 Mac 應完成 Xcode 驗證。
- 平台工程師:你需要拆分 Agent Host、CI Runner 與遠端執行環境的責任。
- AI 創業團隊:你想控制成本,同時避免共享主機污染與建置排隊。
三層責任
截至上述日期,VS Code 1.138 已確認支援從 Agent Host 工作階段審閱並建立 Pull Request,也可以選擇草稿狀態及可用的合併選項;Agent Merge 仍屬實驗能力。官方資料沒有表示「建立 PR」可以取代分支保護、必需檢查、人工審批或真實 Mac 建置。
你應先把四個容易混淆的狀態拆開:
- Agent 工作階段完成:模型已修改工作區,可能已產生提交。
- PR 已建立:變更已進入團隊審閱流程,不代表任何測試通過。
- 檢查已通過:CI 或 Mac Runner 回報指定工作成功,但仍要確認結果是否來自正確提交。
- 程式碼可發布:分支保護、人工審批、簽名、回歸測試及發佈權限均已滿足。
推薦的預設責任如下:
| 環境 | 應負責的工作 | 必須留下的證據 | 停止條件 |
|---|---|---|---|
| Agent Host | 修改程式碼、建立提交、發起 PR | 提交識別碼、工作區變更、Agent 工作階段紀錄 | 無法確認提交來源或工作區被其他任務污染 |
| 通用 CI Runner | 靜態檢查、單元測試、容器化建置 | 工作流程紀錄、測試輸出、依賴版本、執行環境 | 測試不穩定、結果未對應 PR 提交 |
| 獨立雲端 Mac | Xcode 建置、Simulator 或實機回歸、Apple 平台檢查 | Xcode 輸出、測試報告、建置產物、簽名狀態 | 簽名權限不清、佇列超時或建置不可重現 |
GitHub Actions 的工作流程可以選擇不同 Runner;自託管 Runner 也有自己的管理與安全責任。你可以參考 GitHub Runner 選擇方式及自託管 Runner 官方說明,不要把「能執行工作」誤當成「適合承擔所有權限」。
純 Web 程式碼場景
如果 PR 只包含前端、後端、腳本或跨平台程式碼,而且測試可以在容器或通用 Runner 中重複執行,你通常不需要為每個 Agent 任務新增 Mac。
這類場景的合理流程是:
- Agent Host 在隔離工作區修改程式碼。
- 產生提交並建立草稿或一般 PR。
- GitHub Actions 依 PR 提交觸發靜態檢查、單元測試與容器化建置。
- 把測試輸出、依賴鎖定檔和執行環境保存為工作流程證據。
- 由審閱者確認必需狀態檢查與分支規則後,才決定是否合併。
GitHub 官方的 Workflow artifacts 文件說明了如何保存工作流程產物;工作流程日誌文件則可用來保留執行輸出。你的驗收紀錄至少應能回答:哪一個提交被測試、使用哪個 Runner、測試是否重試、產物從哪一次執行產生。
可以維持通用 Runner 的條件:
- 沒有 Xcode、Simulator、Apple 系統框架或 Apple 專屬工具。
- 測試不依賴本機鑰匙圈、簽名憑證或實體裝置。
- 容器化建置與本機建置的依賴邊界已經明確。
- 失敗後可以從同一提交重新執行,而不是依賴 Agent 工作區的臨時狀態。
若其中一項不成立,就不要因為 PR 已成功建立而把 Mac 驗證省略。
Apple 平台建置場景
一個典型衝突是:Agent 成功建立 iOS PR,GitHub Actions 的通用檢查也變綠,但 Xcode 任務在 Agent Host 上重跑時找不到正確的模擬器、依賴或簽名狀態。這不是 PR 功能失敗,而是執行環境責任放錯位置。
Apple 平台專案涉及 Xcode、Simulator、系統框架或實體裝置時,應使用真實 macOS 建置層。Apple 的模擬器與實體裝置測試說明可作為測試範圍的官方依據,但它不會替你決定憑證應放在哪一台主機。
| 選擇 | 優點 | 隱性成本與風險 | 適合情況 |
|---|---|---|---|
| Agent Host 原機建置 | 少一次工作轉移,初期設定較快 | 工作區、依賴、快取和 Agent 任務互相污染;長建置會佔用生成程式碼的主機 | 低風險原型、短期人工監督測試 |
| Agent Host 與 CI Runner 共用 Mac | 管理節點較少 | 同一身份可能同時修改程式碼與回報檢查,責任邊界模糊 | 僅限非敏感、可清理且可接受重跑的內部專案 |
| 獨立雲端 Mac 建置層 | 工作區與權限分離,較容易重現與擴充 | 需要佇列管理、產物傳遞、憑證治理和容量規劃 | 正式 iOS/macOS 產品、長時間 Xcode 任務、團隊並行提交 |
簽名與發佈權限應再往外分離。產生程式碼的 Agent 不應同時持有發佈憑證;建置主機即使可以編譯,也不代表它應獲得上架或正式發佈權限。
提醒: 看到綠色檢查前,先核對它是否針對目前 PR 的最新提交。若結果來自舊提交、重試工作或另一個工作區,應停止合併,重新建立可追溯的檢查。
受保護分支與高風險倉庫
VS Code 1.138 Agent 建立 PR 的能力,只處理協作入口,不會自動放寬 GitHub 倉庫規則。GitHub 的受保護分支文件列出的分支規則,仍應由倉庫設定與審批流程決定。
在高風險倉庫中,你應逐項核對:
- Agent 使用的是哪一個 GitHub 身份,是否只具備建立分支與 PR 的必要權限。
- PR 的來源分支、目標分支及提交者是否清楚可追溯。
- 必需狀態檢查是否由獨立 CI 或 Mac Runner 回報。
- Agent 是否能修改工作流程、分支規則或檢查設定。
- 是否要求草稿 PR、人工審批及合併佇列。
- 建置產物和日誌是否保存,且與目前提交一致。
停止條件很明確:若同一個身份既修改程式碼,又能以不可分離的權限替檢查結果背書,就不要讓它直接進入合併流程。先降級為草稿 PR,再以獨立 Runner 執行檢查。
遠端工作階段與長任務
當 Agent Host 位於遠端伺服器或雲端 Mac,你要分別保存三種東西,而不是只保存一個工作目錄:
- 程式碼工作區:Git 提交、分支、未提交變更及依賴鎖定檔。
- 任務狀態:Agent 工作階段、工具呼叫、待辦事項和失敗位置。
- 建置產物:測試報告、Xcode 輸出、封裝檔及簽名結果。
客戶端斷線不等於建置可以恢復。你需要在正式採用前做一次中斷演練:
- 啟動一個可識別提交的 Agent 任務。
- 讓它建立 PR 或送入 Mac 建置佇列。
- 中斷本機連線,確認遠端任務是否仍有明確狀態。
- 重新連線,驗證能否接管同一工作區,而不是建立另一份副本。
- 人為中止建置,確認產物、日誌與失敗原因仍可取得。
- 以同一提交重跑,確認結果不依賴原本的暫存目錄。
長時間佔用 Xcode 的任務應進入專用佇列,不要阻塞負責生成程式碼的 Agent 主機。若工作區不能安全接管,或建置被中斷後只能人工猜測進度,就應停止把它當作可恢復的自動化流程。
常見問題
FAQ 對應的長尾意圖已集中在此,方便你按團隊現況直接判斷:
VS Code Agent Host 建立 PR 後,還需要跑 CI 嗎?
需要。Agent Host 負責修改工作區、提交變更和發起 PR;CI 才適合執行可重複的靜態檢查、單元測試與容器化建置。PR 已建立只是協作入口,不能取代必需狀態檢查、測試紀錄或受保護分支的審批條件。
Agent 產生的 iOS PR 應該在哪裡執行 Xcode 建置?
只要涉及 Xcode、Simulator、Apple 系統框架或簽名,就應放在獨立的 macOS 建置層。這台 Mac 可以是自託管 Runner 或雲端 Mac,但不宜和產生程式碼的 Agent Host 長期共用,否則依賴、工作區和權限狀態會互相污染。
Agent Host 和 GitHub Actions Runner 可以使用同一台 Mac 嗎?
低風險原型可以暫時共用,但必須限制權限、清理工作區並保留獨立建置紀錄。正式產品、簽名流程、發佈工作或無人值守任務不應共用,因為同一主機可能同時持有程式碼修改權、建置權和敏感憑證,難以界定結果責任。
多個 Agent 同時提交 PR 時,Mac 建置工作應怎樣排隊?
先把等待時間、實際執行時間、失敗重試和人工審批分開記錄,再決定調整佇列或增加彈性 Mac 容量。不要按照 Agent 工作階段數量直接一比一配置主機;若瓶頸只出現在 Xcode 建置,就擴充獨立 Mac 層,而不是增加產生程式碼的主機。
多 Agent 並行建置
多個 Agent 可以共享專案背景,但共享上下文不代表共享一台 Mac。當 PR 同時增加,瓶頸往往會從模型生成轉移到依賴安裝、測試佇列、Xcode 編譯和人工審批。
你應把每個 PR 的時間拆成四段:
- 等待 Mac 或 Runner 的時間。
- 實際執行建置與測試的時間。
- 失敗後重試或清理工作區的時間。
- 等待人工審批、簽名或發佈授權的時間。
如果只有等待時間持續增加,而實際建置時間穩定,優先調整佇列策略或增加彈性 Mac 容量。如果實際建置本身不穩定,先修正快取、依賴和工作區隔離,不要直接增加主機數量。如果瓶頸在簽名審批,擴充 Mac 也不會解決問題。
低風險共用條件
- PR 不涉及正式簽名、發佈憑證或生產環境。
- 任務可由人工監督,且工作區能在每次執行前清理。
- Agent、CI 和建置身份的權限已分離。
- 失敗可以用同一提交重新執行,並保留日誌與產物。
必須拆分環境的條件
- 任務需要存取簽名憑證、鑰匙圈或實體裝置。
- Agent 可以修改工作流程或倉庫權限。
- Xcode 建置會長時間佔用主機,影響其他工作階段。
- 任務要無人值守執行,或結果會直接進入正式發佈。
- 你無法證明檢查結果來自目前 PR 的提交。
三檔決策
你可以按以下三檔處理現有流程:
| 決策 | 環境安排 | 適用訊號 | 下一步 |
|---|---|---|---|
| 維持現狀 | Agent Host 搭配通用 CI,低風險任務暫時共用 Mac | 沒有 Apple 平台依賴,檢查可穩定重跑 | 先補齊提交、日誌、產物和權限紀錄 |
| 拆分建置層 | Agent Host、CI Runner、獨立雲端 Mac 分開 | Xcode、Simulator、簽名或長任務已造成污染 | 先建立 Mac 佇列,再把簽名與發佈權限獨立 |
| 增加彈性容量 | 保留獨立建置層,按佇列需求增加可用 Mac | 等待時間成為主要瓶頸,且建置本身已穩定 | 以等待、執行、重試和審批資料評估擴容 |
若你目前還未把 Agent Host 與 Mac 建置分開,可以先參考 kvmsync 的遠端 Mac 相關內容,再用 支援與使用說明核對連線、工作區接管和任務交付方式。不要先購買或租用更多主機,卻沒有測量佇列究竟堵在哪一層。
回到最初的選擇:把所有工作放在 Agent Host 原機,短期看似少了傳遞步驟,但會承受工作區污染、長任務互相阻塞、權限難以分離和結果不易重現等缺點;通用 CI 也無法替代真實 macOS 上的 Xcode 與簽名驗證。對需要臨時算力、峰值建置或隔離測試環境的團隊,租用 kvmsync 的雲端 Mac,通常比把 Agent、CI 和 Apple 平台交付硬塞在同一台主機更容易控制責任邊界。若你的負載是長期穩定的大量建置,或必須持有實體介面與固定硬體,則應如實比較自購 Mac、專用自託管 Runner 和雲端租用,而不是盲目採用租用方案。
你可以先用上面的三層表格標記目前 PR 流程:如果 Xcode 建置仍和 Agent 工作階段共用主機,再按團隊的佇列等待與任務恢復需求評估雲端 Mac;需要臨時 Mac 建置或隔離驗證時,可到 kvmsync 方案頁面查看可行的租用安排。
常見問題
VS Code Agent Host 建立 PR 後,還需要跑 CI 嗎?
需要。Agent Host 主要負責修改工作區、提交變更及發起 PR;CI 才適合執行可重複的靜態檢查、單元測試與容器化建置。PR 已建立只代表協作入口出現,不能代替必需狀態檢查、測試紀錄或受保護分支的審批條件。
Agent 產生的 iOS PR 應該在哪裡執行 Xcode 建置?
只要涉及 Xcode、Simulator、Apple 系統框架或簽名,就應放在獨立的 macOS 建置層。這台 Mac 可以是自託管 Runner 或雲端 Mac,但不宜和產生程式碼的 Agent Host 長期共用,否則依賴、工作區和權限狀態會互相污染。
Agent Host 和 GitHub Actions Runner 可以使用同一台 Mac 嗎?
低風險原型可以暫時共用,但必須限制權限、清理工作區並保留獨立建置紀錄。正式產品、簽名流程、發佈工作或無人值守任務不應共用,因為同一主機可能同時持有程式碼修改權、建置權和敏感憑證,難以界定結果責任。
多個 Agent 同時提交 PR 時,Mac 建置工作應怎樣排隊?
先把等待時間、實際執行時間、失敗重試和人工審批分開記錄,再決定調整佇列或增加彈性 Mac 容量。不要按照 Agent 工作階段數量直接一比一配置主機;若瓶頸只出現在 Xcode 建置,就擴充獨立 Mac 層,而不是增加產生程式碼的主機。
延伸閱讀
kvmsync M4 遠端節點
讓每個 PR 都有可靠的 Mac 建置環境
使用 kvmsync 遠端 Mac,為需要 macOS 的專案提供獨立、穩定的建置與測試環境。