首次連線
檢查金鑰權限、主機指紋、使用者名稱、連接埠與本地網路,確認連線失敗發生在驗證前還是驗證後。
開始排查連線這裡不從模糊的「再試一次」開始。先確認連線入口,再核對工具鏈、相依套件、簽署資料、磁碟與記錄。每一步都列出要觀察的回傳資訊,適用於 OakVPS 獨享實體機上的 iOS 建置、macOS 自動化與 MLX 實驗。
已有訂單的問題請登入控制台提交工單;不要在公開頁面傳送私鑰、簽署憑證密碼或完整付款資料。
六類入口同時展開。若問題跨越多個階段,請從最早出現異常的環節開始,不要先清空整個環境。
檢查金鑰權限、主機指紋、使用者名稱、連接埠與本地網路,確認連線失敗發生在驗證前還是驗證後。
開始排查連線核對目前工具鏈、專案 scheme、相依套件狀態、簽署檔案、磁碟剩餘空間與可匯出的結果封裝。
查看建置指令區分 Ruby 環境、外掛程式、lane 參數與 Xcode 回傳錯誤,保留完整記錄,而不是只截取最後一行。
檢查自動化輸出先封裝產物並產生校驗值,再傳輸封存檔;避免直接搬移仍在寫入的建置目錄或相依套件快取。
查看交接順序確認本地網路穩定、工作能在中斷連線後繼續,並在離開裝置前結束互動工作階段與清理暫存資料。
核對工作階段邊界依統一記憶體、模型檔案、隔離環境與實驗記錄進行檢查,不要用無法複核的速度數字判斷環境是否正常。
檢查實驗環境先保存原始錯誤,再逐項只修改一個變數。連續修改使用者名稱、連接埠與金鑰,會讓錯誤原因失去定位價值。
在本地執行 chmod 600 ~/.ssh/oakvps_key。若私鑰可被其他使用者讀取,SSH 用戶端會在開始驗證前拒絕使用它。
首次連線時,先將終端機顯示的指紋與控制台連線資訊核對,再進行確認。主機資訊變更時,不要直接刪除舊記錄並跳過驗證。
使用訂單連線資訊中提供的系統使用者名稱,不要將電子郵件地址或本地電腦使用者名稱代入遠端指令。
明確傳入連線資訊中的連接埠,例如 ssh -p 22 user@host。逾時通常發生在驗證前,權限遭拒通常發生在驗證階段。
確認公司網路、VPN、本地防火牆與出口策略允許目標連接埠。可以改用可信任網路重新測試,但不要在不可信任的網路傳輸專案憑證。
成功登入後先執行 whoami、sw_vers 與 df -h,記錄使用者、系統版本與磁碟剩餘空間,再匯入專案資料。
終端機中的最後一行通常只是結果,不一定是原因。以下三段指令分別確認連線身分、Xcode 建置入口與 fastlane lane 狀態。執行前請將範例參數替換為自己的連線資訊、工作區與 scheme。
$ ssh -i ~/.ssh/oakvps_key -p 22 oak@203.0.113.10
$ whoami
oak
$ sw_vers -productVersion
15.x
$ df -h /
觀察重點:若指令已回傳遠端使用者名稱,表示網路與驗證階段已通過;後續問題應轉向系統權限或專案環境。
$ 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,不要只複製結尾的失敗摘要。
$ 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 識別碼不一致,或建置目標選錯。記錄錯誤代碼與目標名稱,但不要將憑證密碼、私鑰或完整簽署資料寫入工單。
重複執行可能改變快取與暫存檔。首次失敗後先保存記錄、指令、工作區狀態與磁碟資訊,再進行單一變數重新測試,以便判斷修改是否真正解決問題。
遠端視窗只是操作入口,不應成為保存工作狀態的唯一位置。指令、記錄、產物與校驗值都應存放在明確目錄。
確認本地網路、主機指紋、目標使用者名稱與專案資料來源。敏感檔案只在工作需要時匯入。
讓建置或實驗在可恢復的工作階段管理方式中執行,並將標準輸出同時寫入記錄檔。
確認檔案已保存、工作狀態已記錄,再結束圖形介面或 SSH 工作階段,不要將未保存的編輯留在視窗中。
團隊成員離開或工作結束後,撤銷不再需要的金鑰與存取權限,並核對共用目錄。
確認建置已結束,再封存產物。不要傳輸仍在產生中的目錄或資料庫檔案。
記錄檔名、建置版本、環境版本、產生指令與校驗值,讓接收方能核對完整性。
在本地解壓縮並檢查關鍵檔案,確認封存檔不是空目錄,也沒有遺漏必要記錄。
依團隊策略刪除暫存金鑰、權杖、簽署資料與不再需要的模型副本,同時保留可公開的建置記錄。
MLX 使用 Apple Silicon 的統一記憶體。模型檔案、執行時佔用、上下文長度與中間結果都會共同影響可用空間,因此不能只看模型檔案本身的大小,也不應以單次執行時間推斷環境效能。
三種方案皆為獨享實體機:基礎方案採用 M4、16GB 記憶體與 256GB 儲存空間;進階方案採用 M4、24GB 記憶體與 512GB 儲存空間;高記憶體方案採用 M4 Pro、64GB 記憶體與 2TB 儲存空間。具體選擇應以模型、資料集與並行工作負載的實際佔用量為依據。
為每個專案固定 Python 環境與相依套件版本,保存可重現的相依套件清單,不要在系統環境中混裝多個實驗版本。
分別記錄下載套件、解壓縮後檔案、快取與輸出目錄的大小,並為暫存檔預留空間,避免實驗中途因磁碟不足而中斷。
使用活動監視器資訊或命令列記錄峰值佔用量。若系統持續出現明顯記憶體壓力,應減少並行工作、縮小任務或調整設定,而不是只重複執行。
寫下程式碼版本、相依套件版本、模型識別碼、參數、輸入摘要、輸出位置與異常資訊,讓下一次執行能在相同條件下重現。
支援人員需要知道問題發生在哪個訂單、哪個節點、哪一步與哪個時間段。資訊越具體,就越容易直接進入診斷。
提供控制台中可見的訂單識別碼,不要傳送付款憑據或完整支付資料。
必填寫明訂單使用的節點以及目前連線入口,方便區分網路路徑與環境範圍。
必填使用含時區的時間,並說明問題是持續發生、間歇發生,還是只在一次工作中出現。
必填從正常狀態開始,依序列出指令、參數、預期結果與實際結果,不要省略中間操作。
必填附上完整錯誤上下文與結束代碼,移除私鑰、權杖、憑證密碼、儲存庫憑據與專案敏感內容。
建議附上選擇 Oak M4、Oak M4 Plus 或 Oak M4 Pro,依工作週期租用獨享實體機。下單後可在控制台查看訂單、連線資訊與支援工單。