我的unittest目标构建失败,出现以下错误:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MCStore", referenced from:
objc-class-ref in MCStoreTests.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
基本信息:
我检查了什么:
Symbols Hidden by Default 没有Other Linker Flags 是-framework XCTestFramework Search Paths 是$(SDKROOT)/ Developer/Library/Frameworks $(继承)Yuw*_*Yan 96
根据这个链接,我需要Bundle Loader在unittest目标中设置以下内容Build Settings
$(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp
Ben*_*ker 11
至少从Xcode 7.3测试目标开始,您可以选择"主机应用程序".在测试目标(但目前不是UI测试目标)中,这会自动填充"测试主机"构建设置,但不会填充"捆绑加载器",这可能导致找不到类.
考虑到这一点,如果将测试目标的"Bundle Loader"Build Setting设置为$(TEST_HOST),即使您更改了Host Application,它也将始终包含正确的值.
这实际上与 @ yuwen-yan发布的链接中给出的建议相反,应该相当于减少工作量.
这个错误可能是由于测试目标类型错误,即ui test target。
UI 测试目标不能使用 main target 的内部结构,甚至不能使用@testable导入。单元测试目标 OTOH 可以使用内部结构。
(我相信这在某些 XCode 版本中发生了变化,这会导致混淆。典型的方法是在 ui 测试目标中包含来自原始目标的大量文件。正确的方法是设计 UI 测试,使它们不不需要或使用来自主要目标的大量代码。)
就我而言,当我需要测试属于我的应用程序一部分的框架中存在的类时,我收到此错误:
\n\n测试框架类。
\n1. 将测试目标添加到 macOS 。
\n2. 选择项目/目标窗口。选择测试目标。
\n3. 转到 \xe2\x80\x9cbuildphases\xe2\x80\x9d、\xe2\x80\x9clink 二进制文件与库\xe2\x80\x9d,添加要测试的框架。
\n4. 在测试类(安装/拆卸)中,将 \xe2\x80\x9cimport\xe2\x80\x9d 添加到要从该框架测试的类
遇到了同样的问题。对我来说修复它的是在 Testing target 中设置enable modules (c and objective-c)为YESBuild Settings。
| 归档时间: |
|
| 查看次数: |
12966 次 |
| 最近记录: |