Cocoapods 动态依赖和静态依赖混用是否可行?

Cocoapods 大家都用得不少,相信下面这一行都不陌生:

use_frameworks!

这一行的作用声明是cocoapods生成的target使用framework的形式进行依赖。这里有个比较容易混淆的概念,framework并不等于动态库,实际上framework和动态库是两个独立的概念,framework也有静态库的,比如友盟提供的sdk,就是一个静态的framework.
framework 的mach-o type 可以自行选择:


Cocoapods 动态依赖和静态依赖混用是否可行?_第1张图片
屏幕快照 2019-06-19 下午8.59.58.png

cocoapods 的use_framework! 生成的依赖默认是动态库依赖。

对于大部分场景,动态库和静态库依赖对开发者来说其实区别不大,其中一个小小的区别就是,use_framework会自动生成一个copy framework的脚本。如图:


Cocoapods 动态依赖和静态依赖混用是否可行?_第2张图片
企业微信截图_dd76dbeb-0efc-4775-9d8e-b93c82af11e8.png

由于动态库的代码段并不会链入可执行文件,而是作为一个单独的文件放在Framework文件夹,在app启动的时候通过dyld加载,因此,cocoapods生成的这些动态依赖库需要复制到相应的文件夹。其作用大概相当于这里:


Cocoapods 动态依赖和静态依赖混用是否可行?_第3张图片
屏幕快照 2019-06-19 下午9.09.48.png

这里添加的动态库也会打进app里面。

于是问题就来了,如果我的cocoapods由于一些历史原因,不能使用use_framework,但是又依赖了一些自定义的动态库,这怎么处理呢?
一开始我尝试多target 使用不同的配置,比如TargetA 用静态依赖,TargetB用动态依赖,但是会报这个错误:

屏幕快照 2019-06-19 下午8.40.43.png

貌似走不通。然后到cocoapods 的github上翻一下issue,看有没有类似的案例,然后发现一个绝望的事实:
https://github.com/CocoaPods/CocoaPods/issues/3839
Cocoapods 动态依赖和静态依赖混用是否可行?_第4张图片
屏幕快照 2019-06-19 下午9.16.27.png

Cocoapods 动态依赖和静态依赖混用是否可行?_第5张图片
屏幕快照 2019-06-19 下午9.16.34.png

官方不支持,也不打算支持。
所以,放弃混用的念头吧,乖乖地换成全局的use_framework! , 或者自己在buildphase里自己写copy的脚本吧。

你可能感兴趣的:(Cocoapods 动态依赖和静态依赖混用是否可行?)