先把 Flutter 固定或升級至已記錄支援 DeviceHub.app 路徑的版本,再核對目前選中的 Xcode 與模擬器執行階段;不要一開始就刪除模擬器資料或重裝 Xcode。Flutter 3.47.0 發布說明記錄了這項路徑支援,但它不代表所有模擬器故障都會一併消失。
這篇適合升級 Xcode 27 後,flutter devices 找不到裝置或無法啟動 iOS 模擬器的 Flutter 開發者。
如果你維護遠端 Mac CI,並遇到建置成功、模擬器步驟失敗,也可以按下文分層定位。
平台維護者則可用這套順序判斷應修 SDK、Xcode 選擇還是執行階段,避免重置共享節點。
最後更新於 2026 年 9 月 30 日;版本與行為核實自 Flutter 3.47.0 發布說明、Flutter iOS 開發文件及 Apple Xcode 27 發布說明。
Flutter 3.47 Xcode 27 找不到模擬器:先確認故障在哪一層
Xcode 27 以 Device Hub 管理模擬器;較早的工具可能仍依賴舊的 Simulator.app 路徑。Flutter 官方文件已說明 Xcode 27 的 Device Hub 與舊版 Xcode 的 Simulator 應用入口有所不同,而 Flutter 3.47.0 的發布說明列出相應路徑處理。Xcode 27 新功能說明
因此,請把「建置成功」與「Flutter 找到裝置」分開看。xcodebuild 能編譯,只能說明該次建置使用的 Xcode 與專案設定可完成編譯;它不能證明 Flutter CLI 找到的是相同 SDK,也不能證明模擬器已安裝所需執行階段或能順利開機。
先把終端機中的結果記下來,避免在尚未判明問題前清快取或刪除裝置:
which flutter
flutter --version
xcode-select -p
xcodebuild -version
flutter doctor -v
flutter devices
Flutter 工具路徑、SDK 版本與 Xcode 選擇都要一起核對。若終端機、IDE 與 CI 的輸出不同,問題可能是各入口實際呼叫了不同工具,而不是同一個模擬器故障。
先查 Flutter 路徑,還是先查 Xcode 選擇?
| 可觀察症狀 | 優先檢查 | 下一個驗證動作 |
|---|---|---|
| Xcode 建置成功,但 Flutter 裝置清單沒有模擬器 | Flutter SDK 版本及工具路徑 | 確認執行中的 Flutter 是否包含 DeviceHub.app 路徑支援,再執行 flutter devices |
| 終端機與 IDE 列出的裝置不同 | 各入口實際選用的 Flutter、Xcode | 分別記錄 which flutter、flutter --version 與 xcode-select -p |
flutter devices 已列出裝置,但啟動失敗 |
模擬器執行階段及開機流程 | 透過 Xcode 的裝置管理入口確認裝置可用,再以 simctl 檢查 |
| 模擬器可開機,但專案啟動或測試失敗 | 專案目標、建置設定與測試命令 | 使用實際專案的 Scheme 重跑,保留完整錯誤輸出 |
Flutter 3.47.0 的發布說明是核對 Device Hub 路徑支援的依據,不是「所有版本與環境均已修復」的保證。若你的 SDK 早於該項變更,先確認是否包含這項支援;若專案暫時不能升級,就固定目前 SDK,並在獨立工作目錄驗證包含修正的版本,再決定是否切換。對應的 Flutter 問題與修正紀錄
不要只看 IDE 顯示的 Flutter 版本。終端機、IDE 與 CI Runner 可能使用不同 SDK;只要其中一個入口還在呼叫舊版 Flutter,排查結果就可能互相矛盾。
用時間線拆開 Flutter、Xcode 與執行階段
里程碑一:核對 Flutter 是否包含 Device Hub 支援
在專案實際使用的目錄執行 which flutter 與 flutter --version,不要依賴 shell 設定檔、IDE 設定畫面或文件中的版本紀錄代替實際輸出。若工具路徑指向預期之外的位置,先修正 SDK 選擇,再執行 flutter doctor -v 和 flutter devices。
Flutter 3.47.0 的發布紀錄明確提及針對 Xcode 27 使用 DeviceHub.app 路徑的處理。若你的 SDK 早於該項變更,更新或固定到已包含支援的版本,是比手動建立舊路徑連結更可控的做法。
里程碑二:確認目前選中的 Xcode,而不是磁碟上有哪些版本
執行 xcode-select -p 和 xcodebuild -version,將結果與預期的 Xcode 安裝位置、版本對照。Apple 的命令列工具文件說明了 Xcode 命令列工具的選擇與使用方式;若選錯 Xcode,即使機器安裝了目標版本,Flutter 或 CI 仍可能呼叫另一套工具鏈。Apple Xcode 命令列工具參考
檢查時也要比對本機終端機、IDE 的 Flutter SDK 設定與 CI 工作日誌。不要只在互動式登入帳戶修正路徑,就假設 Runner 使用相同環境變數、使用者目錄或工具安裝位置。
里程碑三:Device Hub 看得到裝置,不等於執行階段已能啟動
若 Flutter 已列出裝置,接著執行:
xcrun simctl list devices available
核對預期的模擬器是否出現在目前選中的 Xcode 所管理的可用裝置清單。也可先從 Xcode 的 Device Hub 嘗試開啟該裝置;若圖形入口也無法啟動,就不應再把問題單純歸因於 Flutter 的裝置發現路徑。
如果所需執行階段不存在或未被目前 Xcode 識別,先查看 Xcode 提供的元件管理入口,再依 Apple 的模擬器元件安裝說明處理。這時應先分辨是缺少執行階段、目前 Xcode 未識別元件,還是啟動流程異常,再採取相應處理。
里程碑四:本週依序完成驗收,避免共享節點被誤清理
在遠端 Mac CI 上,先保存失敗工作日誌、Flutter 版本與工具路徑、Xcode 選擇,以及執行模擬器命令的帳戶環境。這些資料可以讓你比較本機終端機、IDE 和 Runner 的差異;也能在變更 SDK 或節點前保留回復依據。
接著用專案實際的模擬器目標驗證,不要只以 flutter devices 有輸出就結案。建議按以下順序操作:
- [ ] 在專案目錄記錄
which flutter、flutter --version與flutter doctor -v。 - [ ] 記錄
xcode-select -p和xcodebuild -version,確認呼叫的是預期的 Xcode。 - [ ] 以
flutter devices檢查 Flutter 裝置發現結果,另以xcrun simctl list devices available核對 Xcode 裝置清單。 - [ ] 從 Device Hub 嘗試啟動目標模擬器;只有此處可啟動後,才繼續驗證 Flutter 啟動流程。
- [ ] 使用真實專案執行應用啟動與測試,分別保存 Flutter 命令和 Xcode 工具的結果。
- [ ] 若失敗仍可重現,依證據修正 Flutter SDK、Xcode 選擇或執行階段;先保留紀錄與回復方式,再考慮清理或重裝。
若你正在評估把這套驗收流程放到受控的遠端 Mac,可先從 VMSPIN 的服務資訊確認遠端工作環境,再按實際使用週期查看方案與費用說明。這不會取代工具鏈驗收:仍應先用自己的 Flutter 專案確認建置、裝置發現與模擬器測試結果。
用驗收結果決定修 SDK、修 Xcode,還是查執行階段
如果 Xcode 建置成功、模擬器能從 Device Hub 啟動,但 Flutter 沒有列出裝置,先回頭檢查 Flutter SDK 版本與執行路徑。若 Flutter 能找到裝置,而 Xcode 管理入口也無法啟動,調查重點應轉向執行階段或啟動流程。若本機正常、CI 不正常,先比較 Runner 與本機實際呼叫的工具位置及帳戶環境,不要直接重置共享節點。
這種分層也能避免把「可編譯」誤當成「模擬器測試已通過」。如果仍需清理裝置資料或重裝工具,先確認問題可重現、記錄受影響的執行階段與工作目錄,並準備可恢復的 SDK 和 Xcode 選擇;沒有這些證據時,破壞性操作只會增加回復成本。
若你的問題其實是本機缺少可持續使用的 macOS 執行環境,而不是單一 Flutter 路徑故障,遠端 Mac 可讓你在真實 macOS 工具鏈上重做建置與模擬器驗收。相較於只靠 Linux 節點或臨時拼接的本機環境,後者無法直接提供完整的 Xcode 工作流程,也較難讓 CI 與人工調試共用同一套 Mac 工具鏈;若你只是偶爾測試,先用現有 Mac 或短期環境驗證更合理,長期固定重負載則應評估自有硬體。需要臨時 Mac 執行環境時,可查看 VMSPIN 遠端 Mac 方案,再以自己的 Flutter 專案完成驗收後決定是否採用。