iOS 单元测试与静态库,类别找不到方法的问题解决

记录一次较为坑爹的制作单元测试的经历。

背景是使用Quick写个模块的单元测试。

结果调用pod引入的组件库中的一个类的类别中的方法时,一直不通过。build和断点调试的时候,一切都是正常。一旦执行完成后。Test就crash,报错

 

iOS 单元测试与静态库,类别找不到方法的问题解决如图。

1.开始考虑是否是未导入相关库的头文件导致,结果全部导入后还是不行。

2.然后思考是不是引入的库的环境有问题。对照其他库后发现,有些库的类的类别方法调用是没有问题。有些库中类的类别方法调用也会crash。

分析过后发现:有问题的库都是静态库,没有问题的都是动态库

3.按照上述分析,继续追踪。

网上有文章分析,静态库引入导致的crash。静态库中category方法无法找到。加入-ObjC即可。

https://www.jianshu.com/p/8bbb1c38d3ac

检查了test 和 宿主工程本身的 build settings 的 other link flags 都包含了 -ObjC。问题依然存在。

4.后续就分析是不是test本身的特殊性就单独去查:XCtest 与 静态库

结果找到了这篇文章 https://www.thinbug.com/q/18677952

尝试在 build Phases -> link binary with library 中手动加入test需要访问的类的库,问题解决。

一番折腾,总共大概用了1天多时间来定位这个问题,真的坑。