iOS开发之静态库
iOS开发之静态库
镇长相信很多人都是用过库,Github上有很多优秀的开源库。如果我们不想暴露源代码还希望提过给他人使用,这就需要闭源库。通过将代码打包,分发给使用者。既方便使用者,也不会泄露核心代码。接下来我们看看如何打包库吧!
静态库基本概念
什么是库?
库 就是程序代码的集合,是共享程序代码的一种方式。
库的分类?
开源库
公开源代码,别人可以看到,例如:MJExtension
,MJRefresh
等。
闭源库
不公开源代码,经过编译的二进制文件。主要分为:静态库和动态库。
静态库的存在形式?
.a
.framework
动态库的存在形式?
.dylib
.framework
静态库和动态库的区别?
静态库多次使用,多次拷贝存在多份副本。动态库只有一份,程序运行时动态加载到内存中。
程序使用了自己的动态库,不允许上架
静态库应用场景?
- 保护自己的核心代码。例如,友盟,百度地图,微信SDK等
- 将
MRC
的项目打包成静态库可以直接在ARC
中使用
静态库的特点?
.a + .h
- 看不到具体代码
静态库的生成
两种类型:
.a
.framework
架构
不同架构的静态库是不可以通用的。
修改Build Setting -> Build Active Architecture Only
为NO
,编译多个版本。
模拟器
4s-5: i383
5s - 7ps : x86_64
真机
armv7 arm64
1 | lipo -info xxx.a // 查看信息,查看架构信息 |
版本
调试版本(Debug)
输出调试信息。
发布版本(Release)
没有调试信息,相对较小。
.a
和 .framework
的区别?
.a
是一个二进制文件,.framework
除了二进制文件还有资源文件a
不可以直接使用需要.h的配合,.framework
可以直接使用。.a + .h + soucreFile = .framework
- 建议使用
.framework
Swift动态库
Swift 不支持静态库,创建.framework类型的动态库。注意在使用的时候需要手动引入
更新
在Xcode 9中,Swift对静态库实现原生支持。
关于静态库可以参考这篇文章