iOS开发之静态库

相信很多人都是用过库,Github上有很多优秀的开源库。如果我们不想暴露源代码还希望提过给他人使用,这就需要闭源库。通过将代码打包,分发给使用者。既方便使用者,也不会泄露核心代码。接下来我们看看如何打包库吧!

静态库基本概念

什么是库?

库 就是程序代码的集合,是共享程序代码的一种方式。

库的分类?

开源库

公开源代码,别人可以看到,例如:MJExtensionMJRefresh等。

闭源库

不公开源代码,经过编译的二进制文件。主要分为:静态库和动态库。

静态库的存在形式?

.a
.framework

动态库的存在形式?

.dylib
.framework

静态库和动态库的区别?

静态库多次使用,多次拷贝存在多份副本。动态库只有一份,程序运行时动态加载到内存中。

程序使用了自己的动态库,不允许上架

静态库应用场景?

  • 保护自己的核心代码。例如,友盟,百度地图,微信SDK等
  • MRC的项目打包成静态库可以直接在ARC中使用

静态库的特点?

  • .a + .h
  • 看不到具体代码

静态库的生成

两种类型:

  • .a
  • .framework

架构

不同架构的静态库是不可以通用的。
修改Build Setting -> Build Active Architecture OnlyNO,编译多个版本。

模拟器

  • 4s-5: i383
  • 5s - 7ps : x86_64

真机

  • armv7 arm64
1
2
lipo -info xxx.a   // 查看信息,查看架构信息
lipo -create xxx_A.a xxx_B.a -output xxx_C.a // 合并两个静态库

版本

调试版本(Debug)

输出调试信息。

发布版本(Release)

没有调试信息,相对较小。

.a .framework的区别?

  1. .a是一个二进制文件,.framework除了二进制文件还有资源文件
  2. a不可以直接使用需要.h的配合,.framework可以直接使用。
  3. .a + .h + soucreFile = .framework
  4. 建议使用.framework

Swift动态库

Swift 不支持静态库,创建.framework类型的动态库。注意在使用的时候需要手动引入

更新

在Xcode 9中,Swift对静态库实现原生支持。

关于静态库可以参考这篇文章

即刻Swift静态库实践