库,是一种可执行代码的二进制形式,可以被操作系统载入到内存中执行。而静态库做为库的一种,当然也具有库的基本定义,只不过它是在编译过程就将库函数代码载入到可执行程序中,程序在运行时并不需要利用库函数。当然与之相对的还有动态库,它在编译时只是将需要使用的库函数信息载入到可执行程序中,程序运行过程中需要利用库函数。两者的区别在于库函数被载入的时间不同。
在IOS中,静态库有两种格式,libxxx.a和xxx.framework;动态库则为xxx.libdy和xxx.framework。为什么xxx.framework既是静态库又是动态库呢?其实由我们开发者制作的framework只能算静态库,而官方的framework(如UIKit.framework)才算动态库。
那么如何打包静态库呢?接下来,我将演示如何打包两种静态库,如有错误,希望各位大牛能不吝指点。
1.静态库之.a
1)新建工程,选择Cocoa touch static library,点击next。
图1-1
2)输入库名字,如xxx。
图1-2
3)创建好之后,你会发现工程中只有与工程同名的.h和.m文件。你可以在这两个文件中添加你所需要的代码,也可以新建文件进行代码添加。现在新建名为bmxxx的文件。
图1-3
4)在文件中添加代码,由于这里只是试验,所以只添加简单的打印函数和语句。
图1-4
5)代码添加完之后,我们需要在xxx->targets->buildphases中添加我们需要公开的头文件。
图1-5
6)添加完之后,我们便可以运行了。当你选择模拟器build时,你生成的静态库只能在模拟器上跑,选择设备build时,则生成只能真机用的静态库。在编译成功后可以看到products中的libxxx.a由红色变为黑色了。
图1-6
7)右键点击libxxx.a,选择在文件夹中显示。可以看到两个文件夹,一个表示模拟器,一个表示真机。接下来,我们要将两个版本的静态库合并成一个在模拟器上和真机上都能用的静态库。首先打开终端,用lipo -create (静态库1路径) (静态库2路径)-output (导出静态库的路径含库名)。
图1-7
8)到这一步,.a静态库就制作好了。接下来将合并后的静态库与所需的头文件一起添加到项目中去。这样就可以用啦。
补充:其实生成静态库还有其他的方式,只不过个人感觉这种方法更加简单。
2.静态库之.framework
1)与.a静态库一样,先创建静态库工程。
图2-1
2)先修改framework的库的属性,默认为创建为动态库。但开发者自制的动态库是无法提交到appstore的,所以这里改成静态库(先改为敬,忘了可就不好了)。图2-2为默认状态。
图2-2
3)改成静态库后,在库中添加需要的文件,并在xxxx->targets->buildphases中添加需要暴露的头文件。
图2-3
4)添加所需头文件的文件后,分别选择真机和模拟器编译。可以生成xxxx.framework,打开所在文件夹后,对framework中的可执行文件进行如.a静态库相同的合并,用生成的合并后的文件替换原来的。
图2-4
5)最后将静态库添加到你的工程中去,看看成功了没有。
网友评论