怎么打静态库.a及注意事项
来源:互联网 发布:js require的用法 编辑:程序博客网 时间:2024/06/09 18:36
在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程,在iOS开发中却遇到了麻烦,原因是:苹果公司禁止在iOS开发中使用动态库(而苹果自己却可以使用动态库),同时,苹果也从Xcode中移除了创建静态框架的功能。值得庆幸的是我们可以通过对Xcode进行小小的改动来创建静态框架,而静态库和静态框架是被App Store所允许的,其实静态框架本质上说也是静态库的一种。
在正式的上代码之前,先介绍一些从网上搜集的静态库相关的基本概念,以加深对后面知识的理解
1. 库
库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库。
2. 区别
静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存空间。
3. iOS中静态库的形式
在iOS中静态库以.a和.framework的形式存在,动态库以.dylib和.framework的形式存在。
之所以.framework既可能是动态库又可能是静态库,是因为苹果公司禁止用户级App使用动态库,而自己却又堂而皇之的使用动态库,这就造成了iOS中系统级的.framework是动态库,用户级的.framework是静态库(无可奈何啊)。
4. .a与.framework的区别
二者区别不大,.a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合,而.framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。
5. 静态库使用的必要性
1>. 代码的共享与重用
2>. 程序模块化
3>. 分享给别人代码库时代码隐藏
4>. 开发第三方SDK
6. 对图片资源和UI界面xib或nib文件的处理
.a和.framework两种静态库,通常都是把需要用的到图片或者xib文件存放在一个bundle文件中,而该bundle文件的名字和.a或.framework的名字相同。关于bundle文件的制作方法,后面有专门介绍。
有个疑问:
.a文件中无法存放图片或xib文件,很容易理解,但是.framework从本质上说也是一个bundle文件,为什么不把图片或者xib文件直接放在.framework中而单独再创建个bundle文件呢?
那是因为iOS系统不会去扫描.framework下的图片等资源文件,也不会在项目中显示,也就是说即使放在.framework目录下,系统根本就不会去扫描,因此也无法发现使用。
7. category的处理
category是项目开发中经常用到的,把category打包成静态库是没有问题的,但是在使用这个静态库时,调用category中的方法时会发生找不到该方法的运行时错误(selector not recognized),解决的办法是在使用静态库的工程中配置other linker flags的值为 -ObjC -all_load
8.打库项目遇到的问题
菜鸟第一次打库,真的都给我打哭了,真的是各种Google,各种stackoverflow,终于貌似成功了,可是还是有问题的,什么问题呢,就是我在跑项目的时候出现了一个无名bug,这个bug是什么呢?我打了几个静态库放在项目中了,可是报错了,但是不是我这几个库的bug,这就奇怪了,我就没link这个库,怎么会这样?原因是这样的:唉,菜鸟还是菜鸟,我用真机打成了那几个库,然后移植到项目中,我用模拟器跑就出这种莫名的bug了,知道了问题出在哪里,我就用模拟器重新打库,然后移植到项目中,重新跑,build succeed!感谢苍天!
9.怎么打库(图文版教程)waring:看你是用什么来build这个库了,如果你是用模拟器,如下图中的build,那么就是一个模拟器库,这个库是只能在模拟器上使用的,如果你是用generic ios device 来build项目的话,那么就是一个真机库,是只能在真机上使用的,当然了,真机库和模拟器库是可以合并的,不然怎么玩。。。合并生成通用库详见我另一篇博客:合并生成通用库(真机模拟器公用)链接博客
1.build项目:
2.找到打好的库,然后show in finder
3.在finder中找到.a库后,copy到桌面上
4.拖到项目中
5.build
- 怎么打静态库.a及注意事项
- 生成.a静态库 注意事项
- iOS开发之*.a静态库注意事项
- IOS 制作静态库及注意事项
- IOS 制作静态库及注意事项
- IOS 制作静态库及注意事项
- IOS 制作静态库及注意事项
- iOS-关于.a静态库开发的一些注意事项
- iOS静态制作及注意事项
- xcode7 打静态包.a文件
- 静态库注意事项
- 静态库导入注意事项
- 如何编译静态库及将多个.a静态库合并成一个.a静态库
- 怎么添加动态链接库及静态链接库
- Makefile 连接静态库注意事项
- Makefile 连接静态库注意事项
- Makefile 连接静态库注意事项
- iOS 静态库引用注意事项
- php验证码图片生成
- 简单的接口处理(一看就懂)
- 进程之间的通讯之共享内存
- 正式高一的第二十天
- 集线器、交换机、路由器、中继器及网关、网桥之间的区别
- 怎么打静态库.a及注意事项
- python调试用的Pycharm
- Ueditor 配置上传图片到项目外
- 移植驱动到内核学习笔记3-----LCD及输入系统
- bean的自动装配
- ZZULI OJ Contest - 东北省赛训练赛 Problem H: 蛤玮的机房【并查集】
- 20141231 转化成 2014/12/31
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- Android框架学习笔记02AndroidAsycHttp框架