PC パソコン

Xcode「Logic Testing Unavailable: Logic Testing on iOS devices is not supported」の原因と解決方法

実機を選んでユニットテストを実行したときに「Logic Testing Unavailable」「Logic Testing on iOS devices is not supported. You can run logic tests on the Simulator.」と表示される場合、Xcodeがそのテストターゲットをホストアプリを持たないロジックテストとして扱っています。まずSimulatorで実行できるかを確認し、実機が必要ならテストターゲットをアプリホスト型に直すのが基本です。

エラーの意味

Logic Testing Unavailable
Logic Testing on iOS devices is not supported.
You can run logic tests on the Simulator.

テストコード自体の失敗ではなく、選択した実行先とテストバンドルの構成が一致しないため、テスト開始前に止まっている状態です。ホストなしのユニットテストはSimulatorで実行し、iPhoneなど実機上のアプリ環境が必要なテストはHost Applicationを持つテストターゲットとして構成します。

発生しやすい条件

  • SchemeのTestアクションで物理iPhone/iPadを選んでいる
  • Unit Testing BundleのHost ApplicationがNone
  • TEST_HOSTやBUNDLE_LOADERが空、または古いパスを指している
  • 既存ターゲットの複製・移行後にSchemeとテストホストの対応が崩れた
  • Xcode更新後、以前と同じプロジェクトが実機テストだけ失敗する

推奨する解決手順

1. ロジックテストならSimulatorへ切り替える

Xcode上部の実行先をiOS Simulatorに変更し、Product > Testを実行します。コマンドラインでは利用可能なSimulator名を指定します。

xcodebuild test   -scheme MyApp   -destination 'platform=iOS Simulator,name=iPhone 17'

実機固有機能を必要としないモデル、パーサー、計算処理などのテストでは、これが最も小さく安全な修正です。

2. 実機が必要ならHost Applicationを設定する

  1. プロジェクト設定でユニットテストターゲットを選択します。
  2. GeneralのTesting(Xcodeの版によりHost Application欄の位置は異なります)で対象アプリを選びます。
  3. Build SettingsでTEST_HOSTとBUNDLE_LOADERを検索し、手入力した古い値があれば削除してXcode管理の設定に戻します。
  4. Product > Scheme > Edit Scheme > Testで、正しいテストターゲットが有効か確認します。

フレームワークやSwift Packageの純粋なロジックテストを、理由なくアプリホスト型へ変更する必要はありません。実機依存がなければSimulatorを使う方が構成を単純に保てます。

3. Xcode更新後だけ再現する場合

同じコミットをSimulatorと実機、可能なら旧Xcodeでも比較します。Xcode 26.4での実機テスト失敗報告はありますが、AppleのXcode 26.4リリースノートには、このエラーに対する一般的な修正版は明記されていません(2026年9月16日確認)。そのため「Xcodeの不具合」と決めつける前に、Host ApplicationとSchemeを確認してください。

構成が正しく、特定のXcode版でのみ再現する場合は、CIを動作確認済みのXcodeへ一時固定し、最新の安定版で再検証してFeedback Assistantへ診断情報付きで報告します。

代替策

  • ロジック部分をSwift Packageへ分離し、SimulatorまたはmacOSでテストする
  • デバイス依存部分をプロトコルで抽象化し、ロジックテストではテスト用実装を注入する
  • 実機が必須のシナリオはアプリホスト型ユニットテストまたはUIテストへ分ける

確認方法

  1. Simulatorでテストが開始され、Test Navigatorに結果が残る
  2. 実機ではテスト対象アプリがインストール・起動され、同じエラーが出ない
  3. xcodebuild testが終了コード0になり、.xcresultが生成される

注意点

DerivedData削除は壊れた生成物には有効ですが、ホストなしテストを実機で動かせるようにする設定変更ではありません。また、署名設定やDeployment Targetを無関係に変更する前に、SchemeとHost Applicationを確認してください。

まとめ

このエラーは、物理デバイスを実行先にした一方で、Xcodeがテストをホストなしロジックテストとして認識したときに発生します。ロジックテストはSimulatorで実行し、実機環境が必要なら正しいHost Applicationを設定します。Xcode版固有の疑いがある場合も、まず同一プロジェクトをSimulator・実機・別Xcodeで比較して切り分けるのが確実です。

参考資料