Sponsoring
Configurationごとにアプリ名を変えた時に、UnitTestのtestableのModule名を共通の名前で使用できるようにする
本日作業していたら、久々のタイトルのエラーが出たので、備忘録のために対応方法をメモしておきます!
以下の記事でもやったように、XcodeのプロジェクトでSchemeやConfigurationの設定を変更して、サーバーの接続先ごとのアプリを作ったり、Test用のConfigurationを作ったりして、それぞれのアプリごとに名前を変更したりした後に、UnitTestを実行すると、@testable import HomeNoteのようにテストコードで書いている箇所でエラーが出ます。
iOSのUnitTestでCould not find test host for ~のエラーが出た時の対処法iOSのUnitTestでCould not find test host for ~のエラーが出た時の対処法をまとめました...
そのエラーでは、ビルドするConfigurationごとの名前のModule名を使用するように怒られていると思います。
しかしその通りにすると、以下のように書かないといけなくなると思います。
import XCTest
#if DEVELOP_DEBUG
@testable import HomeNote
#elseif DEVELOP_TEST
@testable import HomeNote-DT
...
#endifこのように各テストのファイルで書くのは現実的ではありません。
そこで、共通して@testable import HomeNoteのように書けるようにしましょう。
そのためには、以下の箇所のPRODUCT MODULE NAMEの設定を変更します。
- アプリの用の
Target->Build Settingsを選択する PRODUCT MODULE NAMEと検索する

そこでおそらく各Configurationごとに別の名前が設定されていると思います。
これをTargetと同じ名前に設定します。
実際は、$(TARGET_NAME)の値を設定することで、実現できると思います。
これで以下のように、アプリのTarget名でimportできるようになります!
import XCTest
@testable import HomeNote+2
Sponsoring