iOS 静态库开发

简介: 企业开发中,一些核心技术或者常用框架,出于安全性和稳定性考虑,不想被外界知道,那么就会把核心代码打包成静态库,只暴露头文件给程序员使用。简单说,就是把.m文件给打包起来成静态库(表现形式.a或者.frame)

一、静态库和动态库表现形式和区别
1、表现形式
静态库: .a 和 .frame
动态库: .dylib 和 .frame
2、静态库和动态库的区别
静态库: 链接时,静态库被完整复制到可执行文件中,被多次使用会有多分冗余拷贝
动态库: 连接时不复制,程序运行时由系统动态加载到内存,供程序调用。系统只加载一次,多个程序共用,节省内存。

注意 : 项目中如果使用了动态库,苹果拒接(这里的动态库只是开发人员自己打包生成的动态库)

二、静态库的版本(共4种)
1、真机的debug版本
2、真机的release版本
3、模拟器的debug版本
4、模拟器的release版本
他们有什么区别呢?
debug(调试)版本:含完整的符号信息,方便调试,不会对代码进行优化
release(发布)版本: 不会包含完整的符号信息,执行的代码是进行优化的,执行速度比release略快,大小比debug略小

这里就要看你的需求了,如果你一直都是真机调试模式,那么你就打包真机的debug调试版本,发布的时候一定要替换成release版本。debug和release区别就是编译的时候底层的依赖库不一样。
发布用的是release,调试阶段用debug。

那这样不是很麻烦?我也觉得,可以合并静态库,把模拟器的和真机的静态库合并,那么静态库就不需要区分或者选择在模拟器和真机下运行调试了(例如 :百度地图)工程里面报了i386的错误,也就是因为导入的静态库只能在真机下运行。所以合并静态库是必要的。
打开终端命令行:
(1) debug版本的静态库合并
lipo -create Debug-iphoneos/xxx.a Debug-iphonesimulator/xxx.a -out xxx.a
(2)release版本的静态库合并
lipo -create Release-iphoneos/xxx.a Release-iphonesimulator/xxx.a -out xxx.a
合并有什么优缺点么?
合并的优点: 开发过程中,既可以在真机上调试,也可以在模拟器上调试
合并的缺点: 如果静态库太大,合并打包后会更大。也是因为这个原因,很多第三方的静态库.a是区分真机和模拟器的。(百度地图是最明显的表现者之一)

一、制作.a静态库
1、release静态库(以打包MD5为例子)
1.1新建工程
iOS 静态库开发_第1张图片
为工程命名后,会自动在你的工程里生成一个工程.h和工程名.m文件,可以直接删除,没用
iOS 静态库开发_第2张图片

iOS 静态库开发_第3张图片
1.2切换到release模式

iOS 静态库开发_第4张图片

1.3 将myMd5框架拖到工程里面,选择真机或者模拟器编译,当编辑成功,点击下面的.a,show in finder,有两个.a文件,分别是真机和模拟器的

iOS 静态库开发_第5张图片

1.4 此时,你就可以替代你工程里面的myMD5.m文件了,编译运行。
注意:上面的静态库是真机运行的静态库,模拟器上面是运行不了的,而且是工程再release模式下。
一般来说,我们需要真机和模拟器的release版本,那么此时你可以合并静态库。可以合成release和debug下的通用版本。
真机的debug版本、模拟器的debug版本、模拟器的release版本的过程都是一样的过程,只不过修改配置而已。这里就不多赘述了。
二、制作.frame静态库
.frame静态库的合成跟.a静态库的合成几乎一样,只有几个注意点

iOS 静态库开发_第6张图片

iOS 静态库开发_第7张图片

选择debug
iOS 静态库开发_第8张图片

选择模拟器
iOS 静态库开发_第9张图片

编译成功后,show in finder得到

其他版本的静态库打包自己操作。
最后一点要说明 : 不要因为个人的工作原因离职之前把公司软件源码打包成静态库,这是很不耻的行为!!!

你可能感兴趣的:(frame,a,静态库打包,静态库开发)