设置:
Xcode 4.5.2 (4G2008a)
OS X 10.7.5
我有一个带有普通 iOS Application
目标的 Xcode 项目。我正在尝试添加 ApplicationTests
单元测试包(不是 LogicTests
包)作为 described by Apple's documentation .
我已仔细按照文档中提供的步骤进行操作,并重新检查了几次所有内容。但是,我无法构建 ApplicationTests 目标……在尝试链接到我的 Appliation 类之一时,它因链接器错误而失败。似乎设置 ApplicationTests
目标的 Bundle Loader
build设置不起作用。但是 AFAICT,我已经正确设置了它,如 Apple 文档所述。
我的重现步骤:
- 关注Apple's documentation for setting up an ApplicationTests bundle .
- 在
ApplicationTests
目标中编写一个单元测试方法,该方法从Application
目标(例如MyAppClass
)导入并执行一个类。 - 在方案弹出窗口中选择应用程序目标,并在运行目标弹出窗口中选择 iPhone 6.0 模拟器
产品
>测试
预计:
模拟器应该启动并且我的 ApplicationTests
应该运行。
实际:
ApplicationTests
目标无法构建并出现以下错误:
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_MyAppClass", referenced from:
objc-class-ref in ApplicationTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果我在单元测试中删除对 MyAppClass
的引用,ApplicationTests
包将成功构建和运行。
同样,似乎我没有在我的 ApplicationTests
目标中正确设置 Bundle Loader
build设置,但我已经重新检查过,我似乎已正确遵循 Apple 的说明。
我做错了什么导致我的 ApplicationTests
目标无法链接到我的 Application
目标中的符号?
更新:我还尝试使用 Application
和 ApplicationTests
目标从头开始创建新的虚拟项目。在虚拟项目中,我将 MyAppClass
类添加到 Application
目标,并且能够链接到它并成功运行使用 MyAppClass的单元测试code> 在虚拟
ApplicationTests
目标中。
所以我的虚拟项目中的应用程序测试有效。但它们在我的真实项目中不起作用。我比较了虚拟项目和真实项目中的目标,但找不到会导致我的真实项目出现此问题的显着差异。
我的真实项目很老(但也很复杂,所以很难重新开始)。我想知道项目的陈旧性是否会阻止这个相对较新的功能发挥作用?
在我看来,我的真实项目中的一个目标仍然存在build设置问题。但是我找不到它。
最佳答案
你能试试用Xcode 5.0打开这个项目吗?在项目/目标设置中选择单元测试目标,打开“常规”选项卡并检查所选“目标”是否是您的主要应用目标。
这就是 Xcode 获取链接到单元测试包加载器的信息的地方。
关于objective-c - iOS 单元测试 : Can't link to symbols in my Application target. 怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13656186/