連線 → 環境 → 建置 → 資料
- 01 / 裝置
- 裝置識別碼、節點、主機指紋
- 02 / 網路
- 本地連線、路由、連接埠與延遲
- 03 / 工具鏈
- macOS、Xcode、憑證與相依項目
- 04 / 任務
- 重現指令、記錄、結束碼與時間
這是一份依執行順序編排的工程指南。先核對裝置與網路,再檢查 Xcode、簽署與 CI 環境,最後處理儲存裝置、升級與復原,避免在多個變數之間反覆試錯。
連線 → 環境 → 建置 → 資料
六類入口分別處理身分確認、系統變更、開發工具、自動化任務、網路路徑與訂單資訊。每一類都說明先檢查什麼、保留什麼,以及何時提交工單。
取得連線資料、核對主機指紋、建立 SSH 工作階段,並在啟用圖形介面前排除基本網路問題。
進入連線順序 02 / SYSTEM在變更系統前保存資料、版本與復原材料,驗證工具鏈後再讓裝置執行長期任務。
查看升級與復原 03 / TOOLCHAIN依序檢查憑證、描述檔、Keychain 權限、DerivedData 與建置記錄,定位 Xcode 失敗原因。
進入 Xcode 排障 04 / RUNNER核對執行器身分、工作目錄、快取邊界、金鑰注入方式,以及失敗後可重複執行的回滾路徑。
查看執行器清單 05 / NETWORK使用有線網路、固定樣本數與相同時段比較五個節點,先區分本地連線與跨境路由的影響。
查看延遲測量 06 / ORDER使用訂單號碼與裝置識別碼關聯問題,不要在記錄或工單中提交完整卡號、私鑰或帳戶密碼。
準備工單資料主機位址、連接埠與認證資料尚未核對前,不要反覆切換用戶端。以下四個步驟應依序完成,每一步都為下一步提供可驗證的輸入。
登入控制台,在對應訂單中核對裝置識別碼、所選節點、主機位址、SSH 連接埠與目前認證資料。平行使用多台裝置時,先將訂單號碼與裝置識別碼逐一對應。
首次連線時,應將用戶端顯示的指紋與控制台記錄比對。裝置重新安裝後若指紋變更,先確認變更記錄,再清除本地舊項目,不得直接忽略警告。
ssh-keygen -R example-host
ssh -p 22 user@example-host
先使用有線網路測試 DNS、連接埠與 SSH。成功後記錄登入時間、出口網路與命令列回應;失敗時保留完整錯誤資訊,不要只截取「連線失敗」一行。
只有 SSH 基線穩定後,才繼續核對圖形介面所需的位址、連接埠、用戶端版本與本地防火牆。畫面卡頓時,同步記錄解析度、編碼設定與網路延遲。
下表展示從主要城市前往新加坡、日本(東京)、韓國(首爾)、香港與美國西部的路由差異。資料僅供選點參考,不代表應用程式吞吐量、圖形介面影格率或任務完成時間的承諾。
| 測試來源 | 電信業者 | 新加坡 | 日本(東京) | 韓國(首爾) | 香港 | 美國西部 |
|---|---|---|---|---|---|---|
| 上海 | 中國電信 | 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 |
使用網路線直連,暫停大型檔案同步、視訊會議與系統更新。連續測試本地閘道與節點位址;如果兩者同時抖動,應先處理本地連線。
遠端互動還會受到丟包、抖動、上行頻寬與用戶端編碼影響。提交網路問題時,應同時提供電信業者、城市、測試時段、樣本數與路由追蹤結果。
同一個錯誤可能源自憑證不可用、描述檔不相符、Keychain 無存取權限、快取污染或建置參數差異。先保存原始記錄,再依下列順序檢查。
確認目標憑證存在且未過期,憑證與私鑰能夠配對,且目前建置使用者可以讀取。先列出簽署身分,不要直接重新匯入全部材料。
security find-identity -v -p codesigning
核對 Bundle Identifier、團隊識別碼、憑證類型、裝置範圍與功能宣告。手動簽署專案應確認設定實際指向目標檔案,而不是舊快取。
CODE_SIGN_STYLE / PROVISIONING_PROFILE_SPECIFIER
CI 使用者與互動式登入使用者可能使用不同的 Keychain 搜尋清單。確認目標 Keychain 已解鎖、加入搜尋路徑,並允許建置程序讀取私鑰。
security list-keychains
先記錄目前路徑與失敗任務,再只清理對應專案的衍生資料。不要把刪除全部快取當成第一步,否則會失去可比較的建置證據。
xcodebuild -showBuildSettings
保存完整指令、Scheme、Configuration、SDK、Xcode 版本、結束碼與首次失敗位置。優先查看第一個根因錯誤,而不是最後一行摘要。
xcodebuild -version
獨享實體 Mac 可以持續執行建置任務,但穩定性仍取決於身分、目錄、快取、金鑰與回滾邊界。每次變更都應能回答「改了什麼、如何驗證、如何撤回」。
為每台裝置使用易於識別的執行器名稱與標籤,記錄註冊範圍、服務使用者與啟動方式。避免多個執行器共用無法區分的名稱。
依儲存庫、分支或任務建立獨立目錄,禁止並行任務寫入同一個 DerivedData、封存目錄或相依輸出位置。
區分可重建快取與必須保留的產物。清理前記錄目錄大小、最近使用時間與任務歸屬,避免整個磁碟刪除造成冷啟動。
金鑰只在任務需要時進入程序環境或暫存 Keychain,關閉記錄回顯,任務結束後刪除暫存材料並鎖定存取權。
更新執行器、Xcode 或相依項目前保留版本記錄。驗證失敗時,復原設定檔、工具鏈選擇與快取索引,而不是繼續疊加修改。
路徑至少包含專案識別碼、任務識別碼與嘗試次數。清理動作只能命中本次任務目錄,避免誤刪並行建置。
WORK_ROOT="$HOME/ci-work"
JOB_DIR="$WORK_ROOT/$PROJECT/$RUN_ID"
mkdir -p "$JOB_DIR"
保存執行器版本、工具鏈版本、完整結束碼與第一個根因記錄。快取命中率與磁碟可用空間也應寫入任務摘要,方便比較前後差異。
附加儲存裝置與 Thunderbolt 5 並聯會改變資料路徑與權限邊界。任何格式化、掛載點調整或裝置中斷連線,都應先確認資料副本與任務已停止。
重要程式碼、素材、建置產物與設定至少保留一份獨立副本。尚未驗證的掛載磁碟區不能作為唯一儲存位置。
記錄磁碟區名稱、檔案系統、容量、裝置識別碼與預期掛載點,避免只依顯示順序判斷目標磁碟。
確認執行建置或媒體任務的使用者擁有所需目錄權限,不要透過全域放寬權限來迴避擁有者問題。
先使用可刪除的測試檔案驗證建立、讀取、重新命名與刪除,再移轉實際工作目錄。
標示每台 Mac、纜線方向、共用儲存裝置與任務角色。無法識別上下游裝置時,不要調整連線。
確定由哪台裝置寫入、哪些裝置僅供讀取,並為自動化任務設定獨立目錄,避免並行覆寫。
每增加一台裝置就完成一次連線、權限與讀寫測試,不要等全部接線完成後才集中排查。
先停止寫入與建置任務,確認快取已寫入磁碟,再卸載磁碟區,並從鏈路末端開始中斷裝置。
所有節點全年 365 天正常運作,平台不安排週期性停機。macOS 與工具鏈升級由使用者依任務節奏安排變更時段,先在非關鍵任務上驗證,再套用至長期執行器。
匯出程式碼狀態、相依鎖定檔、Homebrew 清單、Xcode 路徑、憑證名稱、Keychain 清單、執行器設定與磁碟可用空間。
將私有設定、簽署材料、建置產物與專案資料移出至獨立位置,並實際驗證至少一個檔案可以復原。
核對目標 macOS、Xcode、命令列工具、套件管理器、執行器與專案相依項目的相容範圍,記錄必須保留的舊版本。
停止 CI 佇列、素材處理與資料同步,確認沒有程序繼續寫入工作目錄、快取或附加儲存裝置。
升級後依序驗證 SSH、磁碟、Xcode 版本、憑證讀取、相依項目復原、測試、封存與產物下載。
保存第一個成功任務的耗時、記錄、快取狀態與磁碟可用空間,再逐步恢復並行任務,不要一次開放全部佇列。
根因尚未明確時,不要連續升級多個元件,否則記錄無法區分系統、工具鏈與專案設定的影響。
現有訂單問題請在控制台提交工單,並附上裝置識別碼、重現步驟與完整錯誤上下文。尚未下單的設定問題,可透過唯一支援信箱聯絡。
support@vmdebug.com