学习笔记,如有错误,欢迎批评指正!!!
静态库
静态库的存在形式:
xxx.a和xxx.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版本
- Debug版本会包含完整的符号信息,以方便调试
- Debug版本不会对代码进行优化
- Release版本
- Release版本不会包含完整的符号信息
- Release版本的代码是经过优化的
- Release版本的静态库大小会比Debug版本的略小
- 在执行速度方面,Release版本会稍微更快一些
如何生成支持不同架构的静态库?
答:静态库合并
终端命令:
lipo -create xxx.a xxx.a -output xxx.a
拿上面生成的真机和模拟器的静态库为例:Release版本的
-
先分别查看支持的架构,如图所示:12.jpg
-
合并两个静态库:13.jpg
-
查看合并之后的静态库支持的架构:14.jpg
合并静态库的优缺点
- 优点:开发过程中既可以在真机上调试,也可以在模拟器上调试
- 缺点:如果静态库太大,合并打包后的静态库和更大
静态库的制作流程(xxx.framework)
==步骤==
-
新建项目,选择.framework静态库 1.jpg
- 设置编译所有架构,
Build Setting-->Build Active Architecture Only, 改成NO2.jpg -
注意,默认制作的xxx.framework是动态库,需要改成 静态库。Build Setting-->Mach-O Type, 改成Static Library。3.jpg -
注意:将需要暴露的头文件暴露出来4.jpg
- 编译,查看编译好的
xxx.framework5.jpg - 查看是不是静态库类型:终端命令
file xxx.framework6.jpg - 接下来,复制到项目中,测试自己生成的
xxx.framework7.jpg
静态库xxx.a 和 静态库xxx.framework的区别
-
xxx.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件 -
.a文件不能直接使用,至少要有.h文件的配合;.framework文件可以直接使用

















