一台獨享 Mac・兩種連線方式

用 SSH 執行建置,
用 VNC 操作 Xcode

透過命令列與圖形桌面連線至同一台實體 Mac mini。讓 runner 持續執行工作;需要檢查 Xcode、模擬器或憑證設定時,再開啟螢幕共享。

Apple Silicon M4・兩種方案・每天 $20 起。整台機器僅供一位客戶使用,並非虛擬機。

團隊專屬工作區

工作持續執行,桌面按需開啟

SSH自動化流程
  1. 同步專案
  2. 執行測試
  3. 封存產物
VNC互動檢查流程
  1. 開啟 Xcode
  2. 檢查模擬器
  3. 確認簽署設定

共用同一份專案、磁碟與工具鏈,不必重複設定兩台機器。桌面操作同樣會占用整台機器的資源。

先分工,再連線

自動化留在命令列,互動檢查交給桌面

兩種方式可以並用。選擇連線方式的依據是工作是否需要圖形介面,而不是有沒有人坐在電腦前。

SSH:適合重複執行的工作

適用於 xcodebuild 編譯與測試、runner 註冊與記錄檔檢查,以及 scp、rsync 檔案同步。建置記錄是文字,不需要持續傳輸桌面畫面。

  • 將相依套件安裝、測試與封存納入工作流程,減少手動操作。
  • 檢查 runner 程序、工作目錄、剩餘磁碟空間與失敗記錄。
  • 透過服務管理 runner,避免長時間工作綁定單次 SSH 連線。

適用階段:PR 驗證、nightly 建置、批次封裝與產物同步。

VNC:適合需要檢視介面的工作

適用於 Xcode 圖形介面、模擬器操作、鑰匙圈與憑證設定。可使用 macOS 內建的螢幕共享,或相容的 VNC 用戶端連線。

  • 檢查專案 target、建置設定與簽署設定的實際狀態。
  • 開啟模擬器重現 UI 問題,確認執行階段與裝置類型。
  • 處理需要互動確認的設定,再將可重複的步驟寫回腳本。

適用階段:環境初始化、圖形介面疑難排解與發佈前人工檢查。

首次連線

核對一次憑證,分別驗證兩種連線方式

登入控制台,開啟對應的執行個體詳情。連線位址、使用者名稱、連接埠與驗證方式均以執行個體顯示的資訊為準;SSH 連接埠不可直接當作 VNC 連接埠。

  1. 01

    取得執行個體憑證

    核對執行個體 ID 與節點,分別記下 SSH 和 VNC 連線資訊。首次連線前確認執行個體已可使用;若控制台尚未提供憑證,請保留訂單資訊並透過控制台工單查詢,不要反覆猜測位址或密碼。

  2. 02

    驗證命令列連線

    使用執行個體提供的連接埠和使用者名稱連線。首次出現主機指紋提示時,請先核對;若同一位址的指紋突然改變,請停止連線並確認執行個體是否已重新配置。

    ssh -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
    sw_vers
    uname -m
    xcode-select -p
    df -h

    先在本機終端機將變數設為控制台顯示的實際值。連線成功後,檢查 macOS、架構、開發者目錄與磁碟空間。

  3. 03

    開啟螢幕共享

    在本機 macOS 開啟「螢幕共享」,輸入執行個體提供的 VNC 位址與連接埠;其他系統則使用相容的用戶端。依執行個體的驗證方式登入,先確認看得到桌面且能操作滑鼠,再開啟 Xcode。若連線失敗,依序檢查位址、連接埠、驗證資訊與本機網路限制。

  4. 04

    加強存取安全

    首次登入後,依執行個體支援的方式更新初始憑證,並為團隊成員分別管理 SSH 金鑰;不要將密碼寫入儲存庫。runner 使用權限最小化的註冊權杖;憑證、證書與私鑰應納入受控的密鑰管理流程。完成一次最小規模建置後,再啟用正式工作流程。

5 個節點・網路參考

桌面操作看往返延遲,建置則看資料路徑

VNC 的點擊回應會受往返延遲影響;持續建置則更應留意儲存庫、相依套件來源與產物儲存位置。以下為節點參考區間,並非從您目前的位置測得,也不代表連線延遲保證。

節點、涵蓋區域與往返延遲參考區間;依主要工作方式評估連線位置
節點 涵蓋區域 往返延遲參考區間 適合的工作方式
新加坡 東南亞 20~50ms 適合東南亞團隊進行互動式開發;也請確認儲存庫與相依套件下載路徑。
日本(東京) 東亞 30~60ms 適合東亞團隊操作 Xcode;runner 與產物儲存位置盡量靠近團隊。
韓國(首爾) 東北亞 30~50ms 適合東北亞團隊檢視模擬器、遠端疑難排解與同步專案。
香港 華南與東南亞 20~40ms 適合華南與東南亞團隊進行螢幕共享與日常建置操作。
美國東岸 北美東岸與西歐 25~35ms 適合涵蓋區域內的團隊協作;請依程式碼與產物位置選擇節點。

以上為參考區間,實際狀況依連線網路而異。

先透過常用的辦公網路完成一次桌面操作、一次相依套件下載與一次產物上傳。分別記錄互動感受、傳輸時間與建置時間,不要將三者合併成單一的「機器快慢」結論。

先降低畫面負載,再檢查連線

將頻寬留給目前的工作

畫面設定從夠用開始。遠端畫面越大、變化越頻繁,編碼與傳輸的負擔就越重;調整桌面不會減少編譯器的工作量,但能縮短互動等待時間。

依工作區調整解析度

建議從 1440 × 900 或 1600 × 900 開始,先確保編輯器與記錄內容都清楚可讀。只有確實需要更多面板時才提高解析度,不必預設傳輸高解析度全螢幕畫面。

每次只調整一個選項,比較文字清晰度與拖曳視窗時的回應速度。

依用戶端調整色深與畫質

若用戶端提供色深、畫質或壓縮選項,頻寬不足時先降低畫質。閱讀程式碼時仍須確保文字清晰,避免播放影片或持續更新無關視窗。

各用戶端的選項名稱不盡相同,請以實際可用的設定為準。

不需互動時關閉畫面

傳輸大型檔案或網路不穩時,可透過 SSH 檢視文字記錄,並讓已設定為服務的 runner 執行建置。不要依賴圖形終端機視窗維持長時間工作;請先確認工作可在離開互動連線後繼續執行。

檢查完成後中斷桌面連線,不要登出系統或關機。

Xcode 遠端開發的限制

桌面用於確認,工作流程用於重現

將人工檢查轉化為可追蹤的環境變更:記錄 Xcode 版本、模擬器執行階段與簽署設定,再使用同一份專案透過命令列驗證。不要只留下「曾在桌面上點選設定」的紀錄。

遠端開發工作區中的電腦與桌面裝置,展示如何從本機工作站連線至雲端 Xcode
遠端開發工作區示意圖。螢幕共享傳輸的是雲端桌面,不會自動將本機周邊裝置連接至遠端機器。

可在雲端完成

Xcode 專案檢查、編譯封存、模擬器測試與憑證設定,皆在遠端 macOS 環境中執行。SSH 與 VNC 存取的是同一份檔案,請避免手動修改 runner 正在使用的工作目錄。

真機除錯需另行安排

本機連接的 iPhone 不會因為開啟 VNC 就出現在雲端 Xcode 中。真機測試需要另外安排裝置連線與測試流程;您可以先在雲端產生已簽署的建置版本,再依團隊既有的發佈流程交付測試裝置。

分別管理專案、快取與產物

少量檔案直接傳,重複同步用增量

儲存庫用於管理版本歷史,檔案同步則用於工作副本與產物。請勿將憑證、私鑰和權杖混在一般專案目錄中傳輸;上傳前先檢查忽略規則與目標路徑。

scp:傳輸單次建置產物

適合傳輸單一封存檔或資源包。以下指令會從遠端下載已產生的壓縮檔;請將遠端目錄與檔名替換為實際路徑。

scp -P "$SSH_PORT" \
  "$MAC_USER@$MAC_HOST:build/ios-build.zip" \
  ./ios-build.zip

scp 的連接埠參數要用大寫 -P。完成後檢查檔案大小;若要驗證內容是否一致,再比較兩端的校驗和。

rsync:同步專案工作副本

適合反覆同步同一個目錄。第一次先執行預演,確認目標路徑與排除項目;路徑結尾的斜線代表同步目錄中的內容。

rsync -avn \
  -e "ssh -p $SSH_PORT" \
  --exclude '.git/' \
  --exclude 'DerivedData/' \
  ./project/ "$MAC_USER@$MAC_HOST:project/"

確認預演結果後,將 -avn 改成 -av 再執行。此處未使用刪除參數,避免將本機缺少的檔案直接從遠端移除。

先選好連線位置,再執行第一項工作

選擇距離最近的節點

互動式開發要看辦公網路,持續建置則要看儲存庫與產物的位置。下單時選擇節點,實際可用狀態以控制台即時資訊為準。