一、前言
代码库可分为开源库和闭源库
开源库即公开源代码,能看到内部的具体实现,我们常见的AFN,Masonry都是开源库
闭源库是经过编译的二进制文件,只看到声明文件,看不到内部的实现方法,可分为静态库,动态库两种。静态库有两种形式:.a和.framework。动态库形式:.dylib,.tbd 和 .framework
这里简单说一下静态库与动态库在使用上的区别,Link Binary With Libraries时,静态库会被完整地复制到可执行文件中,被多次使用就有多次冗余拷贝(一般三方闭源库使用)。动态库是在程序运行时由系统动态加载到内存,供程序使用,系统只加载一次,多个程序同时使用这一个,节省内存(一般系统闭源库使用)。恕我直言,项目中如果使用了自制的动态库,审核会被拒的哦!
二、下面开始制作.a静态库
1. File-New-Project,选择Cocoa Touch Static Library
2. 添加库需要包含的源码,将代码放到静态库工程里
3. 编译前所要注意的一些地方
4. Edit Scheme,选择release模式
5. Device分别选中真机和模拟器,Command+B进行编译,成功之后,原先红色的那个地方会变黑。点到那里,右键Show In Finder。可以看到Release-iphoneos(真机下的.a) release-iphonesimulator(模拟器下的.a)两个文件夹
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静态的的制作心得与使用方法,敬请期待。码农共勉!