iOS打包静态库.a(一)

库是共享程序代码的方式。库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。在开发过程中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成库,只暴露出头文件以供使用。库分静态库和动态库两种。

库的分类

  • 开源库
    源代码是公开的,你可以看到具体实现。比如GitHub上比较出名的第三方框架AFNetworking、SDWebImage。
  • 闭源库
    不公开源代码,只公开调用的接口,看不到具体的实现,是一个编译后的二进制文件。这种常见于一些公司的SDK包,比如高德地图SDK、环信即时通讯SDK等等。而闭源库又分为两类:静态库和动态库。本篇重点要讲的便是其中的静态库。

静态库和动态库

存在形式:

  • 静态库
    以".a"或者“.framework”为文件后缀名
  • 动态库
    以".dylib"或者“.framework”为文件后缀名

使用区别:

  • 静态库链接时会被完整的复制到可执行文件中,被多次使用就有多份拷贝。
  • 动态库链接时不复制,程序运行时由系统动态加载到内存,供程序调用。而且系统只加载一次,多个程序共用,节省内存。

iOS设备CPU架构

这里只考虑iPhone 5S以后的机型

  • 模拟器:x86_64
  • 真机:arm64

打包静态库(这一篇我们只讲.a静态库)

1、打开Xcode创建一个新的工程,这里以Xcode9为例,选择工程如下:

iOS打包静态库.a(一)_第1张图片
image.png

2、创建工程完毕后,添加一个方法用于测试

iOS打包静态库.a(一)_第2张图片
image.png
iOS打包静态库.a(一)_第3张图片
image.png

3、设置适配所有模拟器架构


iOS打包静态库.a(一)_第4张图片
image.png

4、编译工程进行打包

打包时如果选择模拟器打包,该包就只能在模拟器上使用,选择真机打包,该包就只能在真机上使用

iOS打包静态库.a(一)_第5张图片
image.png

运行完毕后,我们会看到工程中Products文件夹下的libStaticLibrary.a文件由红色变成了黑色。右键show in finder可以在其目录下找到它。这就是我们打包好的.a静态文件了。

5、公开接口头文件

iOS打包静态库.a(一)_第6张图片
image.png

6、解决模拟器和真机的静态包不能混用的问题

打包命令:
lipo -create 完整路径(1)/lib.a 完整路径(2)/lib.a -output 输出路径/lib.a

“完整路径(1)/lib.a”是模拟器静态包的路径
“完整路径(2)/lib.a”是真机静态包的路径
"输出路径/lib.a"是自己指定的输出路径
输出的文件名最好和原有静态包名一致

iOS打包静态库.a(一)_第7张图片
image.png

使用静态库

1、把打包好的静态库拿出来

iOS打包静态库.a(一)_第8张图片
image.png
iOS打包静态库.a(一)_第9张图片
image.png

2、静态库在其他工程中的使用

iOS打包静态库.a(一)_第10张图片
image.png

3、替换.a文件

上面一步中我们自己生成了一个模拟器和真机混用的静态包,拿这个.a文件替换掉项目中的.a文件就行了

iOS打包静态库.a(一)_第11张图片
image.png

4、调用静态库中的方法(真机模拟器都可用用这个静态库了)

iOS打包静态库.a(一)_第12张图片
image.png
当我们给别人写SDK时,就需要用到静态库,有了这几招,我们就能飞快的打静态包了,下一篇介绍的是《iOS打包静态库.frameworke(二)》,我们可以按需求进行多样化的选择。

你可能感兴趣的:(iOS打包静态库.a(一))