平时我们说的库(library)
是对库(library)
和框架(framework)
的通称。我们说swift
库,指的是swift动态框架(Swift dynamic framework)
,因为swift
不允许使用静态库(static library)
。
那么库(library)
和框架(framework)
有什么区别呢?iOS8
之后引入动态框架(dynamic framework)
,动态框架(dynamic framework)
可以包含代码,图片和其他资源。在iOS8
之前,只能使用静态库(static library)
。静态库(static library)
会包含多种指令集代码,例如i386
,armv7
等,所以也称作胖静态库(fat static library)
。静态库(static library)
不能包含其他资源,只能是代码。
还有一点不同是,动态框架(dynamic framework)
有命名空间(namespace)
,所以,如果在同一个工程里引入两个动态框架(dynamic framework)
,有相同名字的类,也不会冲突,但是静态库(static library)
就会冲突。
swift5
之前,iOS
系统并没有包含swift运行时库(Swift runtime libraries)
,也就是说,每个swift静态库(static library)
都需要把这个运行时库(runtime libraries)
包含进去,但是如果有多个静态库(static library)
,那么就会导致包含进去的运行时库(Swift runtime libraries)
冲突。所以,苹果只能用swift动态框架(dynamic framework)
。
在使用cocoapod
管理依赖时,在podfile
里,使用use_frameworks!
表示编译生成动态框架(dynamic framework)
。所以,如果是swift
工程,那就必须使用use_frameworks!
,上文说了,swift必须使用动态框架(dynamic framework)
。
参考:https://www.raywenderlich.com/626-cocoapods-tutorial-for-swift-getting-started