Xcode 4unit testing链接器错误

注意:“使用GHUnit”不是这个问题可接受的答案。 我知道大多数人认为GHUnit比Xcode4 OCUnit好,但这不是我所问的。 我会分开评估。

我有一个从头开始在Xcode4中创build的Xcode项目,在创build期间选中“包括unit testing”checkbox。 我还包括了一些在以前的项目中开发的库。 他们通过“Add Files to x …”对话框添加到项目中,只添加到应用程序目标(而不是testing目标)。 运行应用程序时它们工作正常,所以我认为它们设置正确。 我也为这个项目编写了许多不同的类。

我的testing文件是以标准方式设置的,名为[AppName] Tests.h和.m。
代码为标题:
#import < SenTestingKit/SenTestingKit.h >

 @interface [AppName]Tests : SenTestCase { @private } @end 

实施守则:
#import "[AppName]Tests.h"

 @implementation [AppName]Tests - (void)setUp { [super setUp]; // Set-up code here. } - (void)tearDown { // Tear-down code here. [super tearDown]; } // Test methods go here @end 

这只是基本的骨架。 它在我的其他项目,并在这个项目中工作正常,只要我不导入任何其他文件。 当我从这个项目导入另一个文件并使用它时,我在Xcode输出日志中看到以下错误:
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

我已经证实:

  1. 我使用的所有框架都已经添加到应用程序和testing目标的“与库链接二进制文件”。
  2. testing目标已configuration为正确构build,并且我的所有testing方法都显示在编辑scheme…->testing – >testing中
  3. 每一个问题,但这一个已经解决,没有编译错误。
  4. 这里讨论的所有设置都正确设置,并与我正在testing的其他项目相同。

有什么想法可能是造成这个?

我必须将unit testing目标上的“Test Host”属性设置为$(BUNDLE_LOADER) 。 这解决了我的问题!

我只是在这个和类似的错误浪费了几个小时 – 事实certificate,我已经重命名我的主要目标 – 尝试通过重命名相关的variables,并通过删除整个DerivedData目录不成功。

我最终简单地设置了一个新的unit testing目标,遵循以下步骤: http : //twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

现在一切都好了。

所以 – 如果你有奇怪的,莫名其妙的链接错误,你可能会更好,只是创build一个新的unit testing目标。 只需要2分钟。

我做了以下几点:
http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

深入了解Test_Hosts = $(BUNDLE_LOADER)

设置Test_Hosts固定完全相同的问题!

当我得到运行unit testing的链接器错误时,有两件事情为我解决了这个问题。 第一个解决scheme是将Build After Build构build设置设置为YES,然后selectProduct> Build For> Build For Testing以运行testing。 这个解决scheme更容易实现。

第二个解决scheme是将应用程序的实现文件添加到unit testing目标。 通过select视图>实用程序>文件检查器打开文件检查器。 在项目导航器中select一个实现文件。 选中文件检查器中unit testing目标旁边的checkbox。

对于在模拟器中运行的iPhone应用程序,请确保“testing主机”版本设置为空。 模拟器不支持应用程序托pipe的unit testing。

我曾经有同样的问题。 出于某种原因,我的项目的源文件之一也包括在testing目标编译,这导致此链接错误。

通过确保只有testing实现文件被编译,你应该能够解决这个错误。 您可以在以下url查看:

TestTarget – >构build阶段 – >编译源文件

遇到这个错误运行Xcode 4.5.2 – 这是2012年11月 – 以上都没有工作。 看来设置bundle loader和testing主机应该为你的项目填充所有的依赖关系,或者在应用程序的环境中运行testing,但是不幸的是我不能工作。 它所做的是防止关于哪个文件/库丢失的特定Xcode警告。

对我来说,添加一个新的目标是:cocoa touch unit test(确保bundle loader和test host的构build设置是空的),监视构build错误并手动添加缺失的依赖项 – 一个接一个地我需要的项目,然后是框架。 不是很优雅,但我只是很高兴得到它的工作。 不知道为什么我还没有尝试GHUnit库。

确保testing目标将应用程序目标configuration为依赖项(构build阶段 – >目标依赖项)。

我意识到这个问题是相当古老的,但是我只是在相同的问题上奋斗了一段时间,最终设法解决它,让我分享我发现的东西。

我一直在将应用程序从iOS移植到Mac,项目本身是为iOS创build的,因此项目和主目标在支持平台上都有iOS 。 现在,当我开始移植时,我为Mac创build了新的目标,并将支持的平台更改为仅针对该目标的OSX。 之后,我为unit testing创​​build了另一个目标,但忘了将支持的平台从iOS更改为Mac。 我想你已经应该知道问题是什么了,基本上unit testing的目标是默认与Cocoa框架连接,因为这个目标的支持平台只是iOS,cocoa框架从来没有build立过,没有正确的链接。 将支持的平台更改为OSX的testing目标解决了这个问题。

我知道这对于iOStesting目标可能不是很有帮助,但至less要去testing目标链接二进制与库部分,看看是否有任何红色的库。 这给了我这个想法,也许这也会帮助你们中的一些人。

最近几次合并之后,我遇到了这个问题,我和一个同事都把文件添加到了项目中,并不是所有的实现文件都是unit testing目标的成员。

解决scheme:

  1. select一小部分.m文件(使用“在导航器中过滤”(cmd-opt-j)search.m
  2. 显示文件检查器(cmd-opt-1)查看文件的目标成员资格
  3. 确保相应的文件是您的testing目标的成员。

注意:如果testing目标checkbox显示-而不是+或未选中,则意味着某些(但不是全部)所选文件是目标的成员。

我试过在合并时使用.xcodeprojproject.pbxproj文件做更聪明的事情,但是我每次都因为.xcodeproj而放弃了这种挫败感。

(另一个注意:我只select一些文件,有两个原因:

  • select超过7-10个文件时,Xcode在文件检查器上的性能很差
  • 有些文件不是也不应该是testing目标的成员,并且当select的范围很小时,更容易进行排除过程)