セットアップ:
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
を使用する単体テストを正常に実行できます。MyAppClass
ApplicationTests
したがって、ダミープロジェクトのアプリケーションテストは機能します。しかし、それらは私の実際のプロジェクトでは機能しません。ダミープロジェクトと実際のプロジェクトのターゲットを比較しましたが、実際のプロジェクトでのみこの問題を引き起こすような大きな違いは見つかりませんでした。
私の実際のプロジェクトはかなり古いです(しかし、非常に複雑なので、最初からやり直すのは非常に難しいでしょう)。プロジェクトの古さのために、この比較的新しい機能が機能しなくなっているのではないでしょうか。
実際のプロジェクトのターゲットの1つでビルド設定の問題が発生しているように見えます。しかし、私はそれを見つけることができません。