一、简介:
关于库的基本介绍:
库,是实现相关功能的代码文件集合,是对某项功能的封装.库分为系统库和第三方库.
开源库:源码公开 如SDWebImage、AFNetworking
闭源库: 源码不公开 如各类 .a /.frame /.dylib 库
静态库:.a 和 .framework
动态库:.dylib 和 .framework
静态库和动态库的区别:
静态库:静态库在链接时, 会被完整的复制到可执行文件中, 如果多个APP都使用了同一个静态库, 那么每个APP都会拷贝一份, 缺点是占用更多系统资源,不够灵活
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,统一放在共享内存区,供多个程序共用.好处,调用更加灵活,属于系统支配,有利于提升iOS系统运行性能.
注意:
项目中如果使用了自制的动态库,不能被上传到AppStore
二、制作流程
1、新建工程(create new project)选择Framework & Library——>Cocoa Touch Static Library选项,创建工程。
2、编码 并提供API接口,添加相关的API使用规则及注意事项:
3、暴露接口文件:在Build Phases-->copy Files中选择需要暴露出来的.h文件。.m文件会自动编译到.a文件中
4.Build Active Architecture only (只构建活跃构架)设置为NO
Build Setting -> Build Active Architecture only (只构建活跃构架) -> NO
5.编译出.a文件:分别在真机和模拟器的Debug/Release环境下编译,在Products目录下得到.a文件
5.合成支持多种CPU架构的静态库
上面的四种.a文件都是单架构的静态库,Debug-iphoneos是支持真机的.a文件,Debug-iphonesimulator是支持手机模拟器的.a文件,现在需要将两个.a文件合成一个FAT的二进制文件:
命令格式:
lipo -create 文件1.a 文件2.a -output 合并后的.a文件路径/合并后的.a文件名
Debug-iphoneos
Debug-iphonesimulator
我们将这两个.a制作合成一个新的.a文件:
将两个.a文件,放在一个文件夹中,分别改好名字:
libSK_StaticLibrary_Debug_phone.a
libSK_StaticLibrary_Debug_simulator.a
cd到文件夹目录:执行命令
$lipo -create libSK_StaticLibrary_Debug_phone.a libSK_StaticLibrary_Debug_simulator.a -output /Users/pactepacterara/Desktop/ibSK_StaticLibrary.a
此时,在桌面得到复合的.a文件.
三、常用lipo命令:
1.查看静态库支持的CPU架构
$ lipo -info libname.a
lipo -info libname.a(或者libname.framework/libname)
2.查看fat_header、fat_arch
lipo -detailed_info 静态库存放路径
3.合并静态库
//.a 静态库合并
lipo -create 静态库存放路径1 静态库存放路径2 ... -output 整合后存放的路径
lipo -create libname-armv7.a libname-armv7s.a libname-i386.a -output libname.a
// framework 合并(例util.framework)
lipo -create arm7/util.framework/util i386/util.framework/util -output util.framework
4.静态库拆分
// 架构名为armv7/armv7s/arm64等,与lipo -info 输出的架构名一致
lipo 静态库源文件路径 -thin CPU架构名称 -output 拆分后文件存放路径
lipo libname.a -thin armv7 -output libname-armv7.a
5.移除特定cpu架构文件
-lipo -remove cpu架构名称 -output newlibname.a