使用Fabric的XCTest编译报错问题咨询
解决XCTest构建Fabric/Crashlytics符号未定义问题
看你遇到的这个报错,明显是XCTest测试目标没正确链接Fabric和Crashlytics框架导致的。主应用能正常编译,是因为它的依赖配置已经搞定,但测试目标是独立的构建单元,得单独处理这些依赖才行。
下面给你几个针对性的解决步骤:
1. 用CocoaPods的话,补全测试目标的依赖
如果你的项目是用CocoaPods管理依赖,先检查Podfile里有没有把Fabric和Crashlytics加到测试目标里。正确的写法应该是这样:
target '你的应用名称' do use_frameworks! pod 'Fabric' pod 'Crashlytics' target '你的应用Tests' do inherit! :search_paths pod 'Fabric' pod 'Crashlytics' end end
改完之后跑一遍pod install,更新测试目标的依赖。
2. 手动配置框架链接(不用CocoaPods的情况)
如果是手动管理框架:
- 选中你的测试目标(比如
YourAppTests),切换到Build Phases标签页。 - 在
Link Binary With Libraries里,点击+按钮,添加Fabric.framework和Crashlytics.framework。 - 还要确保测试目标的
Build Settings里,Framework Search Paths包含这两个框架所在的文件夹路径,不然Xcode找不到它们。
3. 屏蔽测试环境下的不必要调用
如果你的测试用例根本不需要用到Fabric或Crashlytics,那就检查下测试代码或者被测试的代码里,有没有不小心调用了这些框架的方法。要是不需要的话,要么删掉相关代码,要么用条件编译只在非测试环境执行:
#if !TARGET_OS_TEST // 只有在非测试环境才初始化Fabric Fabric.with([Crashlytics.self]) #endif
4. 统一架构设置
最后检查下测试目标的Build Settings里,Architectures是不是和主应用一致(比如都设成Standard Architectures (arm64, x86_64)),避免因为架构不匹配导致符号找不到。
内容的提问来源于stack exchange,提问作者shunsuke_stackoverflow
相关产品推荐
相关产品推荐

