Xcode单元测试构建失败,错误提示为“Undefined symbols for architecture x86_64”。

17 浏览
0 Comments

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 是 No
  • Other Linker Flags 是 -framework XCTest
  • Framework Search Paths 是 $(SDKROOT)/Developer/Library/Frameworks $(inherited)
0
0 Comments

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"错误的原因和解决方法。

0
0 Comments

在使用Xcode进行单元测试时,可能会遇到"Undefined symbols for architecture x86_64"的构建失败错误。这个错误可能是由于错误的测试目标类型导致的,即ui测试目标。

UI测试目标不能使用主目标的内部内容,即使使用了导入也不行。相反,单元测试目标可以使用内部内容。

更多详细信息请参见这个回答

我相信在某个Xcode版本中发生了改变,这导致了混淆。通常的做法是在ui测试目标中包含大量来自原始目标的文件。正确的做法是设计UI测试,使其不需要或使用主目标的大量代码。

0
0 Comments

问题原因:在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创建了一个包含测试的项目,仍然需要这些技巧。

为了解决这个问题,我花费了很多很多小时。谢谢。苹果,我只有几个问题:为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?为什么?

0