制作.a静态库

一、前言

代码库可分为开源库和闭源库

       开源库即公开源代码,能看到内部的具体实现,我们常见的AFN,Masonry都是开源库

       闭源库是经过编译的二进制文件,只看到声明文件,看不到内部的实现方法,可分为静态库,动态库两种。静态库有两种形式:.a和.framework。动态库形式:.dylib,.tbd 和 .framework

      这里简单说一下静态库与动态库在使用上的区别,Link Binary With Libraries时,静态库会被完整地复制到可执行文件中,被多次使用就有多次冗余拷贝(一般三方闭源库使用)。动态库是在程序运行时由系统动态加载到内存,供程序使用,系统只加载一次,多个程序同时使用这一个,节省内存(一般系统闭源库使用)。恕我直言,项目中如果使用了自制的动态库,审核会被拒的哦

二、下面开始制作.a静态库

1. File-New-Project,选择Cocoa Touch Static Library

制作.a静态库_第1张图片

2. 添加库需要包含的源码,将代码放到静态库工程里

制作.a静态库_第2张图片
制作.a静态库_第3张图片

3. 编译前所要注意的一些地方

制作.a静态库_第4张图片
编译前products下的这个文件显示为红色
制作.a静态库_第5张图片
build architecture设为NO
制作.a静态库_第6张图片
在compile sources设置好编译的依赖文件,copy files设置好声明文件

4. Edit Scheme,选择release模式

制作.a静态库_第7张图片

5. Device分别选中真机和模拟器,Command+B进行编译,成功之后,原先红色的那个地方会变黑。点到那里,右键Show In Finder。可以看到Release-iphoneos(真机下的.a) release-iphonesimulator(模拟器下的.a)两个文件夹

制作.a静态库_第8张图片

6. 对模拟器下的.a和真机下的.a进行合并,以便本静态库支持真机和模拟器

6.1 将Release-iphoneos文件夹与release-iphonesimulator文件夹拷贝到一个新建的文件夹里,打开终端,输入:

lipo  -create “真机下的.a文件路径” “模拟器下的.a文件路径” -output “合并后的.a所要存放的路径”。例如下图

6.2 检查合并后的.a是否满足要求,输入命令:lipo  -info “.a所在路径”,例如下图,符合armv7, x86_64机型(这个在编译前可以在build setting里进行配置)

7. 这样.a 静态库就成功制作完成,只需要将暴漏的头文件以及制作的.a放入工程,别人就可以使用你的程序了,麻麻再也不用担心你的源码暴漏或者有些屌丝随意修改你的代码了。注:图片资源是不能打进.a的,需要在外面添加

三、注意:

       如果静态库中有category类,则在使用静态库的项目配置中的build setting里搜索Other Linker Flags,添加参数[-ObjC]或者[-all_load]

下一回会介绍.framework静态的的制作心得与使用方法,敬请期待。码农共勉!

你可能感兴趣的:(制作.a静态库)