我的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)
基本信息:
我检查了什么:
Symbols Hidden by Default
是否Other Linker Flags
是-framework XCTest Framework Search Paths
是$(SDKROOT)/ Developer / Library / Frameworks $(继承)答案 0 :(得分:86)
根据此link,我需要在单元测试目标Bundle Loader
Build Settings
以下内容
$(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp
答案 1 :(得分:9)
至少从Xcode 7.3测试目标开始,您可以选择“主机应用程序”。在测试目标(但目前不是UI测试目标)中,这会自动填充“测试主机”构建设置,但不会填充“捆绑加载器”,这可能导致找不到类。
考虑到这一点,如果将测试目标的“Bundle Loader”构建设置设置为<input id="search" type="text"/>
<div class="list">
<div id="el"> red </div>
<div id="el"> blue </div>
<div id="el"> red green </div>
</div>
,即使您更改了Host Application,它也将始终包含正确的值。
这有效地与@ yuwen-yan链接中给出的建议相反的,应该相当于减少工作量。
答案 2 :(得分:4)
遇到同样的问题。
修复此问题的方法是在测试目标enable modules (c and objective-c)
中将Build Settings
设置为是。
答案 3 :(得分:2)
Xcode 12.3 (12C33) – 我刚刚删除了测试目标和所有引用。然后创建新的测试目标,并添加回我所有的测试文件 ✓ 正常工作
答案 4 :(得分:1)
此错误可能是由于测试目标类型错误,即 ui测试目标。
UI测试目标不能使用主要目标的内部,即使导入@testable
也是如此。单元测试目标OTOH可以使用内部部件。
See more details in this answer.
(我相信这已经在某些XCode版本中发生了变化,这引起了混乱。典型的方法是将来自原始目标的大量文件包含在ui测试目标中。一种正确的方法是以这种方式设计UI测试他们不需要或使用主要目标中的大量代码。)
答案 5 :(得分:1)
在我的特定情况下,我试图测试release
的配置,但遇到此特定错误。在尝试了不同的编译标志之后,我发现为项目上的发布配置设置Enable Testability
(不是特定的目标,但可能也可以)达到了目的。
答案 6 :(得分:0)
在将测试目标添加到2或3个Xcode版本之前创建的旧项目中后,遇到了相同的链接器错误。此外,项目具有各种xcodeproject / target / bundle名称。所有可能的重命名,清洗,Build settings
,Build phases
,Scheme
操作对我来说都不起作用。
经过长时间的努力,实际上起作用的是在最新的Xcode版本中重新创建项目以及所有目标。它终于链接!在这种情况下,您甚至不需要手动修改Search paths
,Bundle loader
,Xcode会为您完成。
答案 7 :(得分:0)
所以这对我有用...
override func setUp() {
super.setUp()
let promise = expectation(description: "App has finished running")
DispatchQueue.global(qos: .background).async{
// Wait on the background thread
sleep(4)
DispatchQueue.main.async {
// Fullfill the promise in the main thread
promise.fulfill()
}
}
// Initialize the storyboard
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// Get the view controller
sut = storyboard.instantiateViewController(withIdentifier: String(describing: ViewController.self)) as? ViewController
_ = sut.view
waitForExpectations(timeout: 5) { (_) in
// Finish set up after the app is done running its code
}
}// End setUp() Method
答案 8 :(得分:0)
对我有用的只是在podfile上使用测试目标。
target 'MyAppName' do
use_frameworks!
pod 'SwiftLint'
pod 'RxSwift'
pod 'RxCocoa'
pod 'RxDataSources'
pod 'RxGRDB'
target 'UnitTestTarget' do
inherit! :search_paths
end
end
答案 9 :(得分:0)
就我而言,当我需要测试属于我的应用程序的 framework 中存在的类时,会出现此错误:
测试框架类。
1.将测试目标添加到macOS。
2.选择项目/目标窗口。选择测试目标。
3.转到“构建阶段”,“将二进制文件与库链接”,添加要测试的框架。
4.在测试类(设置/拆卸)中,向要从该框架测试的类中添加“ import”
答案 10 :(得分:-2)
以下是在尝试在Xcode 9中添加单元测试目标时执行以解决问题的步骤: