问题描述
近期利用cocopods工具做了一个SDK(该SDK是个静态库),想测试一下,当把它放到Demo工程中后pod install
,编译运行都没问题,工程目录如下:
但是当调用SDK中分类的方法时,运行报错:
2019-08-16 11:16:29.893229+0800 FanbeiCreditSDKDemo[21342:1396670] 初始化SDK
2019-08-16 11:16:29.898904+0800 FanbeiCreditSDKDemo[21342:1396670] -[__NSFrozenDictionaryM muDao_jsonString]: unrecognized selector sent to instance 0x2814793a0
报错原因是:给NSDictionary对象调用muDao_jsonString
方法,方法找不到。该方法是静态库中的NSDictionary分类定义的。
网上分享的一般解决办法
通过查资料发现,此类问题的解决方法是:一般在Other Linker Flags
中加入-ObjC
、-all_load
或-force_load
参数
那么,Other Linker Flags到底是用来干什么的呢?还有-ObjC和-all_load到底发挥了什么作用呢?
可以查看这篇文章:https://blog.csdn.net/u012243474/article/details/52619344
我的解决办法
先按照网上的解决办法,在Other Linker Flags
中加入-ObjC
参数,发现不管用。
方法一:对比正常项目的Other Linker Flags参数
通过对比可以发现,每个静态库都配有参数
-framework
、静态库都名称(去掉.framework后缀)
按此种方法给崩溃的项目添加参数,运行成功!
方法二:官方的解决办法
找到了一篇官方的解决办法:https://developer.apple.com/library/archive/qa/qa1490/_index.html
文中的解决办法是:在Other Linker Flags
中增加 $(OTHER_LDFLAGS) -ObjC
参数。
添加之后,运行成功!
其实,按方法二添加参数之后,自动会转为方法一的参数。
综上,推送用方法二!解决此类问题。