Swift 2の新しい@testable
宣言を使用して、クラスをテストターゲットに公開しようとしています。しかし、私はこのコンパイラエラーが発生しています:
Intervals
は、公開しようとしているクラスを含むモジュールです。このエラーを取り除くにはどうすればよいですか?
メインターゲットで、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
私の場合、テストにはカスタムビルド構成(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
はYES
ビルドに対してのみENABLE_TESTABILITY
をDebug
に設定します
これはおそらく、メインターゲット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
フレームワークをテストする場合:
テストターゲットに移動->ビルドフェーズ->新しいコピーファイルフェーズを作成->フレームワークを選択->再帰的に使用されるすべてのフレームワークを追加