iOS 静态库.a和.framework的制作流程

学习笔记,如有错误,欢迎批评指正!!!

静态库

静态库的存在形式:xxx.axxx.framework
注: 本文所写xxx.framework均为静态库

静态库的制作流程(xxx.a)

xxx.a静态库的制作
  • 打开Xcode,创建项目时,直接选择创建静态库,如下图:
    1.jpg
  • 开始编写静态库里边的代码,.h中的方法是需要提供给外界调用的
    2.jpg
  • 然后编译,编译之后,找到xxx.a所在的位置

    3.jpg

  • 至此,静态库就创建好了
    4.jpg
  • 注意,有一个问题,自定义创建的类的头文件没有编译出来,此时,我们需要手动将自定义的类的.h文件给暴露出来,targets-->Build phases-->Copy Files,将需要暴露的头文件添加进来即可 。

    5.jpg

  • 再次编译,查看目录
    6.jpg
  • 我们可以在终端通过: lipo -info xxx.a命令查看 支持的架构

    7.jpg

  • 接下来我们就可以在项目中使用我们自己创建的静态库了
    8.jpg

我们是在 模拟器环境下 编译生成的静态库,所以只支持模拟器运行,真机不能运行。我们也可以切换到真机环境下进行编译生成。

9.jpg

还可以生成 Release版本的静态库。Edit scheme --> Run --> Release

10.jpg

真机和模拟器环境下分别编译之后:


11.jpg
Debug版本和Release版本的区别
  • Debug版本
    1. Debug版本会包含完整的符号信息,以方便调试
    2. Debug版本不会对代码进行优化
  • Release版本
    1. Release版本不会包含完整的符号信息
    2. Release版本的代码是经过优化的
    3. Release版本的静态库大小会比Debug版本的略小
    4. 在执行速度方面,Release版本会稍微更快一些

如何生成支持不同架构的静态库?

答:静态库合并

终端命令:lipo -create xxx.a xxx.a -output xxx.a

拿上面生成的真机和模拟器的静态库为例:Release版本的

  • 先分别查看支持的架构,如图所示:
    12.jpg
  • 合并两个静态库:
    13.jpg
  • 查看合并之后的静态库支持的架构:
    14.jpg
合并静态库的优缺点
  • 优点:开发过程中既可以在真机上调试,也可以在模拟器上调试
  • 缺点:如果静态库太大,合并打包后的静态库和更大

静态库的制作流程(xxx.framework)

==步骤==

  1. 新建项目,选择.framework静态库
    1.jpg
  2. 设置编译所有架构,Build Setting --> Build Active Architecture Only, 改成 NO
    2.jpg
  3. 注意,默认制作的xxx.framework是动态库,需要改成 静态库。Build Setting --> Mach-O Type, 改成 Static Library
    3.jpg
  4. 注意:将需要暴露的头文件暴露出来
    4.jpg
  5. 编译,查看编译好的xxx.framework
    5.jpg
  6. 查看是不是静态库类型:终端命令 file xxx.framework
    6.jpg
  7. 接下来,复制到项目中,测试自己生成的xxx.framework
    7.jpg

静态库xxx.a 和 静态库xxx.framework的区别

  1. xxx.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件
  2. .a文件不能直接使用,至少要有.h文件的配合;.framework文件可以直接使用

你可能感兴趣的:(iOS 静态库.a和.framework的制作流程)