use_frameworks!的作用
先明确几个概念:
静态库(.a):编译时将库拷贝一份到目标程序中,但程序包会变的比较大;
动态库(.dyld):编译时只存储指向动态库的引用,多个程序可共用动态库;运行时才加载,加载会损耗部分性能,但程序包会比较小;
Framework:是资源的打包方式,和静态库、动态库本质没什么关系。
使用cocoapods管理程序时,在Podfile文件中通过use_frameworks!指令指定引入外部库的方式;
- 使用 use_frameworks! 时,cocoapods以动态库(dynamic frameworks)的方式引入外部库,如:

- 不使用 use_frameworks! 时,cocoapods以静态库(static libraries)的方式引入外部库:

在纯 ObjC 项目中,CocoaPods 使用编译静态库 .a 方式将代码集成到项目中。在 Pods 项目中的每个 target 都对应这一个 Pod 的静态库。不过在编译过程中并不会真的产出 .a 文件。如果需要 .a 文件的话,可以参考这里,或者使用 CocoasPods-Packager 这个插件。
对于 Swift 项目,CocoaPods 提供了动态 Framework 的支持。通过 use_frameworks! 选项控制。对于 Swift 写的库来说,想通过 CocoaPods 引入工程,必须加入 use_frameworks! 选项。
详见:https://wenghengcong.com/posts/2a2608b7/
https://juejin.im/entry/57b957d80a2b58005c954808