iOS 制作静态库.a

作者: 司空123 | 来源:发表于2019-01-31 18:04 被阅读0次

一、简介:

关于库的基本介绍:
库,是实现相关功能的代码文件集合,是对某项功能的封装.库分为系统库和第三方库.

开源库:源码公开 如SDWebImage、AFNetworking
闭源库: 源码不公开 如各类 .a /.frame /.dylib 库

静态库:.a 和 .framework
动态库:.dylib 和 .framework

静态库和动态库的区别:

静态库:静态库在链接时, 会被完整的复制到可执行文件中, 如果多个APP都使用了同一个静态库, 那么每个APP都会拷贝一份, 缺点是占用更多系统资源,不够灵活

动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,统一放在共享内存区,供多个程序共用.好处,调用更加灵活,属于系统支配,有利于提升iOS系统运行性能.

注意:项目中如果使用了自制的动态库,不能被上传到AppStore

二、制作流程

1、新建工程(create new project)选择Framework & Library——>Cocoa Touch Static Library选项,创建工程。

屏幕快照 2019-01-31 下午4.50.12.png

2、编码 并提供API接口,添加相关的API使用规则及注意事项:

屏幕快照 2019-01-31 下午5.34.43.png 屏幕快照 2019-01-31 下午5.34.52.png

3、暴露接口文件:在Build Phases-->copy Files中选择需要暴露出来的.h文件。.m文件会自动编译到.a文件中

屏幕快照 2019-01-31 下午4.56.39.png

4.Build Active Architecture only (只构建活跃构架)设置为NO
Build Setting -> Build Active Architecture only (只构建活跃构架) -> NO

屏幕快照 2019-02-01 上午11.22.57.png

5.编译出.a文件:分别在真机和模拟器的Debug/Release环境下编译,在Products目录下得到.a文件

屏幕快照 2019-01-31 下午5.38.31.png 屏幕快照 2019-01-31 下午5.42.32.png

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文件.

屏幕快照 2019-01-31 下午6.02.52.png 屏幕快照 2019-01-31 下午6.03.30.png

三、常用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

相关文章

网友评论

    本文标题:iOS 制作静态库.a

    本文链接:https://www.haomeiwen.com/subject/ytqlsqtx.html