XCTest 不会从我的目标应用程序链接类

Posted

技术标签:

【中文标题】XCTest 不会从我的目标应用程序链接类【英文标题】:XCTest won't link classes from my target application 【发布时间】:2014-10-31 18:15:03 【问题描述】:

我将 Xcode 6.1 中的单元测试目标添加到现有项目中。如果我做一个简单的测试,比如

XCTestAssert(1 + 1 == 2, @"Addition");

它构建和工作正常。当我尝试使用目标应用程序中的任何类时,我收到链接器错误。我不知道如何让它正确链接。这两个目标都是为相同的架构构建的。我尝试设置一个新项目,并且可以使用目标应用程序中的类。我可能遗漏了一些简单的东西,但我无法弄清楚它是什么,并且在搜索其他解决方案时我无法找到任何有帮助的东西。

我得到的错误是

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_NoteManager", referenced from:
      objc-class-ref in ESV_Tests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

NoteManager 是我要测试的类。

谢谢

【问题讨论】:

【参考方案1】:

您应该检查主要目标中的剥离和隐藏符号设置。链接器从 -bundle_loader 选项中的应用程序二进制文件 (Application.app/Application) 中读取您的类。您可以通过以下命令检查符号:

nm <path to Application.app/Application> | grep NoteManager

我还建议您在设置更改后重建项目

【讨论】:

【参考方案2】:

所以我找到了解决方案。在我的目标应用程序(不是测试目标)中,我需要将“默认隐藏的符号”标志设置为 NO。

【讨论】:

以上是关于XCTest 不会从我的目标应用程序链接类的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 不会将 XCTest 链接到 iOSSimulator 版本

现有项目的 XCTest

在构建应用程序目标的文件 XCTest 中缺少所需的架构 armv7

从一个类中使用 xctest 框架运行测试类

如何从 XCTest 中的 UI 目标调用主目标中的方法?

我可以使用 XCTest 测试我的应用程序中某个部分的性能吗?