一、iOS Framework
Framework 实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。
库在使用的时候需要Link,Link的方式有两种,静态和动态,于是便产生了静态库和动态库。
- 静态库
静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了
- 动态库
动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来
- Embedded framework
自定义的动态framework和系统的还是存在区别。系统的动态库不需要拷贝到目标程序中,自定义的还是要拷贝,因此称为Embedded Framework
二、podspec
可以使用pod 自带的命令创建pod spec.
对podspec进行检验 $ pod lib lint QRCodeGenerator.podspec
三、cocoapods-package
安装位置:/Library/Ruby/Gems/2.3.0/gems/cocoapods-packager-1.5.0
使用pod package命令生成framework
查看输出的framework
使用--library可以生成.a文件,但是不会自动生成公共头文件,需要手动添加,有关resource的设置也会被忽略。
dependency
framework作为编译后的产物,要想编译成功,相应的文件的文件必须都存在。
通过dependency指明依赖,依赖的文件也会编译进framework中,可以使用--no-mangle来控制是否添加前缀,默认会加上前缀。
framework中导入了AFNetworking,但是客户端无法调用,因为客户端只能方能访问framework中的公开头文件。 如果添加了客户端可以自行导入AFNetworking,不会有冲突。
添加了前缀的依赖库,运行时输出如下
verdored_frameworks/verdored_libraries
可以使用verdored_frameworks以及verdored_libraries指定依赖的第三方库,这些库不会编译进framework中,客户端需要手动导入。
依赖系统framework,需要手动添加
四、Futher
cocoapods-packager 是怎么做到的
/Library/Ruby/Gems/2.3.0/gems/cocoapods-packager-1.5.0
-
解析podspec,完成准备工作,创建目录、移动资源、下载依赖等
-
通过xcodeproj和解析podspec的结果(资源、源文件、pch、公共头文件、framework依赖..),创建工程Pods.xcodeproj
-
通过xcodebuild命令编译Pods.xcodeproj,生成.a/.framework
-
.a/framework合并,变成fat .a/.framework
查看输出的framework









网友评论