Xcode 6 Beta 2でビルドしようとしているプロジェクトがいくつかあります。すべてのプロジェクトには、XCTest/XCTest.hがビルドできないため、Xcode 6でビルドしないXCTest(Kiwi/XCTestおよびSpecta)を使用する何らかのタイプのライブラリがあります見つけられた。
fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>
XCTest.frameworkが「Link Libraries with Binaries」ビルドフェーズリストに含まれていないことに気付きましたが、Xcode 6でnewプロジェクトを作成すると、ライブラリが自動的にリンクされるように見えるので問題ありません。
おそらく何らかの関連性があるので、私のXCTestに必要な依存関係はすべてCocoapodsを介してもたらされます。
プロジェクトで更新する必要があることを知らないものはありますか?
注:これは、Xcode 7で作成されたプロジェクトには必要ない場合があります。
CocoaPodsには、この here および here に対する修正がありました
CocoaPodの依存関係でこれを修正するには、XCTestを必要とするPodターゲット(Kiwi、Specta、FBSnapshotTestCaseなど)のFRAMEWORK_SEARCH_PATHS
に以下を追加する必要があります。
$(PLATFORM_DIR)/Developer/Library/Frameworks
これにより、依存関係にあるXCTestを参照できます。これは、CocoaPodsまたは参照しているPodの将来のアップデートで修正される可能性があるため、後で削除することができます。
Xcodeの以前のバージョンに有害ではないため、使用しても安全です。
プロジェクト内のファイルを移動していました。 必要なことは、テストファイルxxxTests.m
などを選択し、file inspector
でtarget
をtest
として選択し、通常のターゲットとしてではありません。
XCTestは、テストターゲット(Xcode 6)でのみ使用できることに気付きました。 (何らかの理由で)他のターゲットにXCTestを使用している場合、XCTest.h not found
エラーが表示されます。
@squarefrogには 正解 がありますが、ポッドを更新するたびに手動でそれを続けなければなりません:(
これをポッドファイルに追加すると、追加のパスが自動的に追加されます。例えば。 $(PLATFORM_DIR)/Developer/Library/Frameworks
をSpectaのFRAMEWORK_SEARCH_PATHS
に追加する場合:
post_install do |installer|
target = installer.project.targets.find { |t| t.to_s == "Pods-Tests-Specta" }
if (target)
target.build_configurations.each do |config|
s = config.build_settings['FRAMEWORK_SEARCH_PATHS']
s = [ '$(inherited)' ] if s == nil;
s.Push('$(PLATFORM_DIR)/Developer/Library/Frameworks')
config.build_settings['FRAMEWORK_SEARCH_PATHS'] = s
end
else
puts "WARNING: Pods-Tests-Specta target not found"
end
end
このエラーは、テストターゲットの外部でXCTestが使用されているファイルを追加したときに発生します。 AppCodeでこれを修正するには、疑わしいファイルを右クリックして[ターゲットの管理]を選択し、テストターゲットのみがチェックされていることを確認します。
ビルドフェーズからXCTestフレームワークをインポートし、問題を解決した後、私は同じ問題に直面しました。
ビルドフェーズ-> XCTest.Framework> cleanおよびrun。私はそれが誰かに役立つことを願っています。
参考のために... XCTestを既存のプロジェクトにインポート
XCTestを使用する最良の方法は、Test Nagigatorから追加することです(左ペインの5番目のアイコン)。
そのため、新しいxx.mテストファイルは(右ペインの)アプリ(左ペインの> Target、Wrapper Extension:app)ではなく、バンドル(Wrapper Extension:xctest)をターゲットにします
'XCTest/XCTest.h' file not found
エラーが発生する可能性があります。これは、ファイルがアプリを対象としているためです。執筆時点では、Cocoapodsの最新バージョン(0.33.1)には問題の修正がありません。
しかし、最先端のバージョンはそうです。
このガイド に従って、最新バージョンのCocoapodsをソースからセットアップします。私はpod-dev
(ガイドに記載)を呼び出して、gemがインストールされたポッドと区別します。
このアプローチの利点は、Podfileで追加のスクリプトを作成する必要がないことです。通常のpod-dev install
の代わりにpod install
を実行することを忘れないでください。
Cocoapodsを使用しないプロジェクト(OPの質問に直接答えるわけではありませんが、将来的には私や他の人にとって役立つかもしれません)でも、同じ問題がありました。以前のOCTestアイテムをXCTestに置き換えることで解決しました。たとえば、ファイルMyApp.xcodeproj/project.pbxprojにはこのdiff(短縮)があります。 - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
これは私が見つけた最も簡単な回避策です。プロジェクトの変更は必要ありません。そして、この変更は次のXcodeのアップグレードまで持続します。
cd /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks
ln -s ../../../../../Library/Frameworks/XCTest.framework