Flutter 3.47はXcode 27のDevice Hub.appパスに対応しています。古いFlutterツールがSimulator.appを探している可能性があるなら、まずFlutter SDKを対応版へ更新するか固定し、その後に選択中のXcodeとシミュレーターランタイムを確認してください。データ削除やXcodeの再インストールは、原因を記録してから判断します。

Flutter開発者:Xcode 27への更新後、flutter devicesやシミュレーターの起動が失敗する場合に向けた手順です。
CIエンジニア:ビルドは通るのに、リモートMacでデバイス検出や起動の段階が止まる場合に役立ちます。
プラットフォーム管理者:共有ノードをリセットする前に、Flutter SDK、Xcodeの選択、ランタイムのどこに原因があるかを見分けたい場合に読んでください。

最終更新:2026年9月30日。Flutterの3.47.0リリースノート、iOS開発ドキュメント、AppleのXcode 27の案内とリリースノートを基に確認しています。

Flutter 3.47とXcode 27では、検出と起動を分けて考えます

Xcode 27ではシミュレーターの管理にDevice Hubが使われます。Flutterの3.47.0リリースノートには、FlutterツールがDeviceHub.appのパスを扱う変更が記載されています。そのため、古いFlutterツールが従来のSimulator.appを前提にデバイスを探すと、XcodeでビルドできてもFlutterからは検出できないことがあります。Flutter 3.47.0の変更記録とAppleのXcode 27リリースノートで、対象バージョンの挙動を照合してください。

ただし、パスへの対応だけであらゆる障害が解決するわけではありません。問題を「Flutterがデバイスを一覧にできない」「一覧には出るが起動しない」「起動するがアプリやテストが失敗する」に分ければ、SDKの問題とランタイムの問題を混同しにくくなります。

観測できる症状 優先して確認する箇所 次の判断
Xcodeでビルドできるが、Flutterの一覧にデバイスがない Flutterの実行ファイル、バージョン、Device Hubへのパス対応 対応版へ更新または固定し、再度一覧を取得します
Flutterの一覧には出るが起動できない 選択中のXcode、インストール済みランタイム、起動状態 Xcode側から同じデバイスを起動して比較します
起動後にアプリやテストが失敗する プロジェクトの設定、依存関係、テストログ デバイス検出とは別の失敗として、最初のエラーを調べます

まずFlutter SDKが実際に使われている場所を確かめます

ターミナルで次を実行し、結果を保存します。

flutter --version
which flutter
flutter doctor -v

flutter --versionが想定したSDKを示すかだけでなく、which flutterのパスも確認してください。複数のSDKを入れている環境では、シェル、IDE、CI Runnerがそれぞれ別のFlutterを呼び出していることがあります。IDEの設定画面やCIのジョブログでも実行ファイルの場所を照合し、同じプロジェクトディレクトリから結果を取ります。

Flutterが古い版を参照している場合は、まず利用中のプロジェクトで使うSDKを決めてください。チームやCIで再現性が必要なら、更新するだけで終わらせず、採用した版と実行パスを記録して固定します。3.47.0の変更点は公式リリースノートで確認できますが、独自のSDKパスやXcode選択の不整合までは自動で解消しません。

Device Hubが開いている場合も、Xcodeとランタイムを照合します

Device Hubが表示されることと、Flutterが同じ開発環境を参照していることは別の確認です。まず選択中のXcodeを記録します。

xcode-select -p
xcodebuild -version

出力された開発ディレクトリが意図したXcodeを指すかを確認してください。Xcodeを複数インストールしている場合や、IDEとCIで異なる設定を使っている場合は、Xcodeの画面で見ている環境とコマンドが使う環境が一致しないことがあります。AppleのXcodeコマンドラインツール資料も参照し、コマンドが参照する開発ツールを確かめます。

次に、Flutterの一覧とXcode側の状態を別々に採取します。

flutter devices -v
xcrun simctl list devices available
xcrun simctl list runtimes

XcodeのDevice Hubで対象デバイスが見えるかを確認し、必要なランタイムが利用可能かを照合します。ランタイムがない、または現在選択中のXcodeから認識できない場合は、Flutter SDKの更新だけでは起動できません。追加コンポーネントの導入が必要なら、Appleのシミュレーターコンポーネントのインストール案内に沿って状態を確認してください。

確認結果 切り分けの方向 先に行う作業
Device Hubでは見えるがflutter devices -vには出ない Flutter SDKの版や参照パス Flutterの実行場所とリリースノートを照合します
Flutterには出るがXcode側で起動できない Xcodeの選択やランタイム Xcodeの開発ディレクトリとランタイムの状態を調べます
Xcodeから起動でき、Flutterからの起動だけ失敗する Flutterの呼び出し経路や環境差 同一ユーザー、同一プロジェクトでログを比較します
両方で起動できるがアプリのテストが失敗する プロジェクトまたはテスト実行 失敗したテストと最初のエラーを個別に確認します

共有ノードでは変更前の状態を残します

CI Runnerのシェル環境は、あなたの対話型ターミナルと同じとは限りません。ジョブを実行するユーザーでFlutterのバージョンとパス、xcode-select -pの結果、flutter devices -vの出力、失敗ログを保存してください。これらを取る前にキャッシュを消したり、デバイスデータを削除したりすると、再現条件を見失うおそれがあります。

Xcodeを切り替える場合も、変更前の開発ディレクトリとジョブ設定を記録し、戻す手順を用意します。Simulatorデータの削除やツールチェーンの再インストールは、ログでランタイム破損などの根拠が得られた場合に限り、影響するユーザーやジョブを確認してから実施してください。

よくあるつまずきを、原因ごとに確認します

Flutter 3.47のSDKを使っているのに、一覧が空になる場合

バージョン表示だけで判断せず、which flutterの結果とIDE・CIの実行パスを比較します。意図したSDKを使っていても、選択中のXcodeが異なれば、Flutterが利用できるデバイス情報も変わる可能性があります。Xcodeの開発ディレクトリとランタイムを確認し、同じアカウントから再取得してください。

Device Hubに出ているのにFlutterから起動できない場合

Device Hub上の対象デバイスをXcodeから起動し、同じユーザーでflutter devices -vとxcrun simctlの結果を保存します。Xcodeからも起動しない場合はランタイムや起動経路を、Xcodeでは起動するのにFlutterだけ失敗する場合はSDKの版とパスを優先して調べます。一度に複数の設定を変えず、変更ごとに再試行してください。

実プロジェクトで修正を判定するチェックリスト

設定の修正後は、一覧が表示されるだけで完了にしないでください。普段使うFlutterプロジェクトを使い、発見、起動、テストの結果を別々に確認します。

  • [ ] ターミナル、IDE、CI RunnerでFlutterのバージョンと実行パスを記録しました。
  • [ ] xcode-select -pとxcodebuild -versionが、使う予定のXcodeを示しています。
  • [ ] Device Hubに対象のシミュレーターがあり、必要なランタイムが利用可能です。
  • [ ] flutter devices -vで対象デバイスを確認し、出力を保存しました。
  • [ ] Xcode側から対象デバイスを起動し、Flutter側の結果と比較しました。
  • [ ] 実プロジェクトからアプリを起動し、必要なテストも実行しました。
  • [ ] 変更前後のログを比較し、再発時に戻せるSDK・Xcodeの設定を残しました。

実行例は次のとおりです。<device-id>は、実際に一覧へ表示された識別子に置き換えてください。

flutter run -d <device-id>
flutter test integration_test -d <device-id>

アプリが起動してもテストが失敗するなら、デバイス検出の修復とテスト失敗を分けて扱います。逆にXcode側でも起動できなければ、Flutterのコマンドを繰り返す前にランタイムと選択中のXcodeを見直してください。

手元の環境とMac実行環境を使い分けます

既存のLinux CIや、利用者ごとに設定が違う開発環境だけで運用すると、macOS専用のXcodeツールを実行できないことや、SDK・Xcodeの選択差が残ること、障害時に同じ環境を再現しにくいことが課題になります。一方、すでに安定したMacを所有し、長期の継続負荷や物理接続が必要なら、自前のMacを管理するほうが適する場合もあります。

Macが必要なのは一時的な検証やCI用の実行環境で、ハードウェアを常時保有する必要がないなら、VMSPINのリモートMacを選択肢にできます。利用前に、実際のFlutterプロジェクトでビルドとシミュレーター起動を試し、必要なXcodeとランタイムが使えるかを確かめてください。利用条件はVMSPINのMac環境と料金案内で確認できます。現在の環境で再現性を確保できており、継続的に高負荷な作業や物理機器への接続が必要なら、レンタルへ切り替える必要はありません。短期間の検証やCI用Macを試す場合は、利用手続きを確認し、実プロジェクトで受け入れ試験をしてから運用に加える方法が堅実です。