単体テスト用に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
解決方法に関するアイデアはありますか?
テストターゲット設定でフレームワーク検索パスを確認します。これらは、XCTest Frameworkを追加するときに破損する可能性があります。
XCTestをプロジェクトの1つに追加すると、パスの前に「/」が追加され、正しいバージョンが見つからなくなりました。
上記の答えのどれも私にとってはうまくいきませんでした。 Tim Macfarlaneが残したコメントで here という答えを見つけました。
アプリ内のクラスを検索するリンカエラーの場合...アプリターゲットで「Symbols Hidden by Default」ビルド設定を「NO」に設定します。これにより、すべてのアプリクラスがテストターゲットで自動的に使用可能になります...
つまり、次のことを意味します。
同じ問題がありました。問題は(少なくとも、私にとって)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
フォルダーを削除する必要があります(単にクリーンにするよりも良い)。
テストをSenTestCaseからXCTestCaseに変換した後も同じ問題が発生します。フレームワークを元に戻す修正された問題:
"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
それで、私にとって、この投稿で他のすべてを試した後に欠けていたのは:
その他のリンカーフラグ:
-framework XCTest
現在Xcode 6.0(iOS 8 SDKを使用)を使用しているため、[編集]> [リファクタリング]> [XCTestに変換...]オプションがこれを自動的に追加しないことに驚いています。
Xcode 5にsentestingkitフレームワークを追加する際に問題に直面していました。これらの設定は、リンカーの問題を解決するために機能しました。
ターゲット名を変更して移動した後、同じ問題が発生しました。私のテストはメインターゲットの一部であることが判明しました。すべてのテストファイルがテストターゲットにのみ属していることを確認してください。
.mファイルを選択するだけで、右側のペインが開いていることを確認してください。
テスト用に別のファイルを追加すると、この問題が発生しました。 (CMD + N)でこれを行う場合は、必ずテストバンドル(「AppNameTests」)のみをターゲットにしてください。
これらの.xctestバンドルのみがXCTest Frameworkにアクセスできると思います。
7.0より前のSDKを使用してXCTTestベースのユニットテストをビルドしようとすると、同じ問題が発生しました。ベースSDKとして7.0を選択すると、そのようなリンクエラーはなくなりました。
同じ問題を抱えていましたが、わずかに異なる解決策になりました。
xCTest.frameworkを選択し、ターゲットメンバーシップでテストフォルダーのみがチェックされていることを確認します。
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