IOS开发

iOS 静态库、动态库、Framework、mach-O Ty

2020-04-06  本文已影响0人  mtko

一、库格式:
库格式决定库独立性、库内文件类型、库内外文件依赖关系

二、库性质(由mach -O Type决定):简单总结为
库性质决定库加载到运行时内存的时机、加载的库范围、库的共享权限

mach -O Type:一种文件格式,Mach Object文件格式,是Mac上的可执行文件类型 或者 目标文件(.o)。

以开发者制作三方库的场景为例解释:

Executable:  `静态库`,输出二进制
Dynamic Library:`动态非共享库`,输出动态链接库非共享库,程序`运行`时链接到`内存,大部分场景下不可共享;app extension、部分macOS场景下可以共享
Bundle:`动态非共享库`,和Dynamic Library相近,不过需要手动调用函数加载
Static Library:  `静态库`,输出静态链接库,程序`编译`时拷贝到`内存`
Relocatable Object File:`静态库`,和Static Library类似,但体积更小

三、从结构上看,Framework格式的库只是比Static Library格式的库多出一个文件夹,拥有一个独立的工作区

四、Framework格式的库中嵌入的依赖库可以和app环境的依赖库相同,并且不会产生duplicate symbol,因为Framework有独立的运行环境

五、Static Library格式的库中的依赖库和app环境依赖库相同时会有依赖冲突

六、Static Library格式的库的依赖的方法可以不实现,但Framework格式的库依赖的方法必须实现(objc)

七、Static Library格式的库不可包含图片等资源文件

八、Static Library格式的库的库在打包时会直接编译进app的二进制执行文件,Framework格式的库被打包进沙盒;如果观察过Product包内容时会发现使用<Static Library格式的库>或者<Framework格式的库且(mach -O Type = Static Library)>不会出现在Frameworks文件夹中,是因为编译进了app的二进制执行文件

九、开发者签名的Dynamic Library性质的库时在app extension中共享或者在macOS部分场景下共享;苹果官方的动态库有共享权限

十、制作三方库在考虑Static Library格式的库库或者Framework格式的库时:依赖图片资源,使用Framework格式的库;想要拥有完整的依赖关系,使用Framework格式的库,此时外界可能需要剔除Framework格式的库之外的依赖库,而采用Framework格式的库内的依赖库,否则虽然不会产生依赖冲突,但会增加包大小

十一、制作三方库时,建议选择:

十二、Framework图标

Framework内不嵌套Framework时: image.png

Framework中嵌套Framework时:


image.png
上一篇下一篇

猜你喜欢

热点阅读