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

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

use_frameworks!

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


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

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

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


企业微信截图_dd76dbeb-0efc-4775-9d8e-b93c82af11e8.png

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


屏幕快照 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
屏幕快照 2019-06-19 下午9.16.27.png

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容