通常のターゲットと単体テストのターゲットを持つXCode4/iOSプロジェクトがあります。テストクラスでクラスの1つを#importして使用しようとする場合を除き、すべて正常に機能します。単体テストターゲットをビルドしようとすると、次のリンクエラーが発生します。
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_FRRCategory", referenced from:
objc-class-ref in CategoryTests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status
CategoryTests.mでは、この方法でヘッダーファイルをインポートしています。
#import "../todoro/FRRCategory.h"
私は何を間違えていますか?
FRRCategoryソースファイルが、単体テストターゲットのコンパイルソースに追加されていることを確認してください。
Xcode 4:
Project Navigator-> "[プロジェクト名]"->ターゲットでユニットテストターゲットを選択->ビルドフェーズ->コンパイルソースを展開->コンパイルソースの下部にある+をクリックし、正しいソースファイルを追加します。
指示に従ってください こちら 。ソースをコンパイルするためにファイルを追加する必要はありません。
「デフォルトで隠されたシンボル= NO」は、テストターゲットではなく、あなたのappターゲット用であるべきだということを最初に見逃しました。
とにかくうまくいきました(tm)。
ヒットする可能性がある別の落とし穴は、単体テストで実際のアプリでは使用されていないC関数(または同様の関数)を使用している場合です。
これは、サブプロジェクトを持つことに制限される場合があります。私の場合
私の単体テストでは、他のどこでも使用されていないC関数をいくつか使用しましたが、これらはアプリバイナリから削除されました(サブプロジェクトの.aファイルからではありません)。
修正は
(*決して呼び出されないコードでアプリを膨張させるので、リリース構成にはこれを行わないでください)。
ファイルがフレームワーク内にある場合のみ、インポート内のフォルダーを参照する必要があります。それ以外の場合、ファイルをプロジェクトに追加したら、#import "FRRCategory.h"
。まあ、ヘッダー検索パスで何か変なことをしたのでなければ。