web-dev-qa-db-ja.com

Xcode 6でビルドされた古いプロジェクトでXCTest / XCTest.hが見つかりません

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を介してもたらされます。

プロジェクトで更新する必要があることを知らないものはありますか?

80
Erik Kerber

注:これは、Xcode 7で作成されたプロジェクトには必要ない場合があります。

CocoaPodsには、この here および here に対する修正がありました


CocoaPodの依存関係でこれを修正するには、XCTestを必要とするPodターゲット(Kiwi、Specta、FBSnapshotTestCaseなど)のFRAMEWORK_SEARCH_PATHSに以下を追加する必要があります。

$(PLATFORM_DIR)/Developer/Library/Frameworks

screenshot

これにより、依存関係にあるXCTestを参照できます。これは、CocoaPodsまたは参照しているPodの将来のアップデートで修正される可能性があるため、後で削除することができます。

Xcodeの以前のバージョンに有害ではないため、使用しても安全です。

137
squarefrog

プロジェクト内のファイルを移動していました。 必要なことは、テストファイルxxxTests.mなどを選択し、file inspectortargettestとして選択し、通常のターゲットとしてではありません。

37
Jakub Truhlář

XCTestは、テストターゲット(Xcode 6)でのみ使用できることに気付きました。 (何らかの理由で)他のターゲットにXCTestを使用している場合、XCTest.h not foundエラーが表示されます。

17
Mustafa

@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
11
deanWombourne

このエラーは、テストターゲットの外部でXCTestが使用されているファイルを追加したときに発生します。 AppCodeでこれを修正するには、疑わしいファイルを右クリックして[ターゲットの管理]を選択し、テストターゲットのみがチェックされていることを確認します。

9
Tash Pemhiwa

ビルドフェーズからXCTestフレームワークをインポートし、問題を解決した後、私は同じ問題に直面しました。

ビルドフェーズ-> XCTest.Framework> cleanおよびrun。私はそれが誰かに役立つことを願っています。

参考のために... XCTestを既存のプロジェクトにインポート

XCTestを使用する最良の方法は、Test Nagigatorから追加することです(左ペインの5番目のアイコン)。

そのため、新しいxx.mテストファイルは(右ペインの)アプリ(左ペインの> Target、Wrapper Extension:app)ではなく、バンドル(Wrapper Extension:xctest)をターゲットにします

  • xCTest.frameworkは赤のままです。
  • いくつかの変更が原因で'XCTest/XCTest.h' file not foundエラーが発生する可能性があります。これは、ファイルがアプリを対象としているためです。
1
tontonCD

執筆時点では、Cocoapodsの最新バージョン(0.33.1)には問題の修正がありません。

しかし、最先端のバージョンはそうです。

このガイド に従って、最新バージョンのCocoapodsをソースからセットアップします。私はpod-dev(ガイドに記載)を呼び出して、gemがインストールされたポッドと区別します。

このアプローチの利点は、Podfileで追加のスクリプトを作成する必要がないことです。通常のpod-dev installの代わりにpod installを実行することを忘れないでください。

1
fatuhoku

Cocoapodsを使用しないプロジェクト(OPの質問に直接答えるわけではありませんが、将来的には私や他の人にとって役立つかもしれません)でも、同じ問題がありました。以前のOCTestアイテムをXCTestに置き換えることで解決しました。たとえば、ファイルMyApp.xcodeproj/project.pbxprojにはこのdiff(短縮)があります。 - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };

0
AnneTheAgile

これは私が見つけた最も簡単な回避策です。プロジェクトの変更は必要ありません。そして、この変更は次の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
0
Steven Kramer