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得到
其他版本的静态库打包自己操作。
最后一点要说明 : 不要因为个人的工作原因离职之前把公司软件源码打包成静态库,这是很不耻的行为!!!
一、静态库和动态库表现形式和区别
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得到
其他版本的静态库打包自己操作。
最后一点要说明 : 不要因为个人的工作原因离职之前把公司软件源码打包成静态库,这是很不耻的行为!!!
相关文章推荐
- iOS开发系列--通知与消息机制--转
- iOS 实现复选框 checkbox --转
- ios开发使用Basic Auth 认证方式
- Chapter1 《第一个简单到IOS应用》
- iOS_SDWebImage框架分析
- iOS 导入第三方框架报错问题
- iOS大典之单例传值
- IOS 小例子,输出一个图形的坐标,颜色,形状-2。
- iOS—— 普通类型数据进行数据持久化
- iOS6之后 NSAttributedString 福利
- 从零开始学习iOS开发-股票记帐本1.0(3)
- 实验1前篇——BIOS编程空间
- iOS沙盒路径的查看和使用
- 【iOS学习笔记 15-09-27】iOS中的MVC设计模式
- ios账号申请-从个人账号到企业账号升级之路
- iOS ——KVO 监测Model 图片下载
- iOS——KVO
- iOS开发缺少framework对应错误提示
- iOS经典讲解之Xcode开发不可不知的快捷键(新)
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #1