静态库是是什么,有什么用途就不说多了,在这篇文章里有具体介绍:http://www.jianshu.com/p/31ea30b1826d,我就直接上干货拉。
第一步:用XCode创建一个静态库项目


第二步:实现静态库代码
静态库项目创建完成后在组织结构中会出现两个跟项目名称同名的.h和.m文件,实现的逻辑跟普通的iOS代码一样,.h中声明属性和方法,.m中实现方法。笔者在这里简单的在.h文件中声明了一个属性,一个类方法和一个实例方法,并在.m文件中实现了这两个方法。鉴于这是一篇入门的文章,更复杂的实现就期待各位去慢慢研究。


第三步:编译静态库
代码到这里已经码完了,是不是很简单,接着就是编译(Command+B)。编译时要注意以下几点:
1.注意模拟器和真机的区别。编译版本一共可分为四种:模拟器环境下的(Debug和Release)版本,真机环境下的(Debug和Release)版本。模拟器和真机的区别是因为CPU架构不同,模拟器(4s~5: i386,5s~7plus: x86_64),真机(3gs~4s: armv7,5~5c: armv7s,5s~7plus: arm64)。总的来说模拟器支持i386和x86_64这两个版本,真机支持armv7,armv7s和arm64这三个版本,只要支持静态库支持arm7,就可以支持armv7s。
在XCode中选择一个模拟器直接编译,会生成一个只支持当前模拟器架构的Debug版本的静态库。就是说假如选择了iphone7模拟器进行编译,编译出来的静态库只会支持x86_64架构的模拟器系统。如果我们希望我们编译的Debug版本可以支持全部模拟器,则需要在Build Settings中修改配置项:

选择真机编译的话不需要担心这个问题,同样Release版本也不需要考虑这个配置项,因为默认就是No。
2. 编译完成后下图方框中文件的颜色会从红色变为黑色,打开这个这个文件就可以看到编译好的.a文件,也就是我们需要的静态库。

编译好的静态库会方法一个指定的目录下面,假如四种版本都编译了,就会生成如图的四个文件夹,具体的对应关系就不再一一介绍了:

3.通常我们会希望我们提供给别人的版本既能支持模拟器,又能支持真机,那么,我们就需要合并静态库,对应上图的话即使合并两个Debug目录中的.a文件和两个Release目录中的.a文件。以Release版本举例说明:


lipo是一个linux指令,查看静态库信息需要加上-info选项,合并静态库需要加上-create和-output选项,这些选项都需要指定参数。
第四步:使用静态库
合并后的静态库已经可以导入其他项目中使用啦,通常开发者会选择Release版本的静态库。最后要注意点的也是很关键的一个。在其他项目中导入我们的静态库,除了导入.a文件以外,还需要导入相关的头文件。

这种既要导入.h文件,又要导入.a文件的方式对于强迫症患者来说是很难接受的,那么有没有更好的方法统一管理呢?答案是YES,.framework可以满足这一需求!
网友评论