【Rason的iOS每周小应用】iOS静态库与动态库集成问题
2021-01-26 本文已影响0人
RasonWu
情况一:第三方静态库,被自己的动态库、App同时集成:
- 经典警告:
One of the two will be used. Which one is undefined.
image.png - 具体集成情况:
第三方静态库
(比如RSStaticPrint)同时被APP
、自己的动态库SDK
集成,APP
又嵌入自己的动态库SDK
- 分析:
【现象】存在两份静态库,各自load方法都会执行,根据调用位置各自调用所在位置的第三方静态库
(比如RSStaticPrint)。
【对象情况简单剖析】-
自己的动态库SDK
调用的是自己的动态库SDK
里面的类对象RSStaticPrint A(即自己的动态库SDK
.framework里的代码) -
App
调用的实际上是类对象RSStaticPrint B(即.app里的二进制代码)
-
- 经典应用:
【无法调起微信登录问题(微信登录通过Pod只能静态库形式集成)】
【问题】
自己的动态库
和APP
同时集成微信登录的静态库,导致Appdelegate的回调无法进行。因为微信初始化和回调在Appdelegate,而微信登录调用位置在自己的动态库SDK
,由于Appdelegate(即App
的位置)和自己的动态库SDK用的不是同一个类对象,所以由于未初始化,无法调起微信登录
【处理】
动态库
直接集成微信登录的静态库,App
不要静态集成
情况二:第三方动态库(比如RSStaticPrint)同时被APP、自己的动态库SDK集成嵌入
结论:不会有问题,实际上都是同一份,即*.app/frameworks/*.framework
的这份