連線、建置與診斷

將雲端 Mac 問題拆解成可執行的檢查項目

這裡不從模糊的「再試一次」開始。先確認連線入口,再核對工具鏈、相依套件、簽署資料、磁碟與記錄。每一步都列出要觀察的回傳資訊,適用於 OakVPS 獨享實體機上的 iOS 建置、macOS 自動化與 MLX 實驗。

已有訂單的問題請登入控制台提交工單;不要在公開頁面傳送私鑰、簽署憑證密碼或完整付款資料。

依任務進入

先找出問題發生在哪個階段

六類入口同時展開。若問題跨越多個階段,請從最早出現異常的環節開始,不要先清空整個環境。

SSH

首次連線

檢查金鑰權限、主機指紋、使用者名稱、連接埠與本地網路,確認連線失敗發生在驗證前還是驗證後。

開始排查連線
XCODE

Xcode 建置

核對目前工具鏈、專案 scheme、相依套件狀態、簽署檔案、磁碟剩餘空間與可匯出的結果封裝。

查看建置指令
FASTLANE

自動化流程

區分 Ruby 環境、外掛程式、lane 參數與 Xcode 回傳錯誤,保留完整記錄,而不是只截取最後一行。

檢查自動化輸出
TRANSFER

檔案傳輸

先封裝產物並產生校驗值,再傳輸封存檔;避免直接搬移仍在寫入的建置目錄或相依套件快取。

查看交接順序
SESSION

遠端開發工作階段

確認本地網路穩定、工作能在中斷連線後繼續,並在離開裝置前結束互動工作階段與清理暫存資料。

核對工作階段邊界
MLX

MLX 環境

依統一記憶體、模型檔案、隔離環境與實驗記錄進行檢查,不要用無法複核的速度數字判斷環境是否正常。

檢查實驗環境
首次連線基準

SSH 連線失敗時,依握手順序檢查

先保存原始錯誤,再逐項只修改一個變數。連續修改使用者名稱、連接埠與金鑰,會讓錯誤原因失去定位價值。

01

金鑰權限

在本地執行 chmod 600 ~/.ssh/oakvps_key。若私鑰可被其他使用者讀取,SSH 用戶端會在開始驗證前拒絕使用它。

02

主機指紋

首次連線時,先將終端機顯示的指紋與控制台連線資訊核對,再進行確認。主機資訊變更時,不要直接刪除舊記錄並跳過驗證。

03

使用者名稱

使用訂單連線資訊中提供的系統使用者名稱,不要將電子郵件地址或本地電腦使用者名稱代入遠端指令。

04

連接埠

明確傳入連線資訊中的連接埠,例如 ssh -p 22 user@host。逾時通常發生在驗證前,權限遭拒通常發生在驗證階段。

05

放行網路

確認公司網路、VPN、本地防火牆與出口策略允許目標連接埠。可以改用可信任網路重新測試,但不要在不可信任的網路傳輸專案憑證。

06

首次確認

成功登入後先執行 whoami、sw_vers 與 df -h,記錄使用者、系統版本與磁碟剩餘空間,再匯入專案資料。

指令回傳定位

分開檢視連線、建置與自動化輸出

終端機中的最後一行通常只是結果,不一定是原因。以下三段指令分別確認連線身分、Xcode 建置入口與 fastlane lane 狀態。執行前請將範例參數替換為自己的連線資訊、工作區與 scheme。

  • 連線成功可回傳遠端使用者名稱、系統版本與磁碟資訊。
  • 建置入口有效工作區、scheme 與目標平台可由 Xcode 正確識別。
  • 自動化流程可讀Bundler、外掛程式與 lane 的錯誤各自保留完整上下文。
oakvps-task-session

確認連線與環境

$ ssh -i ~/.ssh/oakvps_key -p 22 oak@203.0.113.10
$ whoami
oak
$ sw_vers -productVersion
15.x
$ df -h /

觀察重點:若指令已回傳遠端使用者名稱,表示網路與驗證階段已通過;後續問題應轉向系統權限或專案環境。

Xcode 建置入口

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcodebuild -version
Xcode 16.x
$ xcodebuild -workspace App.xcworkspace \
  -scheme App \
  -destination 'generic/platform=iOS' \
  build | tee build.log

觀察重點:先確認開發者目錄,再檢查工作區與 scheme。保留 build.log,不要只複製結尾的失敗摘要。

fastlane 輸出節錄

$ bundle exec fastlane lanes
$ bundle exec fastlane ios build \
  --verbose 2>&1 | tee fastlane.log
[09:24:18]: Driving the lane 'ios build'
[09:24:19]: Resolving package dependencies

觀察重點:能列出 lane 表示 Ruby 相依套件入口可用。若後續失敗,應繼續尋找記錄中最早出現的錯誤,而不是只看結束代碼。

建置失敗診斷

依相依關係檢查,不要先重新安裝整個環境

版本、快取、簽署、磁碟與記錄彼此影響。以下順序可減少無關變更,並讓下一位接手者重現相同故障。

建置失敗的檢查順序、指令與判斷依據
順序 檢查對象 執行或記錄 判斷依據
01 Xcode 版本 xcodebuild -version 與 xcode-select -p 專案要求的工具鏈與目前活動目錄一致,命令列與圖形介面沒有指向不同版本。
02 相依套件快取 先記錄鎖定檔,再查看 Swift Package、CocoaPods 或專案自有快取狀態。 鎖定檔未被意外改寫;只清理與目前錯誤相關的快取,不刪除仍可重複使用的所有相依套件。
03 簽署資料 核對目標、bundle 識別碼、憑證有效性與 provisioning profile 的對應關係。 資料與目前建置目標相符,密碼與私密內容不會進入記錄、儲存庫或工單附件。
04 磁碟空間 df -h、專案目錄大小與 DerivedData 大小。 建置目錄、相依套件、封存檔與暫存檔有足夠空間;異常增長的目錄已單獨識別。
05 完整記錄 使用 tee 同時顯示並保存輸出,記錄指令、時間與結束代碼。 記錄包含最早錯誤、上下文與最終結束狀態,其他工程師可依相同指令重現。
相依套件問題

先比較鎖定檔,再清理快取

如果相依套件解析突然變化,先檢查提交前後的鎖定檔差異、套件來源設定與網路結果。只有確認快取本身損壞時,才刪除相應範圍,避免將可重現問題變成一次性狀態。

簽署問題

區分資料缺失與目標不匹配

錯誤可能來自憑證不可用、描述檔與 bundle 識別碼不一致,或建置目標選錯。記錄錯誤代碼與目標名稱,但不要將憑證密碼、私鑰或完整簽署資料寫入工單。

記錄問題

保留首次失敗的完整上下文

重複執行可能改變快取與暫存檔。首次失敗後先保存記錄、指令、工作區狀態與磁碟資訊,再進行單一變數重新測試,以便判斷修改是否真正解決問題。

工作階段與產物交接

讓遠端開發工作階段與檔案交付各自可恢復

遠端視窗只是操作入口,不應成為保存工作狀態的唯一位置。指令、記錄、產物與校驗值都應存放在明確目錄。

遠端工作階段

連線前、離開前各做一次狀態確認

  1. 01
    連線前準備

    確認本地網路、主機指紋、目標使用者名稱與專案資料來源。敏感檔案只在工作需要時匯入。

  2. 02
    讓長時間工作脫離視窗

    讓建置或實驗在可恢復的工作階段管理方式中執行,並將標準輸出同時寫入記錄檔。

  3. 03
    離開時登出

    確認檔案已保存、工作狀態已記錄,再結束圖形介面或 SSH 工作階段,不要將未保存的編輯留在視窗中。

  4. 04
    撤銷權限

    團隊成員離開或工作結束後,撤銷不再需要的金鑰與存取權限,並核對共用目錄。

檔案交接

分開處理產物、記錄與敏感資料

  1. 01
    停止寫入

    確認建置已結束,再封存產物。不要傳輸仍在產生中的目錄或資料庫檔案。

  2. 02
    產生清單

    記錄檔名、建置版本、環境版本、產生指令與校驗值,讓接收方能核對完整性。

  3. 03
    下載複核

    在本地解壓縮並檢查關鍵檔案,確認封存檔不是空目錄,也沒有遺漏必要記錄。

  4. 04
    清理敏感檔案

    依團隊策略刪除暫存金鑰、權杖、簽署資料與不再需要的模型副本,同時保留可公開的建置記錄。

MLX 實驗檢查項目

先記錄模型、環境與記憶體界線,再討論實驗結果

MLX 使用 Apple Silicon 的統一記憶體。模型檔案、執行時佔用、上下文長度與中間結果都會共同影響可用空間,因此不能只看模型檔案本身的大小,也不應以單次執行時間推斷環境效能。

三種方案皆為獨享實體機:基礎方案採用 M4、16GB 記憶體與 256GB 儲存空間;進階方案採用 M4、24GB 記憶體與 512GB 儲存空間;高記憶體方案採用 M4 Pro、64GB 記憶體與 2TB 儲存空間。具體選擇應以模型、資料集與並行工作負載的實際佔用量為依據。

01

隔離實驗環境

為每個專案固定 Python 環境與相依套件版本,保存可重現的相依套件清單,不要在系統環境中混裝多個實驗版本。

02

核對模型檔案大小

分別記錄下載套件、解壓縮後檔案、快取與輸出目錄的大小,並為暫存檔預留空間,避免實驗中途因磁碟不足而中斷。

03

選擇記憶體方案

使用活動監視器資訊或命令列記錄峰值佔用量。若系統持續出現明顯記憶體壓力,應減少並行工作、縮小任務或調整設定,而不是只重複執行。

04

保留實驗記錄

寫下程式碼版本、相依套件版本、模型識別碼、參數、輸入摘要、輸出位置與異常資訊,讓下一次執行能在相同條件下重現。

提交支援請求前

將工單整理成一份可重現的記錄

支援人員需要知道問題發生在哪個訂單、哪個節點、哪一步與哪個時間段。資訊越具體,就越容易直接進入診斷。

訂單識別碼

提供控制台中可見的訂單識別碼,不要傳送付款憑據或完整支付資料。

必填
實體節點

寫明訂單使用的節點以及目前連線入口,方便區分網路路徑與環境範圍。

必填
發生時間

使用含時區的時間,並說明問題是持續發生、間歇發生,還是只在一次工作中出現。

必填
重現步驟

從正常狀態開始,依序列出指令、參數、預期結果與實際結果,不要省略中間操作。

必填
去識別化記錄

附上完整錯誤上下文與結束代碼,移除私鑰、權杖、憑證密碼、儲存庫憑據與專案敏感內容。

建議附上

需要一台可直接開始工作的雲端 Mac?

選擇 Oak M4、Oak M4 Plus 或 Oak M4 Pro,依工作週期租用獨享實體機。下單後可在控制台查看訂單、連線資訊與支援工單。