セットアップ:
Xcode 4.5.2(4G2008a)
OS X 10.7.5
Application通常のiOSターゲットを使用したXcodeプロジェクトがあります。Appleのドキュメントに記載されApplicationTestsているように、単体テストバンドル(バンドルではないLogicTests)を追加しようとしています。
ドキュメントに記載されている手順を注意深く実行し、すべてを数回再確認しました。ただし、ApplicationTestsターゲットをビルドできません...アプリケーションのクラスの1つにリンクしようとすると、リンカーエラーで失敗します。ターゲットのBundle Loaderビルド設定がApplicationTests機能しなかったようです。しかし、AFAICT、Appleのドキュメントで説明されているように、私はこれを正しく設定しました。
再現するための私のステップ:
- ApplicationTestsバンドルの設定については、Appleのドキュメントに従ってください。
ApplicationTestsターゲットからクラスをインポートして実行するユニットテストメソッドをターゲットに記述しますApplication(例MyAppClass)。- スキームポップアップでアプリケーションターゲットを選択し、実行先ポップアップでiPhone6.0シミュレーターを選択します
Product>>Test
期待:
シミュレーターが起動し、ApplicationTests実行する必要があります。
実際:ターゲットは次
のApplicationTestsエラーでビルドに失敗します:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyAppClass", referenced from:
objc-class-ref in ApplicationTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
MyAppClass単体テストでへの参照を削除すると、ApplicationTestsバンドルが正常にビルドおよび実行されます。
繰り返しになりBundle Loaderますが、ターゲットでビルド設定を適切に設定していないようですがApplicationTests、再確認したところ、Appleの指示に正しく従っていたようです。
ApplicationTestsターゲットがターゲット内のシンボルにリンクできないようにするために、何を間違えた可能性がありApplicationますか?
更新Application:およびApplicationTestsターゲットを使用して、新しいダミープロジェクトを最初から作成しようとしました。ダミープロジェクトではMyAppClass、ターゲットにクラスを追加し、それにリンクして、ダミーターゲットでApplicationを使用する単体テストを正常に実行できます。MyAppClassApplicationTests
したがって、ダミープロジェクトのアプリケーションテストは機能します。しかし、それらは私の実際のプロジェクトでは機能しません。ダミープロジェクトと実際のプロジェクトのターゲットを比較しましたが、実際のプロジェクトでのみこの問題を引き起こすような大きな違いは見つかりませんでした。
私の実際のプロジェクトはかなり古いです(しかし、非常に複雑なので、最初からやり直すのは非常に難しいでしょう)。プロジェクトの古さのために、この比較的新しい機能が機能しなくなっているのではないでしょうか。
実際のプロジェクトのターゲットの1つでビルド設定の問題が発生しているように見えます。しかし、私はそれを見つけることができません。