iPhone单元测试链接问题,找不到DevToolsBundleInjection.framework

Posted

技术标签:

【中文标题】iPhone单元测试链接问题,找不到DevToolsBundleInjection.framework【英文标题】:iPhone unit test linking problem, can't find DevToolsBundleInjection.framework 【发布时间】:2010-01-26 04:27:54 【问题描述】:

我正在尝试为我的 iphone 应用程序设置应用程序单元测试。因此,我制作了 app 目标的副本,以及苹果文档 (http://developer.apple.com/iphone/library/documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.html) 中所述的单元测试捆绑目标

按照 Apple 的指示后,我无法在单元测试中引用我的类,因此我使用“Bundle Loader”构建设置将应用程序链接到单元测试包,并将主要目标设置为导出符号。这解决了编译时间错误,并且在我更改它后它立即工作并执行了我的测试。但是一旦我清理并再次构建,当我尝试在设备上运行时开始出现此错误:

Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1 (7C144)/Symbols/Developer/Library/PrivateFrameworks/DevToolsBundleInjection.framework/DevToolsBundleInjection" (file not found).

文件确实不存在。我在以下位置找到了 .framework 文件: /Xcode3.1.4/Library/PrivateFrameworks PrivateFrameworks

并建立了一个符号链接。然后运行app说不能链接app的文件:

010-01-25 20:19:22.330 SmokeyTheBear[5808:207] Error loading /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests:  dlopen(/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests, 262): Symbol not found: _OBJC_CLASS_$_AppDelegate
  Referenced from: /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests
  Expected in: /var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/UDorse
 in /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests
DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest'

然后,我切换回运行应用程序的正常目标,它运行了我所有的单元测试并退出了!我再次清理并构建,然后正常目标正常运行。单元测试目标仍然不起作用。

【问题讨论】:

【参考方案1】:

检查项目目标的构建设置。

寻找“默认隐藏的符号”设置。

确保至少在调试版本中将其设置为 NO,您应该将其用于测试。

如果没有此设置(可能来自旧 Xcode 项目),测试代码将不会自动链接到项目代码。

【讨论】:

【参考方案2】:

首先你是如何链接框架的?您不必为了使其工作而创建符号链接。切换到您的测试包目标并打开 Project->Edit Active Target。确保库位于常规选项卡的“链接库”部分。如果是,请删除/重新添加它。这为我解决了与库链接类似的问题。

【讨论】:

你不够具体,我无法理解你的意思。当您说框架时,您是指 senstesting 还是 devtoolsbundleinjection?没有任何文档提到专门链接 devtoolsbundleinjection,而且它在错误的文件夹中似乎很奇怪,而且它短暂地工作过。无论如何,我已经尝试在单元测试包和应用程序目标以及所有可能的组合中链接 sentesting 和 devtools。如果它编译,我会得到与上面相同的结果,具体取决于符号链接是否存在。 现在更好了,这是我一开始试图回答的另一个问题。 (看起来它只是您在目标链接库中包含的另一个 .framework)您是否检查过您的 DYLD_INSERT_LIBRARIES 和 DYLD_FALLBACK_FRAMEWORK_PATH 环境变量?从这里:chanson.livejournal.com/120740.html?thread=366500 是的,这是在 xcode 包含应用程序单元测试框架之前编写的,所以它现在会自动生成它们。但是我已经尝试将它们调整为完全符合他的建议,并给出绝对路径。结果相同。 那么,对不起。我会再次从说明开始尝试并创建一个新目标,确保它使用正确的 iPhone OS 版本等,但您可能已经尝试过了。 是的,我已经反复尝试过,也尝试过使用 GTM 单元测试包装器。继续卡住。感谢您的尝试。【参考方案3】:

嘿,smokey_the_bear,你有没有检查我这个问题的经历:

Linker Error: iPhone Unit Test Bundle referencing App classes

我必须指定捆绑加载器才能正确链接。

【讨论】:

嗨哦霍罗布。正如我在问题中所说,我指定了 Bundle Loader,它允许它编译。但是在运行时调试控制台报告它找不到应用程序委托和测试使用的其他文件。

以上是关于iPhone单元测试链接问题,找不到DevToolsBundleInjection.framework的主要内容,如果未能解决你的问题,请参考以下文章

单元测试找不到要测试的类

Python单元测试找不到模块[重复]

为啥 Xcode 找不到我的单元测试应用程序?

竹 xcode 单元测试 - 找不到工作区

Intellij Android + Maven 找不到单元测试

Angular 2 单元测试:找不到名称“描述”