web-dev-qa-db-ja.com

@testableを使用する場合、「モジュールはテスト用にコンパイルされませんでした」

Swift 2の新しい@testable宣言を使用して、クラスをテストターゲットに公開しようとしています。しかし、私はこのコンパイラエラーが発生しています:

enter image description here

Intervalsは、公開しようとしているクラスを含むモジュールです。このエラーを取り除くにはどうすればよいですか?

131
hgwhittle

メインターゲットで、Enable Testabilityビルドオプションを[はい]に設定する必要があります。

以下の@earnshavianによるコメントによると、これはAppleリリースノートによるデバッグビルドでのみ使用する必要があります: "Enable Testability build settingsは、デバッグ構成でのみ使用する必要があります。アプリまたはフレームワークから内部シンボルをエクスポートしないことについて」 https://developer.Apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//Apple_ref/doc/uid/TP40001051-CH1-SW326

210
sgaw

解決策は非常に単純です。アプリスキームでチェックボックスを適切に設定していることを確認してください。アーカイブビルドのテストターゲットチェックを外すを選択する必要があります。

enter image description here

私の場合、テストにはカスタムビルド構成(Testと呼ばれます)を使用し、依存関係マネージャーとしてcocoapodsも使用しました

テスト可能性を有効にするには、Podfileの最後に次の行を追加する必要がありました

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

デフォルトでは、cocoapodsYESビルドに対してのみENABLE_TESTABILITYDebugに設定します

9
Tim

これはおそらく、メインターゲットEnable TestabilityNOに設定されているためです。デバッグスキーム(テストの実行に使用)でYESに設定する必要があります。

Carthageを使用している場合、@testableを使用してフレームワークをインポートすると、リリーススキームを使用して構築されるため、この問題が発生する可能性があります。

ほとんどの場合、そのプレフィックスを持つフレームワークをインポートすることは悪い習慣なので、それを避けることができます。できない場合は、フレームワークのリリーススキームでEnable Testabilityする必要があります。 https://developer.Apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//Apple_ref/doc/uid/TP40001051-CH1-SW326

4
Samuel B.

Xcode Profilerの実行時にのみこれを経験している人のために:スキーム管理のプロファイルビルド構成を、テスト可能性が有効になっているものに切り替えます。これはほとんどの場合デバッグになります。

enter image description here

4
Wladek Surala

上記のソリューションは、ポッド/カルタゴを使用している場合は問題ありません。ただし、iOS自体のフレームワークを使用している場合は、たとえばメインのプロジェクトのターゲットの「ライブラリ検索パス」でこれらのフレームワークへのパスを追加する必要があります。 enter image description here

0
nikBhosale

フレームワークをテストする場合:

テストターゲットに移動->ビルドフェーズ->新しいコピーファイルフェーズを作成->フレームワークを選択->再帰的に使用されるすべてのフレームワークを追加