ENGINEERING SUPPORT

先保留證據,再縮小雲端 Mac 的故障範圍

這是一份依執行順序編排的工程指南。先核對裝置與網路,再檢查 Xcode、簽署與 CI 環境,最後處理儲存裝置、升級與復原,避免在多個變數之間反覆試錯。

6 類 工程問題入口
5 個 可選節點
365 天 節點正常運作
診斷執行單 RUN / SUPPORT
依相依順序核對

連線 → 環境 → 建置 → 資料

READY
01 / 裝置
裝置識別碼、節點、主機指紋
02 / 網路
本地連線、路由、連接埠與延遲
03 / 工具鏈
macOS、Xcode、憑證與相依項目
04 / 任務
重現指令、記錄、結束碼與時間
提交工單前 將記錄去識別化,並記錄已完成的步驟
CONNECTION ORDER

連線失敗時,先確認目標機器,再確認連線工具

主機位址、連接埠與認證資料尚未核對前,不要反覆切換用戶端。以下四個步驟應依序完成,每一步都為下一步提供可驗證的輸入。

  1. 01

    讀取裝置資料

    登入控制台,在對應訂單中核對裝置識別碼、所選節點、主機位址、SSH 連接埠與目前認證資料。平行使用多台裝置時,先將訂單號碼與裝置識別碼逐一對應。

    保留 訂單號碼、裝置識別碼、節點、連接埠
  2. 02

    核對主機指紋

    首次連線時,應將用戶端顯示的指紋與控制台記錄比對。裝置重新安裝後若指紋變更,先確認變更記錄,再清除本地舊項目,不得直接忽略警告。

    ssh-keygen -R example-host
    ssh -p 22 user@example-host
  3. 03

    先建立 SSH 基線

    先使用有線網路測試 DNS、連接埠與 SSH。成功後記錄登入時間、出口網路與命令列回應;失敗時保留完整錯誤資訊,不要只截取「連線失敗」一行。

    判斷 逾時通常偏向路由或連接埠問題;拒絕連線通常偏向目標服務;驗證失敗則優先核對認證資料與權限。
  4. 04

    再設定圖形介面連線

    只有 SSH 基線穩定後,才繼續核對圖形介面所需的位址、連接埠、用戶端版本與本地防火牆。畫面卡頓時,同步記錄解析度、編碼設定與網路延遲。

    界線 圖形介面可用,不代表高位元率媒體預覽等同本地顯示效果,應依實際鏈路驗證。
NETWORK MEASUREMENT

在相同基準下比較五個節點的 ping 中位數

下表展示從主要城市前往新加坡、日本(東京)、韓國(首爾)、香港與美國西部的路由差異。資料僅供選點參考,不代表應用程式吞吐量、圖形介面影格率或任務完成時間的承諾。

測試時段 工作日 14:00–16:00 UTC+8
樣本數 每個節點 50 次
連線方式 千兆有線網路
統計值 往返延遲中位數
從三個主要城市到五個 VMDebug 節點的 ping 中位數參考,單位為毫秒
測試來源 電信業者 新加坡 日本(東京) 韓國(首爾) 香港 美國西部
上海 中國電信 71 ms 42 ms 46 ms 34 ms 141 ms
深圳 中國聯通 44 ms 55 ms 59 ms 18 ms 157 ms
北京 中國移動 91 ms 48 ms 39 ms 63 ms 138 ms
先測本地

排除 Wi-Fi 與本地出口波動

使用網路線直連,暫停大型檔案同步、視訊會議與系統更新。連續測試本地閘道與節點位址;如果兩者同時抖動,應先處理本地連線。

再看路由

中位數無法說明全部使用體驗

遠端互動還會受到丟包、抖動、上行頻寬與用戶端編碼影響。提交網路問題時,應同時提供電信業者、城市、測試時段、樣本數與路由追蹤結果。

XCODE DIAGNOSTICS

簽署失敗不要先刪除環境,依五層相依關係逐項收斂

同一個錯誤可能源自憑證不可用、描述檔不相符、Keychain 無存取權限、快取污染或建置參數差異。先保存原始記錄,再依下列順序檢查。

  1. 01

    憑證

    確認目標憑證存在且未過期,憑證與私鑰能夠配對,且目前建置使用者可以讀取。先列出簽署身分,不要直接重新匯入全部材料。

    security find-identity -v -p codesigning
  2. 02

    Provisioning Profile

    核對 Bundle Identifier、團隊識別碼、憑證類型、裝置範圍與功能宣告。手動簽署專案應確認設定實際指向目標檔案,而不是舊快取。

    CODE_SIGN_STYLE / PROVISIONING_PROFILE_SPECIFIER
  3. 03

    Keychain 權限

    CI 使用者與互動式登入使用者可能使用不同的 Keychain 搜尋清單。確認目標 Keychain 已解鎖、加入搜尋路徑,並允許建置程序讀取私鑰。

    security list-keychains
  4. 04

    DerivedData

    先記錄目前路徑與失敗任務,再只清理對應專案的衍生資料。不要把刪除全部快取當成第一步,否則會失去可比較的建置證據。

    xcodebuild -showBuildSettings
  5. 05

    建置記錄

    保存完整指令、Scheme、Configuration、SDK、Xcode 版本、結束碼與首次失敗位置。優先查看第一個根因錯誤,而不是最後一行摘要。

    xcodebuild -version
CI/CD RUNNER

把執行器視為可重現的執行單,而不是長期堆積的工作目錄

獨享實體 Mac 可以持續執行建置任務,但穩定性仍取決於身分、目錄、快取、金鑰與回滾邊界。每次變更都應能回答「改了什麼、如何驗證、如何撤回」。

執行器接入檢查清單 5 CHECKS
  1. 01

    註冊執行器身分

    為每台裝置使用易於識別的執行器名稱與標籤,記錄註冊範圍、服務使用者與啟動方式。避免多個執行器共用無法區分的名稱。

  2. 02

    隔離工作目錄

    依儲存庫、分支或任務建立獨立目錄,禁止並行任務寫入同一個 DerivedData、封存目錄或相依輸出位置。

  3. 03

    設定快取邊界

    區分可重建快取與必須保留的產物。清理前記錄目錄大小、最近使用時間與任務歸屬,避免整個磁碟刪除造成冷啟動。

  4. 04

    在執行時注入金鑰

    金鑰只在任務需要時進入程序環境或暫存 Keychain,關閉記錄回顯,任務結束後刪除暫存材料並鎖定存取權。

  5. 05

    定義失敗回滾

    更新執行器、Xcode 或相依項目前保留版本記錄。驗證失敗時,復原設定檔、工具鏈選擇與快取索引,而不是繼續疊加修改。

工作目錄

每個任務產生唯一路徑

路徑至少包含專案識別碼、任務識別碼與嘗試次數。清理動作只能命中本次任務目錄,避免誤刪並行建置。

WORK_ROOT="$HOME/ci-work"
JOB_DIR="$WORK_ROOT/$PROJECT/$RUN_ID"
mkdir -p "$JOB_DIR"
失敗證據

結束前封存四類資訊

保存執行器版本、工具鏈版本、完整結束碼與第一個根因記錄。快取命中率與磁碟可用空間也應寫入任務摘要,方便比較前後差異。

  • 執行器與 macOS 版本
  • Xcode 路徑與版本
  • 指令、結束碼與記錄
  • 磁碟可用空間與快取狀態
STORAGE & TB5

掛載附加儲存裝置前先建立可復原副本,並聯前先畫清拓撲

附加儲存裝置與 Thunderbolt 5 並聯會改變資料路徑與權限邊界。任何格式化、掛載點調整或裝置中斷連線,都應先確認資料副本與任務已停止。

附加儲存裝置

掛載前檢查

  1. 確認資料副本

    重要程式碼、素材、建置產物與設定至少保留一份獨立副本。尚未驗證的掛載磁碟區不能作為唯一儲存位置。

  2. 記錄磁碟身分

    記錄磁碟區名稱、檔案系統、容量、裝置識別碼與預期掛載點,避免只依顯示順序判斷目標磁碟。

  3. 核對存取權限

    確認執行建置或媒體任務的使用者擁有所需目錄權限,不要透過全域放寬權限來迴避擁有者問題。

  4. 執行讀寫驗證

    先使用可刪除的測試檔案驗證建立、讀取、重新命名與刪除,再移轉實際工作目錄。

Thunderbolt 5

多台裝置並聯順序

  1. 畫出實體拓撲

    標示每台 Mac、纜線方向、共用儲存裝置與任務角色。無法識別上下游裝置時,不要調整連線。

  2. 統一權限邊界

    確定由哪台裝置寫入、哪些裝置僅供讀取,並為自動化任務設定獨立目錄,避免並行覆寫。

  3. 逐台驗證鏈路

    每增加一台裝置就完成一次連線、權限與讀寫測試,不要等全部接線完成後才集中排查。

  4. 依任務反向中斷連線

    先停止寫入與建置任務,確認快取已寫入磁碟,再卸載磁碟區,並從鏈路末端開始中斷裝置。

UPGRADE & RECOVERY

系統升級要有驗證機、基線與回退材料

所有節點全年 365 天正常運作,平台不安排週期性停機。macOS 與工具鏈升級由使用者依任務節奏安排變更時段,先在非關鍵任務上驗證,再套用至長期執行器。

升級執行順序 6 PHASES
  1. 01

    建立快照式清單

    匯出程式碼狀態、相依鎖定檔、Homebrew 清單、Xcode 路徑、憑證名稱、Keychain 清單、執行器設定與磁碟可用空間。

  2. 02

    備份不可重建資料

    將私有設定、簽署材料、建置產物與專案資料移出至獨立位置,並實際驗證至少一個檔案可以復原。

  3. 03

    驗證工具鏈相容性

    核對目標 macOS、Xcode、命令列工具、套件管理器、執行器與專案相依項目的相容範圍,記錄必須保留的舊版本。

  4. 04

    暫停寫入任務

    停止 CI 佇列、素材處理與資料同步,確認沒有程序繼續寫入工作目錄、快取或附加儲存裝置。

  5. 05

    完成最小驗收

    升級後依序驗證 SSH、磁碟、Xcode 版本、憑證讀取、相依項目復原、測試、封存與產物下載。

  6. 06

    記錄新基線

    保存第一個成功任務的耗時、記錄、快取狀態與磁碟可用空間,再逐步恢復並行任務,不要一次開放全部佇列。

停止條件

出現這些情況時先回退

  • 關鍵憑證或私鑰無法讀取
  • 專案要求的 Xcode 版本無法使用
  • 附加儲存裝置出現唯讀或掛載異常
  • 同一基線指令產生新的穩定失敗

根因尚未明確時,不要連續升級多個元件,否則記錄無法區分系統、工具鏈與專案設定的影響。

工單資料

讓支援人員能直接重現

  • 訂單號碼與裝置識別碼
  • 問題發生時段與所選節點
  • macOS、Xcode 與執行器版本
  • 最小重現步驟與預期結果
  • 已去識別化的完整記錄與結束碼
  • 已完成的檢查及其結果
提交控制台工單
NEXT ACTION

記錄已去識別化,就把執行單交給支援團隊

現有訂單問題請在控制台提交工單,並附上裝置識別碼、重現步驟與完整錯誤上下文。尚未下單的設定問題,可透過唯一支援信箱聯絡。

support@vmdebug.com