美文网首页
iOS打包静态库.a(一)

iOS打包静态库.a(一)

作者: 碧海云天V | 来源:发表于2018-06-08 17:21 被阅读13次

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

    库的分类

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

    静态库和动态库

    存在形式:

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

    使用区别:

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

    iOS设备CPU架构

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

    • 模拟器:x86_64
    • 真机:arm64

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

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

    image.png

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

    image.png image.png

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


    image.png

    4、编译工程进行打包

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

    image.png

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

    5、公开接口头文件

    image.png

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

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

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

    image.png

    使用静态库

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

    image.png image.png

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

    image.png

    3、替换.a文件

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

    image.png

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

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

    相关文章

      网友评论

          本文标题:iOS打包静态库.a(一)

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