web-dev-qa-db-ja.com

テストターゲットXcode 5のXCTestビルドエラー:

単体テスト用にXCode 5 iOS 7プロジェクトをセットアップしました。

もちろん、単体テストのセットアップには時間がかかりすぎるので、それだけの価値があるという信念を維持しようとしています。このエラーについて何時間も苦労しています:

ld: building for iOS Simulator, but linking against dylib built for MacOSX file
'/Applications/Xcode5-DP5.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' 
for architecture i386

解決方法に関するアイデアはありますか?

31
user798719

テストターゲット設定でフレームワーク検索パスを確認します。これらは、XCTest Frameworkを追加するときに破損する可能性があります。

XCTestをプロジェクトの1つに追加すると、パスの前に「/」が追加され、正しいバージョンが見つからなくなりました。

21
HatAndBeard

上記の答えのどれも私にとってはうまくいきませんでした。 Tim Macfarlaneが残したコメントで here という答えを見つけました。

アプリ内のクラスを検索するリンカエラーの場合...アプリターゲットで「Symbols Hidden by Default」ビルド設定を「NO」に設定します。これにより、すべてのアプリクラスがテストターゲットで自動的に使用可能になります...

つまり、次のことを意味します。

  • Project Navigator>プロジェクトを選択
  • ターゲット>アプリを選択します(テストではありません)
  • ビルド設定>「デフォルトで非表示になっているシンボル」の検索
  • 「デフォルトで非表示になっているシンボル」>「YES」から「NO」に変更します
17
eckyzero

同じ問題がありました。問題は(少なくとも、私にとって)FRAMEWORKS_SEARCH_PATHSビルド設定は、SDKフレームワークフォルダーをリストしましたafterメイン開発者フレームワークフォルダー。

Xcodeに含まれるフレームワークには、OS X用、iOS(デバイス)用、iOSシミュレータ用の3つのビルドがあります。 OS Xビルドはメインの開発者フォルダーにあり、他の2つはそれぞれのプラットフォームフォルダーの下にあります。ここでの摩擦は、SDKフォルダー(プラットフォームフォルダー内)を最初に検索するように指定しない場合、Xcode(より正確には、リンカー)が最初にOS Xビルドを検出し、表示されるエラーを生成することです。

解決策は簡単です:

FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited)

ビルド設定で。プロジェクトファイルにビルド設定を配置する場合(お勧めしませんが、それは別の日に別の質問です)、単に「フレームワーク検索パス」という名前になります。

注:時々、Xcodeのキャッチが少し遅いことがあります。これを有効にするには、おそらくbuildフォルダーを削除する必要があります(単にクリーンにするよりも良い)。

13
Calrion

テストをSenTestCaseからXCTestCaseに変換した後も同じ問題が発生します。フレームワークを元に戻す修正された問題:

"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
6
Aist Marabu

それで、私にとって、この投稿で他のすべてを試した後に欠けていたのは:

その他のリンカーフラグ:

-framework XCTest

現在Xcode 6.0(iOS 8 SDKを使用)を使用しているため、[編集]> [リファクタリング]> [XCTestに変換...]オプションがこれを自動的に追加しないことに驚いています。

5
Ryan H.

Xcode 5にsentestingkitフレームワークを追加する際に問題に直面していました。これらの設定は、リンカーの問題を解決するために機能しました。Search Paths

4
Muhammad Adnan

ターゲット名を変更して移動した後、同じ問題が発生しました。私のテストはメインターゲットの一部であることが判明しました。すべてのテストファイルがテストターゲットにのみ属していることを確認してください。

.mファイルを選択するだけで、右側のペインが開いていることを確認してください。

XCode Test Target Image

3
ribeto

テスト用に別のファイルを追加すると、この問題が発生しました。 (CMD + N)でこれを行う場合は、必ずテストバンドル(「AppNameTests」)のみをターゲットにしてください。

これらの.xctestバンドルのみがXCTest Frameworkにアクセスできると思います。

3
cnnrdltn

7.0より前のSDKを使用してXCTTestベースのユニットテストをビルドしようとすると、同じ問題が発生しました。ベースSDKとして7.0を選択すると、そのようなリンクエラーはなくなりました。

1
Pavel Osipov

同じ問題を抱えていましたが、わずかに異なる解決策になりました。

xCTest.frameworkを選択し、ターゲットメンバーシップでテストフォルダーのみがチェックされていることを確認します。

Target Membership

1
Bob

YourProjectTestsターゲットの検索フレームワークパス(_FRAMEWORK_SEARCH_PATHS_)にパス$(SDKROOT)/Developer/Library/Frameworksが含まれていること、およびこのパスが$(inherited)の前にリストされていることを確認してください。

私の場合、両方のパスが存在しましたが、$(inherited)が最初のものでした。

クレジットは https://stackoverflow.com/users/181947/brian-clear on Apple Mach-Oリンカー(id)警告:MacOSX向けにビルドされていますが、dylib向けにリンクされていますiOS

0
Marius