XCode unittest构建失败,出现错误“架构x86_64的未定义符号”
我的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)
基本信息:
- Xcode6.2
- iOS8.2 SDK
我检查了什么:
-
Symbols Hidden by Default
为否 -
Other Linker Flags
是-framework XCTest -
Framework Search Paths
是$(SDKROOT)/ Developer / Library / Frameworks $(inheritance)
根据此链接 ,我需要在unittest目标Build Settings
中将Bundle Loader
设置为低于内容
$(BUILT_PRODUCTS_DIR)/MyExistingApp.app/MyExistingApp
至少从Xcode 7.3测试目标开始,您可以选择“主机应用程序”。 在测试目标(但目前不是UI测试目标)中,这会自动填充“测试主机”构建设置,但不会填充“捆绑加载器”,这可能导致找不到类。
考虑到这一点,如果将测试目标的“Bundle Loader”构建设置设置为$(TEST_HOST)
,即使更改了Host Application,它也将始终包含正确的值。
这实际上与 @ yuwen-yan发布的链接中给出的建议相反 ,应该相当于减少工作量。
经历过同样的问题。 为我修复的是在测试目标Build Settings
中将enable modules (c and objective-c)
为YES 。
将测试目标添加到之前创建2或3个XCode版本的旧项目后遇到相同的链接器错误。 此外,项目有各种xcodeproject / target / bundle名称。 所有可能的重命名 , 清理 , Build settings
, Build phases
, Scheme
操作对我来说都不起作用。
经过长时间的努力,实际工作的是在最新的Xcode版本中从头开始重新创建项目以及所有目标 。 它终于链接了! 在这种情况下,您甚至不需要手动修改Search paths
, Bundle loader
,Xcode将为您完成。
以下是我在Xcode 9中尝试添加unit testing目标时为解决问题而执行的步骤:
- 转到“管理方案”。
- 点击底部的“+”按钮。
- 选择新添加的目标并选择“确定”。
- 确保为新添加的目标选择“共享”选项。
- iOS自动续订在当前订阅期结束时到期
- Xcode 6.0.1命令/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc失败,退出代码1
- 苹果智能横幅上的应用参数是否会在安装时传递给应用?
- Xcode 7上的Gmail API的快速入门说明不起作用
- APNS通知未到达在Apple MDM中注册的设备
- 如何在UIImageView中“级联”图像模式?
- 在多对多关系中的KVO对象属性
- 我如何dynamic调整UICollectionView中的标题视图?
- 如何禁用MKMapView上的用户交互?