在创建新方案后,xcode 4无法启动单元测试(带有链接器错误)

Hao*_*est 40 xcode unit-testing ios

我的单元测试在xcode4中运行良好,直到我必须创建一个新的模式来编译一个包在我的设备上运行以进行测试.

我所做的只是创建一个新的Target和一个新的Scheme,现在我尝试运行单元测试并得到以下错误:

无法加载[...] Tests.octest中的测试包,因为发生了链接错误.dyld可能找不到测试包链接的框架框架或库,可能是因为框架或库在链接时具有不正确的安装路径.

我打破了什么?

ian*_*lly 47

就像@Haoest和@Peter DeWeese上面对答案1的评论一样 - 当我更改产品名称时,我遇到了完全相同的问题.

要在已重命名产品的情况下解决此问题,您需要转到测试目标的Build Settings选项卡,然后更改Linking部分 - Debug和Release bundle loader设置.如果您重命名了产品 - 应用程序的目录和名称可能都不正确.

感谢他们两人指出这一点 - 但我认为这种情况的另一种解决方案应该得到更高的评价而不是评论.

  • 新的"单元测试"目标,单击Build Settings选项卡并将Bundle Loader设置为$(BUILT_PRODUCTS_DIR)/**RenamedProductName.app**/**RenamedProductName**.在将UnitTest添加到现有应用程序时,我已解决错误ld :找不到文件:/ Users/HomeDirectory/Library/Developer/Xcode/DerivedData/MyExistingApp-ecvhpixjl crqmyfiiqaqhllwtsgy/Build/Products/Debug-iphonesimulator/MyExistingApp.app/MyExis tingApp. (9认同)

Mr.*_*rna 28

在将目标添加到现有项目之后,我也遇到了Xcode 4的问题.我最终发现该项目的Xcode DerivedData已损坏.通过删除该数据,我导致Xcode重建数据并且项目恢复正常.我在我的主库文件夹(〜/ Library/Developer/Xcode/DerivedData /)中找到了数据.

  • 这没有直接修复测试设置,但清理DerivedDatas文件夹确实给了我有意义的线索,最终让测试框架恢复工作.它破坏的原因是因为我更改了产品名称,测试目标仍在查看旧的编译二进制文件. (13认同)
  • 我也通过更改产品名称来破坏我的.令人讨厌的是它说"没有问题". (4认同)
  • 要删除派生数据,您还可以进入管理器,选择项目并按下派生数据旁边的删除. (2认同)

sds*_*kes 7

我什么都试过(包括其他的答案和那些在这里指出http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/),但终于找到了不同方案:

将部署后处理(在"构建设置"的"部署"部分中)设置为"否"以用于"调试"目标.

在我这样做之前,可执行文件被剥离,链接将失败

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_SomeClassUnderTest", referenced from:
      objc-class-ref in SomeTest.o
Run Code Online (Sandbox Code Playgroud)

无论条带链接产品和剥离调试符号在复制期间设置为NO,它都没有区别 - 只更改部署后处理设置,最后确保符号未被剥离.