前言:

         做ios开发经常会碰到各类的SDK,其中我们经常看到类似***.a的文件。这个就是封装好的库文件,那么它是如何制作出来的?又发何使用呢?

 

知识点:

一、库

所谓库,就是封装好的程序代码。其中又分为开源库和闭源库。

开源库就是公开源代码,能看到代码的具体细节,可修改。例如:SDWebimage、AFNetworking等。闭源库就是不公开源代码,无法看到源代码,不可修改,只能使用。闭源库又分:静态库、动态库

(1)     静态库

.a和.framework形式存在。

(2)     动态库

.dylib和.framework形式存在。

使用区分:

静态库在链接时就会被完整地复制到可执行文件,多次使用就多次复制,造成代码冗余 
动态库在链接时不会进行复制,而是由程序运行时系统动态加载到内存,供程序调用,只加载一次,节省内存 
注意:项目中若有自制动态库,不能被上传到AppStore。


制作过程:

1:建立项目,如下图所示

ios开发用什么 ios开发用什么sdk_动态库


Xcode建立工程,选择IOS下的Famework&Library其中选择Cocoa Touch Static Library

2:项目结构如下图所示

ios开发用什么 ios开发用什么sdk_ios开发用什么_02

这时我们好像已经看到了一个libTestLib.a的文件,为什么是红色的呢?这就做好了吗?当然没有制作好了,红色是因为没有进行编译。

3:代码功能实现

添加相应的功能代码;

ios开发用什么 ios开发用什么sdk_iphone_03

这里注意.h文件中也要写好方法定义。如下图所示

ios开发用什么 ios开发用什么sdk_动态库_04

4:工程配置

ios开发用什么 ios开发用什么sdk_ios开发用什么_05

确保所需代码添加到编译列表中。

ios开发用什么 ios开发用什么sdk_iphone_06

5:编译工程

         确保工程,在release模式。

ios开发用什么 ios开发用什么sdk_静态库_07

选择Edit Scheme进行设置。

真机编译设置,如下图所示

ios开发用什么 ios开发用什么sdk_ios开发用什么_08

模拟器编译设置,如下图所示

ios开发用什么 ios开发用什么sdk_ios开发用什么_09

编译(Command+B)或如下图所示

ios开发用什么 ios开发用什么sdk_iphone_10

6:文件合并

         经过上面的编译工作,我们发现libtestLib.a文件变成了黑色。文件夹中查看,如下图:

ios开发用什么 ios开发用什么sdk_静态库_11

Release-iphoneos 文件夹里面的东西是用在真机上的

Release-iphonesimulator 文件夹里面的东西是用在模拟器上的

将两个文件夹复制到桌面新建文件夹tt中,打开终端执行合并操作

ios开发用什么 ios开发用什么sdk_静态库_11

ios开发用什么 ios开发用什么sdk_ios开发用什么_13

合并代码:

Lipo –create/Users/drb/Desktop/tt/Release-iphoneos/libTestLib.a /Users/drb/Desktop/tt/Release-iphonesimulator/libTestLib.a  -output /Users/drb/Desktop/tt/testlib.a

查看信息代码:

lipo -info/Users/drb/Desktop/tt/testlib.a


格式(注意空格):

lipo-create 真机下的.a路径(空格)模拟器下的.a路径(空格) -output (空格)合成后的路径及名称 

查看信息时,如下图所示内容很重要

ios开发用什么 ios开发用什么sdk_静态库_14

到此静态库制作完成。

 

使用过程

1:如下图所示,将制作好的testlib.a文件和TestLib.h文件添加到工程中

ios开发用什么 ios开发用什么sdk_iphone_15


添加调用代码:

      

//静态库调用测试
TestLib * testlib = [[TestLiballoc]init];
[testlib HelloLib];

运行程序,我们会看到调用成功了! 输出信息:”hellolib test!”