最後更新於 2026 年 9 月 5 日;資料核實自 Apple 的 Xcode 26.6 Release Notes、附加元件文件,以及 Apple Developer Forums 最新可見討論。
先看兩個證據點:如果 Xcode 能看到 iOS SDK,但 simctl list runtimes 沒有對應的 iOS runtime,問題不是專案本身;如果 runtime 已列出,卻無法建立或啟動裝置,才進入 CoreSimulator 狀態排查。不要先重裝 Xcode。你應依序核對活動 Xcode、首次初始化、runtime 清單與下載鏈路,最後使用官方匯出與匯入方式恢復;仍無法在乾淨基線上重現時,換節點通常比繼續破壞性清理更安全。
這篇適合升級 Xcode 26.6 後無法下載或啟動 iOS Simulator 的 iOS 開發者,也適合要批量準備遠端 Mac 測試節點的 DevOps 工程師。若流水線可以編譯,卻無法執行 Simulator 測試,下面的取證順序也適用於移動測試與發布工程師。
01 先把 SDK、runtime 與裝置狀態拆開
Xcode 顯示 SDK,只能證明建置工具鏈看得到某個平台 SDK;它不能證明 iOS Simulator runtime 已安裝,也不能證明 CoreSimulator 可以啟動裝置。Apple 將附加 Simulator 元件的下載與安裝列為獨立流程,可參考Apple 的附加 Xcode 元件文件。
先在遠端 Mac 執行以下檢查。<XCODE_APP>、<DEVICE_NAME> 等值都替換成你的實際路徑與裝置名稱:
xcode-select -p
xcodebuild -version
xcrun simctl list runtimes
xcrun simctl list devices
把結果分成三層:
- 專案能否編譯:用最小專案或現有測試目標執行一次建置。
- runtime 是否存在:看
simctl list runtimes是否列出可用的 iOS runtime,而不是只看 Xcode 的 SDK 版本。 - 裝置能否啟動:建立或選取裝置後,執行啟動與最小測試。
如果第一層失敗,先處理 Xcode 工具鏈;如果第一層成功、第二層沒有 runtime,優先處理元件下載;如果第二層成功、第三層失敗,才調查 CoreSimulator。這個分流能避免把「缺少 runtime」誤判成程式碼或簽署問題。
Apple 的建置與執行 App 文件可用來核對建置與執行的基本路徑。故障紀錄至少保留 Xcode 版本、活動路徑、runtime build、裝置狀態、錯誤文字與發生時間;不要只截取 Preparing 畫面。
02 先確認活動 Xcode 與首次初始化
多版本 Xcode 共存時,最容易出現「圖形介面是 Xcode 26.6,終端機卻呼叫另一套 Developer Directory」的錯誤。先比較:
xcode-select -p
xcodebuild -version
xcrun --find simctl
如果圖形介面開啟的應用程式是:
/Applications/<Xcode-26.6>.app
而 xcode-select -p 指向其他 Developer 目錄,命令列檢查結果就不具備參考價值。Apple 的 Xcode 26.6 Release Notes 是核對該版本工具鏈行為的第一手資料。
只有在確認錯位後,才切換選擇:
sudo xcode-select --switch /Applications/<Xcode-26.6>.app
xcode-select -p
xcodebuild -version
不要把全域切換當成共享遠端節點的預設動作。CI 節點可能同時服務不同專案;更穩妥的做法是將工具鏈選擇放進工作流程,或在作業開始時明確設定並在日誌中輸出。切換後首次啟動 Xcode,等待必要元件初始化完成,再重新執行 simctl 檢查。
若你只看到 SDK 而沒有 runtime,這一步不會自動補回缺少的平台元件。它的目標是先確保後續命令沒有對著錯誤的 Xcode 執行。
03 將 Preparing 或連線錯誤還原成可驗證的證據
「卡在 Preparing」不是充分診斷。Apple Developer Forums 上確實可見 Xcode 26.6 使用者回報下載停滯或失敗,但這些內容目前只能作為未獲 Apple 普遍確認的個案線索,不能寫成官方已確認的服務故障。可參考相關論壇討論串,但仍要以你自己的錯誤記錄判斷。
按以下順序收集資料:
- 在 Xcode 的 Components 或附加元件介面記錄目標平台、狀態文字與完整錯誤。
- 用命令列取得下載結果,不要只重試圖形介面。
- 記錄解析到的 Apple 服務網域、DNS 結果、代理設定與防火牆規則。
- 檢查
hosts是否覆寫相關網域;不要為了「修復」而加入來路不明的固定 IP。 - 保存錯誤碼、錯誤網域、發生時間、要求的 runtime build,以及遠端節點所在的網路出口。
下載失敗可能來自本地網路阻斷、代理驗證、DNS 污染、防火牆規則、元件目錄暫時異常,或服務端短暫問題。沒有錯誤域名與時間,後續很難區分這些來源。若只有某一台節點失敗,而同一網路下其他節點可下載,先隔離該節點;若多台節點在同一時間、同一網路出口出現相同錯誤,再比較網路層證據。
命令列下載與匯出流程應以 Apple 的附加 Simulator 元件說明及附加 Xcode 元件文件為準。不要依照論壇留言自行拼接未確認的下載網址,也不要把某次成功的錯誤碼對應,當成所有節點都適用的規則。
04 runtime 已存在時,檢查 CoreSimulator 是否真的可用
當 Xcode 元件頁顯示已完成,但 simctl list runtimes 沒有可用項目,先不要刪除資料。這種狀態至少有三種可能:
- 下載包存在,但匯入尚未完成。
- runtime 已匯入,但目前活動 Xcode 不支援或沒有指向它。
- CoreSimulator 的狀態資料異常,導致清單與實際平台檔案不一致。
你可以比對三份證據:
xcode-select -p
xcrun simctl list runtimes
xcrun simctl list devices
再回到 Xcode 的元件頁確認平台狀態。若清單中有 runtime,建立或啟動一台測試裝置,並執行最小測試;若 runtime 有列出但裝置無法啟動,問題已從「下載」轉為 CoreSimulator 或裝置狀態。
低風險處理順序是:退出 Xcode,確認沒有正在執行的 Simulator 工作,重新啟動 Xcode,再次列出 runtime 與 devices。若節點曾經被強制中斷或磁碟空間不足,先保存日誌與現有測試資產,再檢查檔案系統狀態。
刪除 CoreSimulator 資料、系統資源目錄或全部 Developer 資料只能作為末級動作。這些操作可能移除已建立的裝置、快取、測試狀態與尚未備份的環境資訊。執行前要備份必要資料,記錄目前路徑與版本,並確認你有重建節點或重新匯入 runtime 的入口。若刪除後仍無法建立乾淨基線,繼續清理通常只會讓故障證據消失。
05 用官方匯出與匯入流程恢復受限節點
當一台 Mac 可以正常下載,另一台遠端 Mac 受網路限制,優先採用官方匯出與匯入,而不是直接複製 CoreSimulator 目錄。Apple 已提供透過 xcodebuild 下載、匯出與匯入 Simulator runtime 的支援路徑;實際參數與目前可下載平台,應以寫作當日的官方文件為準。
概念流程如下:
xcodebuild -downloadPlatform iOS
xcodebuild -exportPlatform iOS -exportPath <EXPORT_DIR>
xcodebuild -importPlatform <RUNTIME_PACKAGE>
上述命令中的 <EXPORT_DIR> 與 <RUNTIME_PACKAGE> 只是佔位符。請先用本機安裝的 xcodebuild -help 核對參數,因為 Xcode 版本、平台名稱與匯出格式可能變動。不要把整個流程包裝成與所有更新版本相容的固定腳本。
落地時按這個順序做:
- 在可下載的 Mac 上確認活動 Xcode 與目標遠端 Mac 的版本相容。
- 只下載需要的平台,不要把整個 Xcode 或不相關元件搬到節點。
- 以官方匯出流程產生平台元件包,保存來源、檔案大小、雜湊值與產生時間。
- 將匯出包透過受控通道傳送到遠端 Mac,確認傳輸沒有截斷或被代理改寫。
- 在目標節點匯入,保存完整終端機輸出與錯誤日誌。
- 重新執行
simctl list runtimes、建立裝置、啟動裝置,再跑最小測試與真實專案測試。
這個流程特別適合批量準備遠端 Mac。你可以把平台包、Xcode 路徑、匯入日誌與驗收結果放進節點交付紀錄,日後遇到相同下載錯誤時,能快速判斷是下載鏈路問題還是節點狀態問題。
06 用驗收結果決定修復、重建或更換節點
修復不是看到 runtime 出現在清單裡就算完成。對需要持續執行 CI 測試的遠端 Mac,至少要完成以下勾選項:
- [ ]
xcode-select -p指向預期的 Xcode。 - [ ]
xcodebuild -version與圖形介面開啟的版本一致。 - [ ]
simctl list runtimes列出目標 iOS runtime。 - [ ] 可以建立或選取測試裝置。
- [ ] 測試裝置可以啟動。
- [ ] 最小專案可以建置並在 Simulator 執行測試。
- [ ] 真實專案的測試目標可以完成一次。
- [ ] SSH 斷線後,背景工作沒有因互動式終端機消失。
- [ ] Mac 重新啟動後,Xcode 與 Simulator 仍能重新啟動。
- [ ] 恢復後的日誌、runtime 識別資料與匯入記錄已保存。
如果只有下載失敗,但官方匯出包能成功匯入,節點可以保留,並將匯入流程納入部署腳本。如果 runtime 在清單中反覆消失、重啟後又失效,或真實專案始終無法通過,應先隔離節點,再以乾淨節點重建。若你已經多次重裝 Xcode、清空資料,卻無法說明每次操作造成的變化,繼續修復的證據價值很低。
你也可以先閱讀遠端 Mac 的方案與使用入口,把「重新修復現有節點」與「在乾淨節點重新驗證」分成兩條路徑。若需要比較週期性使用成本,再查看遠端 Mac 價格方案,不要把一次性救援成本與長期重負載成本混為一談。
07 修復決策表:繼續處理還是換節點
| 目前證據 | 低風險動作 | 驗收條件 | 下一步 |
|---|---|---|---|
SDK 可用,但 simctl 沒有 runtime |
核對活動 Xcode,重新下載或官方匯入 | runtime 出現在清單,裝置可啟動 | 保留節點並記錄匯入流程 |
| Xcode 卡在 Preparing,命令列也失敗 | 收集錯誤網域、錯誤碼、DNS、代理與時間 | 同一下載鏈路可穩定完成 | 網路恢復則重試,否則改用匯出包 |
| runtime 已列出,但裝置無法啟動 | 重啟 Xcode 與驗證 CoreSimulator 狀態 | 最小專案可在 Simulator 測試 | 若重啟後復發,隔離節點 |
| 匯入成功,但真實專案測試失敗 | 核對活動 Xcode、測試目標與 runtime 相容性 | 真實專案完成測試 | 工具鏈錯位則修正,否則重建 |
| 多次清理後仍無可信基線 | 保存現有紀錄,停止破壞性操作 | 新節點可完成完整驗收 | 更換乾淨遠端 Mac |
如果你目前的 Mac 已被多次重裝或清理,無法建立可信基線,較務實的做法是在一台乾淨的遠端 Mac 上重新驗證下載、匯入、Simulator 啟動與真實專案測試,再決定是否重建原節點。自行維護的 Windows 或 Linux 主機無法直接取代 macOS 專屬的 Xcode 與 Simulator 工具鏈;虛擬化方案還可能增加圖形加速、權限與 runtime 相容性變數。對短期排障、版本驗證或需要持續在線的 CI 測試,租用 CALMVPS 的真實 Mac 通常比繼續修理一台狀態不明的節點更容易建立可追溯基線;但若你需要長期固定負載、實體 USB 裝置或完全自行掌控硬體,購買並維護本地 Mac 仍可能更合適。
在CALMVPS 的遠端 Mac 方案頁面選擇前,先把本文的驗收項目納入你的交付要求:活動 Xcode、runtime 清單、Simulator 啟動、真實專案測試,以及重新啟動後的復測結果都要能留下紀錄。這樣你租到的是可驗證的開發節點,而不只是能連線的 macOS 螢幕。