iOS 静态库 - 制作静态库

前言


不论是个人开发还是团队开发,随着经验的积累,会有一套属于自己的类和工具函数。在团队开发中,每个成员都会有自己习惯的属于自己的类和工具,如果不能进行整合利用,一个项目中会存在许多重复的工具函数和类别,所以整合成为一个受到大家认可的工具集尤为重要。当开启一个新项目时,你肯定会发现许多之前项目中用到过的方法,重用代码的最简单方法是copy,但是这种方式会对维护造成极大的阻碍,你很难保证共用文件在所有项目之间的同步升级。这时静态库就闪亮登场了,一个静态库是由若干个类,函数,定义和资源的包装,将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节,你可以将其打包并在项目之间共享。


制作静态库


1.开一个新项目,创建静态库

iOS 静态库 - 制作静态库_第1张图片
Create Static Library

2.将你需要打包的文件拖入项目。(此处无图)

此处需要注意的是:如果你在静态库工程中使用了Category,那么你可能会碰到链接问题。解决方法:

*  方法1:在生成静态库的工程和使用静态库的工程中使用“-all_load”编译选项,即在“Other Linker Flags”选项添加“-all_load”。(Build Settings)

iOS 静态库 - 制作静态库_第2张图片
Other Linker Flags设置

*  方法2:在Category的.M文件中,声明一个虚拟类。(推荐)

iOS 静态库 - 制作静态库_第3张图片
在Category的.M文件中创建一个虚拟类

3.配置你的静态库

*  配置静态库的Deployment Target(Build Settings)

iOS 静态库 - 制作静态库_第4张图片
配置Deployment Target

*  配置需要暴露的头文件(Build Phases - Copy File)

iOS 静态库 - 制作静态库_第5张图片
配置需要暴露的头文件

*  配置静态库的architecture版本(Build Settings - Build Active Architecture Only)

iOS 静态库 - 制作静态库_第6张图片
配置静态库的architecture版本

注意:"Build Active Architecture Only" 设置为”NO” (设置为NO会编译所有版本,否则只编译当前的architecture版本)

在进行以上配置之后,就可以满足大多数静态库的需求了,打包走起!

4.编译生成静态库.a文件

1)分别选择真机和Iphone6模拟器进行编译,这是你可以看到项目文件夹中Products里面的.a文件生成了,然后右键Show In Finder

iOS 静态库 - 制作静态库_第7张图片
生产.a文件

2)可以看到在文件夹中生成了对应的模拟器.a以及真机.a以及需要暴露的头文件。

iOS 静态库 - 制作静态库_第8张图片
查看文件夹中的.a文件

3)合并.a文件

使用终端进行合成操作 lipo -create (真机.a路径) (模拟器.a路径) -output 保存路径/(文件名).a

合并.a文件

成功之后新生成的.a文件就可以使用啦!!!

新生成的.a文件

5.使用静态库

将.h以及合成的通用版.a文件导入测试工程中,实现.h提供的接口


福利


既然你坚持看到这里!!!不得不送你一个宏作为感谢,帮助你在Category中快速创建虚拟类

#ifndef FIX_CATEGORY_BUG

#define FIX_CATEGORY_BUG(_name_) \

@interface FIX_CATEGORY_BUG ## _name_ : NSObject  @end\

@implementation FIX_CATEGORY_BUG ## _name_  @end

#endif


目前iOS设备对应的CPU架构了列表:iOS设备的CPU架构

你可能感兴趣的:(iOS 静态库 - 制作静态库)