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


146

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

ここに画像の説明を入力してください

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

回答:


238

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

以下の@earnshavianによるコメントのとおり、これはAppleのリリースノートに従ってデバッグビルドでのみ使用する必要があります。「Enable Testabilityビルド設定は、デバッグ構成でのみ使用する必要があります。アプリまたはフレームワーク」https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


こんにちは。同じエラーが発生しますが、テスト可能性の有効化オプションが表示されず、xcode 7を使用しています。
user1601259 2015

2
@ user1601259-最上位のプロジェクトを選択し、[ビルド設定]に移動して、[ビルドオプション]見出しの下を見ると、オプションを見つけることができます。
hgwhittle 2015

@hgwhittle-最上位のプロジェクトを選択すると、ビルドオプションに表示されるのは「デバッグ情報形式」と「ビルド製品の検証」だけです。ビルドオプションでターゲットを選択すると、「埋め込みコンテンツには迅速なコードが含まれています」と表示されます。それでおしまい。ビルド設定を検索しても見つかりません。これはxcode 7が原因ですか?
user1601259

1
「ビルド設定」で「基本」を選択した可能性があります。左側で「すべて」を選択した場合、「Enable Testability」が表示されます
アレイ

1
これはリリースビルドでどのように正確に機能し@testableますか?テストは実行される(したがって必要です)が、App Storeに送信する必要がある場合?Enable Testabilityデバッグビルド専用の場合、これを回避する方法は何ですか?リリースのためにテストコードを引き出す必要がありますか?
timgcarlson 2016

15

私の場合、テスト用のカスタムビルド構成(と呼ばれる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

デフォルトでcocoapodsは、ビルドのみに設定ENABLE_TESTABILITYYESDebugます



8

Xcode Profilerの実行時にのみこの問題が発生する場合は、スキーム管理のプロファイルビルド構成を、テスト容易性が有効になっている構成に切り替えてください。ほとんどの場合、これはデバッグされます。

ここに画像の説明を入力してください


4

これはおそらく、メインターゲットEnable Testabilityがに設定されているためNOです。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


2
@testableを使用してフレームワークをインポートしないようにするにはどうすればよいですか?ここでの良い習慣は何ですか?
ジョナサンカブレラ

3

Bitriseを使用してテストを実行すると、このエラーが発生し始めました。

他のユーザーとは違って、これは、言うではありませんごとTargetの基礎、またはごとSchemaの基礎、それがあるごとにConfiguration基礎。選択Target- > Build Settingsタブ- >のための外観testability>でそれを有効にする- あなたが使用していることを設定

Appleは、AppStoreではなく、デバッグに使用している構成でこれを有効にすることを推奨していることに注意してください。


0

上記のソリューションは、ポッド/カーセージを使用している場合は問題ありません。ただし、iOS自体のフレームワーク(「連絡先」など)を使用している場合は、メインプロジェクトのターゲットの「ライブラリ検索パス」にこれらのフレームワークへのパスを追加する必要があります。 ここに画像の説明を入力してください


0

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

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


0

もし万が一

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

次に、これがその方法です。

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

これは、Xcode 8より前のプロジェクトでは発生しませんでしたが、Xcode 8にアップグレードした後、困惑しました。

ここに投稿された回答は私の問題を解決しませんでした。私にとっては、これらのテストは必要ないので取りやめました。テストボタンのチェックを外します。

ここに画像の説明を入力してください そして今、エラーが出ています。


1
テストが不要な場合は、すべてのビルドからテストターゲットを削除するのではなく、プロジェクトからテストターゲットを削除することをお勧めします。
ジョナサンカブレラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.