您的位置:首页 > 移动开发 > IOS开发

iOS 静态库开发

2015-09-27 23:00 316 查看
简介: 企业开发中,一些核心技术或者常用框架,出于安全性和稳定性考虑,不想被外界知道,那么就会把核心代码打包成静态库,只暴露头文件给程序员使用。简单说,就是把.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新建工程



为工程命名后,会自动在你的工程里生成一个工程.h和工程名.m文件,可以直接删除,没用





1.2切换到release模式





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







1.4 此时,你就可以替代你工程里面的myMD5.m文件了,编译运行。

注意:上面的静态库是真机运行的静态库,模拟器上面是运行不了的,而且是工程再release模式下。

一般来说,我们需要真机和模拟器的release版本,那么此时你可以合并静态库。可以合成release和debug下的通用版本。

真机的debug版本、模拟器的debug版本、模拟器的release版本的过程都是一样的过程,只不过修改配置而已。这里就不多赘述了。

二、制作.frame静态库

.frame静态库的合成跟.a静态库的合成几乎一样,只有几个注意点







选择debug



选择模拟器



编译成功后,show in finder得到



其他版本的静态库打包自己操作。

最后一点要说明 : 不要因为个人的工作原因离职之前把公司软件源码打包成静态库,这是很不耻的行为!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: