Xcode单元测试构建失败,错误提示为“Undefined symbols for architecture x86_64”。
Xcode单元测试构建失败,错误提示为“Undefined symbols for architecture x86_64”。
我的单元测试目标构建失败,出现了以下错误:
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)
基本信息:
- Xcode6.2
- iOS8.2 SDK
我已经检查了以下内容:
Symbols Hidden by Default
是 NoOther Linker Flags
是 -framework XCTestFramework Search Paths
是 $(SDKROOT)/Developer/Library/Frameworks $(inherited)
Xcode单元测试构建失败,错误信息为"Undefined symbols for architecture x86_64"的问题出现的原因是在测试目标中选择了"Host Application",这会自动填充"Test Host"构建设置,但不会填充"Bundle Loader"构建设置,导致找不到类。为了解决这个问题,可以将测试目标的"Bundle Loader"构建设置设置为$(TEST_HOST)
,这样即使更改了"Host Application",它始终包含正确的值。
在Xcode 9.2中,这个设置位于"Test target" > "Build settings" > "Testing" > "Test host"。添加$(TEST_HOST)仍然有效。另外,还需要更新Cocoapods。
以上是解决Xcode单元测试构建失败的"Undefined symbols for architecture x86_64"错误的原因和解决方法。
在使用Xcode进行单元测试时,可能会遇到"Undefined symbols for architecture x86_64"的构建失败错误。这个错误可能是由于错误的测试目标类型导致的,即ui测试目标。
UI测试目标不能使用主目标的内部内容,即使使用了导入也不行。相反,单元测试目标可以使用内部内容。
更多详细信息请参见这个回答。
我相信在某个Xcode版本中发生了改变,这导致了混淆。通常的做法是在ui测试目标中包含大量来自原始目标的文件。正确的做法是设计UI测试,使其不需要或使用主目标的大量代码。
问题原因:在Xcode中进行单元测试构建时出现错误"Undefined symbols for architecture x86_64"。根据提供的信息,可以得出以下结论:在单元测试目标的Build Settings中设置了Bundle Loader,以指定构建的产品路径。
解决方法:根据提供的链接,在单元测试目标的Build Settings中设置Bundle Loader,具体内容为:$(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp
。
这个答案真是救命的!太感谢了!我很高兴能找到这个解决方法!非常感谢!
是的,问题就出在这里。注意,在项目中有多个目标时要小心!
为什么这样设置可以解决问题?为什么Xcode默认不支持这样的设置?
这些代码真是太有价值了!非常感谢。帮助我解决了一个带有单元测试、UI测试和不同部署目标的项目中无数的Mach-O链接器错误。
我使用Xcode 8.2创建了一个全新的项目,也需要进行这样的设置。
我还需要在Bundle Loader中添加$(TEST_HOST)。我使用的是带有Objective-C和Swift的Xcode 9.2。
此外,注意:回到你的应用目标(而不是测试目标),将Symbols Hidden by Default构建设置设置为NO。只有在BUILD SETTINGS下选择"全部"时,才会显示此选项。
谢谢。为此浪费了很多时间。
哇!在我的UITest目标中,浪费了将近4个小时与这个错误斗争。只有你的解决方案起作用!
谢谢!这解决了我UITest目标中出现的"Undefined symbols for architecture x86_64 _OBJC_CLASS_"问题。我也花了很多时间解决这个问题。
非常感谢你,朋友。为此我浪费了很多时间。尝试了清除Derived Data、重新启动Xcode、重新启动Mac,只有这个解决方案起作用。
感谢你这个宝贵的建议,尽管我仍认为苹果应该默认支持这些技巧。我使用xCode 12创建了一个包含测试的项目,仍然需要这些技巧。
为了解决这个问题,我花费了很多很多小时。谢谢。苹果,我只有几个问题:为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?