链接错误,同时build立一个unit testing目标

我有一个定期的目标和unit testing目标的XCode4 / iOS项目。 一切工作正常,除非我试图#我的testing类中的我的类之一,并尝试使用它。 如果我尝试构buildunit testing目标,则会收到以下链接错误:

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源文件已经添加到您的unit testing目标的编译源文件中。

Xcode 4:

项目导航 – >“[项目名称]” – >在目标下select您的unit testing目标 – >构build阶段 – >展开编译源 – >点击+编译源的底部并添加正确的源文件。

按照这里的说明。 它不需要你添加任何文件来编译源代码。

我首先错过了“默认情况下隐藏的符号= NO”应该是针对您的应用目标,而不是testing目标。

无论如何,它为我工作(TM)。

另一个你可能遇到的问题是如果你的unit testing使用的C函数(或类似的),而不是在实际的应用程序中使用。

这可能只限于有一个子项目。 在我的情况

  • 应用
    • 分项目
      • embedded的AC库(即直接编译的.c和.h文件)

我的unit testing使用了一些其他地方没有使用过的C函数,这些函数被从应用程序二进制文件中删除(而不是从子项目的.a文件中)。

解决的办法是

  1. closures应用程序Debug版本的“Dead Code Stripping”。*和
  2. 确保你的unit testing在Scheme设置中使用了Debug而不是Release。

(*不要这样做的释放configuration,因为它会膨胀与永远不会调用的代码的应用程序)。

如果文件位于框架内,则只应在引用内引用文件夹。 否则,只要将文件添加到项目中,只需执行#import "FRRCategory.h" 。 那么,除非你使用标题searchpath做了一些奇怪的事情。