SSH:適合重複執行的工作
適用於 xcodebuild 編譯與測試、runner 註冊與記錄檔檢查,以及 scp、rsync 檔案同步。建置記錄是文字,不需要持續傳輸桌面畫面。
- 將相依套件安裝、測試與封存納入工作流程,減少手動操作。
- 檢查 runner 程序、工作目錄、剩餘磁碟空間與失敗記錄。
- 透過服務管理 runner,避免長時間工作綁定單次 SSH 連線。
適用階段:PR 驗證、nightly 建置、批次封裝與產物同步。
一台獨享 Mac・兩種連線方式
透過命令列與圖形桌面連線至同一台實體 Mac mini。讓 runner 持續執行工作;需要檢查 Xcode、模擬器或憑證設定時,再開啟螢幕共享。
Apple Silicon M4・兩種方案・每天 $20 起。整台機器僅供一位客戶使用,並非虛擬機。
工作持續執行,桌面按需開啟
共用同一份專案、磁碟與工具鏈,不必重複設定兩台機器。桌面操作同樣會占用整台機器的資源。
先分工,再連線
兩種方式可以並用。選擇連線方式的依據是工作是否需要圖形介面,而不是有沒有人坐在電腦前。
適用於 xcodebuild 編譯與測試、runner 註冊與記錄檔檢查,以及 scp、rsync 檔案同步。建置記錄是文字,不需要持續傳輸桌面畫面。
適用階段:PR 驗證、nightly 建置、批次封裝與產物同步。
適用於 Xcode 圖形介面、模擬器操作、鑰匙圈與憑證設定。可使用 macOS 內建的螢幕共享,或相容的 VNC 用戶端連線。
適用階段:環境初始化、圖形介面疑難排解與發佈前人工檢查。
首次連線
登入控制台,開啟對應的執行個體詳情。連線位址、使用者名稱、連接埠與驗證方式均以執行個體顯示的資訊為準;SSH 連接埠不可直接當作 VNC 連接埠。
核對執行個體 ID 與節點,分別記下 SSH 和 VNC 連線資訊。首次連線前確認執行個體已可使用;若控制台尚未提供憑證,請保留訂單資訊並透過控制台工單查詢,不要反覆猜測位址或密碼。
使用執行個體提供的連接埠和使用者名稱連線。首次出現主機指紋提示時,請先核對;若同一位址的指紋突然改變,請停止連線並確認執行個體是否已重新配置。
ssh -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
sw_vers
uname -m
xcode-select -p
df -h
先在本機終端機將變數設為控制台顯示的實際值。連線成功後,檢查 macOS、架構、開發者目錄與磁碟空間。
在本機 macOS 開啟「螢幕共享」,輸入執行個體提供的 VNC 位址與連接埠;其他系統則使用相容的用戶端。依執行個體的驗證方式登入,先確認看得到桌面且能操作滑鼠,再開啟 Xcode。若連線失敗,依序檢查位址、連接埠、驗證資訊與本機網路限制。
首次登入後,依執行個體支援的方式更新初始憑證,並為團隊成員分別管理 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 專案檢查、編譯封存、模擬器測試與憑證設定,皆在遠端 macOS 環境中執行。SSH 與 VNC 存取的是同一份檔案,請避免手動修改 runner 正在使用的工作目錄。
本機連接的 iPhone 不會因為開啟 VNC 就出現在雲端 Xcode 中。真機測試需要另外安排裝置連線與測試流程;您可以先在雲端產生已簽署的建置版本,再依團隊既有的發佈流程交付測試裝置。
分別管理專案、快取與產物
儲存庫用於管理版本歷史,檔案同步則用於工作副本與產物。請勿將憑證、私鑰和權杖混在一般專案目錄中傳輸;上傳前先檢查忽略規則與目標路徑。
適合傳輸單一封存檔或資源包。以下指令會從遠端下載已產生的壓縮檔;請將遠端目錄與檔名替換為實際路徑。
scp -P "$SSH_PORT" \
"$MAC_USER@$MAC_HOST:build/ios-build.zip" \
./ios-build.zip
scp 的連接埠參數要用大寫 -P。完成後檢查檔案大小;若要驗證內容是否一致,再比較兩端的校驗和。
適合反覆同步同一個目錄。第一次先執行預演,確認目標路徑與排除項目;路徑結尾的斜線代表同步目錄中的內容。
rsync -avn \
-e "ssh -p $SSH_PORT" \
--exclude '.git/' \
--exclude 'DerivedData/' \
./project/ "$MAC_USER@$MAC_HOST:project/"
確認預演結果後,將 -avn 改成 -av 再執行。此處未使用刪除參數,避免將本機缺少的檔案直接從遠端移除。
先選好連線位置,再執行第一項工作
互動式開發要看辦公網路,持續建置則要看儲存庫與產物的位置。下單時選擇節點,實際可用狀態以控制台即時資訊為準。