美文网首页
基于cocoapods生成framework/.a

基于cocoapods生成framework/.a

作者: 观星 | 来源:发表于2018-08-07 16:43 被阅读107次

一、iOS Framework

Framework 实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

库在使用的时候需要Link,Link的方式有两种,静态和动态,于是便产生了静态库和动态库。

  • 静态库

静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了

  • 动态库

动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来

  • Embedded framework

自定义的动态framework和系统的还是存在区别。系统的动态库不需要拷贝到目标程序中,自定义的还是要拷贝,因此称为Embedded Framework

二、podspec

Podspec Syntax Reference

可以使用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

  1. 解析podspec,完成准备工作,创建目录、移动资源、下载依赖等

  2. 通过xcodeproj和解析podspec的结果(资源、源文件、pch、公共头文件、framework依赖..),创建工程Pods.xcodeproj

  3. 通过xcodebuild命令编译Pods.xcodeproj,生成.a/.framework

  4. .a/framework合并,变成fat .a/.framework

    查看输出的framework

相关文章

网友评论

      本文标题:基于cocoapods生成framework/.a

      本文链接:https://www.haomeiwen.com/subject/ekyavftx.html