iOS 静态库

什么是库

库是程序代码的集合,共享程序代码的一种方式。库分为开源库闭源库。开源库例如:MJExtesionSDWebImage。项目中用到的微信支付 SDK,极光推送等就是以闭源库的形式展现。

存在形式

  • 静态库:.a,.framework
  • 动态库:.dylib,.framework

静态库特点

.a 文件 + .h 文件,看不到具体的实现代码。

静态库应用场景

  • 保护自己的核心代码
  • 将 MRC 的项目,打包成静态库,可以在 ARC 下直接使用不用转换

静态库和动态库区别

静态库在链接时,被完整地复制到可执行文件中,被多次使用,就有多份拷贝。
动态库则不会复制,只有一份,程序运行时加载到内存中,多个程序公用,节省内存。
项目中不允许使用自己的动态库。

静态库的生成和使用

新建项目,选择静态库项目。


iOS 静态库_第1张图片

简单创建一个 OC 类文件,写一个类方法。编译,生成静态库。

iOS 静态库_第2张图片

从文件中查看静态库。


iOS 静态库_第3张图片

光有 .a 文件还不够,需要暴露出头文件,让使用这个静态库的人知道如何。

iOS 静态库_第4张图片
暴露头文件
iOS 静态库_第5张图片
直接拖入项目中使用

静态库的架构

上面库的生成和使用,看起来都没问题,但是当把模拟器切换到 iphone 5 的时候,编译静态库就会报错。


iOS 静态库_第6张图片

因为不同的模拟器,真机设备,CPU 架构不一样,如果静态库不支持某个 CPU 架构的话,就不能成功编译。我们需要做的是:把静态库打包成预期使用环境的架构。

模拟器和真机的架构:

模拟器 架构
iphone5 及之前的设备 i386
5s-7plus x86_64
真机 架构
iphone5 及之前的设备 armv7s(armv7 兼容 armv7s)
5s-7plus arm64

查看静态库架构

lipo -info 静态库路径

iOS 静态库_第7张图片

编译支持更多架构的静态库

iOS 静态库_第8张图片

选择要打包的对应的设备,这里选择的是真机。



这样打包出来的静态库,就支持多种架构。


iOS 静态库_第9张图片

同时兼容真机和模拟器

合并静态库

lipo -create 静态库A 静态库B -output hebing.a

iOS 静态库_第10张图片

选择 Release 还是 Debug

开发阶段选择 Debug,当正式发布静态库给别人用的时候,选择 Release。

创建 .framework

默认创建的是动态库,需要手动设置。头文件暴露,选择编译的版本,支持的架构等设置和创建 .a 文件一致。


iOS 静态库_第11张图片

静态库打包步骤

  1. 确定建立哪一种静态库
  2. 确定支持的架构
  3. 对外提供 release 版本

复合工程调试静态库

在 Demo 项目中创建静态库


iOS 静态库_第12张图片

通过静态库,解决 MRC 问题

创建静态库,配置项目不支持 ARC,打包成库,给其他项目使用

用 Swift 创建静态库

因为是跨模块,所以应该使用一些修饰符来创建类和方法。


iOS 静态库_第13张图片

编译之后,会生成一个桥接文件,把 Swift 相关的类和方法,写在 OC 头文件里,供其他地方使用。


iOS 静态库_第14张图片

你可能感兴趣的:(iOS 静态库)