iOS开发-静态库.a制作

本篇主要讲解关于.a静态库的制作和使用,封装之旅就此开始。

什么是库

库的本质是程序代码的集合,是共享程序代码的一种方式,也是复用代码的一种方式。根据代码公开程度,库可以分为两种,一种是开源库,一种是闭源库,闭源库指不公开源代码,是经过编译后的二进制文件,看不到具体实现。常用的闭源库主要有静态库、动态库。这里主要讲静态库的使用和制作。

为什么需要库

在iOS开发中,我们时常会用到一些别人封装好的第三方库。那么不管是抱着礼尚往来的心态,还是好东西需要大家一起分享的态度,亦或者仅仅为了图自己以后开发的方便。我们也完全可以将自己写的一些方便程序开发的工具类封装成库,然后供大家使用。得到同行的肯定也是开发的一大乐趣之一,不是么。

更进一步的,即使是封装好的管理类,框架类,在使用的时候可能也还会依赖一些第三方库和系统库。如果我们每次使用的时候都要将这些东西重新导入和配置一遍,这样会浪费很大的精力,而且对于开发者来说,也是一件枯燥无意义的事情。除此之外,如果项目需要多人合作,你可能也并不希望你的源代码暴漏在所有人的面前。那么机智的程序员便想出了一个一劳永逸的办法。我们可以使用静态库或者动态库的方式来对我们的代码进行封装,便于复用的同时,还能隐藏那些我们不愿公开的心血。

在iOS中,静态库和动态库的存在形式分别有:

  • 静态库:.a 和 .framework

  • 动态库:.dylib 和 .framework

如何新建.a静态库

  1. 创建工程,选择创建Framework&Library中Cocoa Touch Static Library。

  2. 编写代码。

  3. 生成lib库,将写好的代码分别在模拟器和iOS Device模式下运行。

    注意: Show In Finder生成了2种, 分别在模拟器下运行和真机下运行。

    通过终端命令lipo -info 库的路径可以查看库的平台。

    真机: armv7 arm64

    模拟器: x86_64

  4. 合并两种库,在终端输入:

    ipo -create Debug-iphoneos/libMJRefresh.a Debug-iphonesimulator/libMJRefresh.a -output libMJRefresh.a

    相当于

    ipo -create 真机库文件路径 模拟器库文件路径 -output 合并后库文件路径

  5. 将头文件、资源和库放在一起,为了避免资源和工程资源冲突问题,最好将资源放在bundle里。

  6. 使用的时候将头文件、资源和.a文件直接拖入工程即可。

参考

静态库的制作