私はXcodeで迅速に作業しており、デフォルトではXCTestを参照するテストファイルを作成します。
ターゲットメンバーシップをメインプロジェクトに設定すると、このエラーが発生します
XCTestの基本モジュールをロードできません
このターゲットメンバーシップが設定されていない場合、テストは適切に実行され、すべてが正常に動作します。
PS:私はSwiftを初めて使用するので、おそらく馬鹿げた質問です(私に教えてください)。
私はXcodeで迅速に作業しており、デフォルトではXCTestを参照するテストファイルを作成します。
ターゲットメンバーシップをメインプロジェクトに設定すると、このエラーが発生します
XCTestの基本モジュールをロードできません
このターゲットメンバーシップが設定されていない場合、テストは適切に実行され、すべてが正常に動作します。
PS:私はSwiftを初めて使用するので、おそらく馬鹿げた質問です(私に教えてください)。
回答:
メインプロジェクトはXCUnitフレームワークとリンクしていません。プロジェクトに個別のテストターゲットが存在しない場合は作成し、テストソースファイルをそのターゲットに追加する必要があります。
iOSプロジェクトテンプレートで作業している場合は、iOS > Test > iOS Unit Testing Bundle
。
OS Xプロジェクトテンプレートで作業している場合は、を選択しますOS X > Test > OS X Unit Testing Bundle
。
問題のファイルがメインターゲットではなく、テストターゲットのみにあることを再確認してください。テストターゲットのみが、インポートするフレームワークを持ちます。
にリンクするmacOS動的フレームワークターゲットを作成すると、このエラーが発生します。 XCTest.framework
(ターゲットはテストターゲットではなくフレームワークターゲットです)。
この場合、問題は以下を追加することで解決します
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks
プロジェクトの「ビルド設定/フレームワーク検索パス」に。
$(PLATFORM_DIR)/Developer/Library/Frameworks
複数のバージョンのXcodeが異なる名前でインストールされている場合(リリースバージョンとベータバージョンなど)。
このようなスタックオーバーフローのページを何度もトラブルシューティングして跳ね返った後、他のiOSユニットテストのトラブルシューティングページには記載されていない詳細を見つけました。
プロジェクトでCocoaPodsを使用する場合は、メインアプリケーションのターゲット内にネストされたテストターゲットを必ず含めてください。実行後にテストターゲットを作成した場合、podfileに含まれていない可能性がありますpod init
。podfileは次のようになります。
target 'YourApp' do
target 'YourAppTests' do
inherit! :search_paths
# Pods for testing
end
end
忘れずにポッドファイルを保存し、実行pod install
後に実行してください。
それが役に立てば幸い!
これは少し遅いかもしれませんが、あなたがしなければならないことは次のとおりです:
[ファイル]> [新規]> [ターゲット]> [iOSユニットテストバンドル]をクリックします。
そして、そこにテストを追加します。これでうまくいきました。問題は、プロジェクトの作成時にユニットテストの作成を選択しなかったことです。これが誰かを助けることを願っています。
この問題は、プロジェクトで2回発生します。
1:回答:
ファイルに移動ファイルをクリックします。
次に、最初のオプションNewをクリックします。
それをクリックすると、ターゲットのオプションクリックが表示されます。
そして、サーチバーでIOSユニットテストバンドルと問題の追加が解決されます。
コンパイラがこれを追加する権限をあなたに与えることができない場合、以下が与えられたときに2番目の方法を試してください。
2. CocoaPodの問題に回答します。
製品に移動する製品をクリックします。
[クリーン]をクリックするか、cmd + kを押します。
問題は解決しました。
受け入れられた回答でこの問題はほとんどの場合解決されますが、このエラーに遭遇する方法がもう1つあります。
既にそれを確認している場合:
@pwc @ nick-nなどから指摘されたとおり
ClassTest.swift
ターゲットメンバーシップのファイルは、テストターゲットにのみ添付されるようにします。ClassTest.swift
ではないあなたのメインアプリのターゲット>ビルドソース>ソースをコンパイルの下に見えます他に確認できることは次のとおりです。
あなたの.podspecs
ファイルで
source_files
テストディレクトリが直接的または間接的に含まれていないことを確認してください。
例えば :
s.source_files = ["Classes/**/*.{swift}", "Classes/**/*.{xib}"]
s.exclude_files = ["Classes/Exclude", "Classes/MyPodProjTests/"]
にClasses/**/*.{swift}
は、ディレクトリをMyPodProjTests
除外する必要があるという事実を上書きするすべてが含まれていることに注意してください。
解決:
s.source_files = ["Classes/MyPodProj/**/*.{swift}", "Classes/**/*.{xib}"]
注:これは非常に極端なケースであり、完全に人為的なエラーですが、指摘する価値があると思いました。
s.source_files
。ありがとう!
私の場合、私はプライベートポッドのテストを行っていたため、podspecでは次のようになりました。
s.test_spec 'Tests' do |test_spec|
test_spec.source_files = 'Tests/*.swift' end
しかし、Podfileで、次のようにテスト仕様を忘れていました。
target 'MyApp' do
use_frameworks!
pod 'CoconutLib', '~> 1.0', :testspecs => ['Tests'] end
私は同じ問題を抱えていて、私のための解決策は次のとおりでした:
この回答がお役に立てば幸いです。
PS:最後に、ビルド設定のテストターゲットで、正しく構成されていないこれらのプロパティを確認する必要がありました。
DEBUG_INFORMATION_FORMAT = dwarf;
ONLY_ACTIVE_ARCH = YES;
VALIDATE_PRODUCT = NO;
テストクラスのターゲットメンバーシップを確認します。