iOS-制作.a静态库SDK和使用.a静态库
来源:互联网 发布:php采集器 代码 编辑:程序博客网 时间:2024/06/07 11:09
一、创建静态项目
创建一个新的工程,选择Framework & Library
下面的Cocoa Touch Framework
。
二、在静态库中添加内容
这里,我就把我自己平时封装的一个工具类拖进来。
三、设置对应的参数
Build Active Architecture Only
选项设置Build Setting
里面的Build Active Architecture Only
设置为NO
。Build Active Architecture Only
设置为YES
时,是为了debug
的时候编译速度更快,此时它只编译当前的architecture
版本。设置为NO
时,会编译所有的版本。
Debug
版本和Release
版本的切换这里,我要讲一下
Debug
和Release
版本的区别。Debug
是调试版本,主要让程序员使用。在调试的过程中Debug
会启动更多的服务来监控错误,运行速度较慢,而且比较耗能。Release
是发布版本,主要让用户使用,在使用的过程中会去掉那些繁琐的监控服务,运行速度相对较快,而且比较节约内存。这里,我们在
Debug
版本和Release
版本下,使用模拟器和真机进行编译,生成Debug
和Release
模拟器和真机版本的静态库。
四、查看生成的静态库
直接点击静态库,然后Show In Finder
,就显示出你的静态库所在路径。此时,你会发现,已经生成了Debug
和Release
版本下模拟器和真机类型的.a
静态库。
五、合并静态库
经过我实践证明,Release
版本下的真机和模拟器类型的静态库可以合并,当然Debug
版本下的真机和模拟器类型的静态库也可以合并。但是,Release
和Debug
版本下的静态库不能互相合并。如果小弟哪个地方错了,大神们请指教。
查看静态库设备支持类型:lipo -info 静态库路径
合并静态库:lipo -create 静态库1的路径 静态库2的路径 -output 要生成的静态库路径+静态库名称
六、使用静态库
直接把生成的.a库拖到Xcode
里面来,然后在Bulid Phases-->Link Binary With Libraries里面添加你的库
注意把头文件也导进来,不然你没法用。
七、可能遇到的问题
情况一:
当你打包静态库的时候,你的文件里面可能用到动态库,比如libz.tbd
这个库。这时候直接Command+B
编译生成库文件会报错,iOS 9
之后,不能用libz.tbd
这个了,换另种方式。
方法:
Go to Build Phases >Link Binary with Librairies > + > Add other
情况二:
当你的静态库中用到自定义的控件或者分类时候,你会发现,导入静态库的时候,你的工程会报错。
解决办法:
Build Setting—>Other Linker Flags 选项添加:-all_load 或者 -ObjC。至于这两个参数有什么区别,请参考:关于Xcode的Other Linker Flags
情况三:
这里,小弟不才,对静态库的理解不深。我只是知道,你的静态库中使用到其他的库时候(比如framework
或者.a
库),当你编译好你的静态库时候,把你的静态库导入到新的工程里面,你还是需要在新的工程把你刚才静态库里面用到的库再导入一遍。
也就是说,静态库只会编译你的代码,你导入的库并不会一并编译成静态库。举个例子,我的项目集成了讯飞语音的SDK
,虽然我在静态库里面已经导入了讯飞语音的SDK
,但是我把我的静态库导入到新的工程来用时候,发现如果不重新导入一遍之前的库,会报错。
再举一个例子,即使你导入了讯飞语音的SDK
,讯飞语音的指导书里也说了,你还需要导入12个framework
库,由此可见,静态库只是编译你的代码而已。至于库,还是由APP
工程来导入才合理。
情况四:
不得不说,是因为我在Xcode 9
里面呆的太久了,以至于我回到实际项目开发中,都还在用Xcode 9
来开发。那么就会遇到一个问题:Xcode 9
里面编译静态库后,是不能用于iOS 10
的真机的,但是可以用于模拟器。(具体什么原因,暂时还没弄清楚)。
也就是说,你要在iOS 10
里面用静态库,那么这个静态库必须是Xcode 8
编译出来的静态库。
不过,距离Xcode 9
正式发布还有2天,目前还是GM
版的。不管啦,等Xcode 9
正式发布,再去重新下载。
- iOS-制作.a静态库SDK和使用.a静态库
- iOS - 教你制作SDK和.a静态库
- iOS - 教你制作SDK和.a静态库
- ios制作.a静态库
- iOS 制作静态库.a
- iOS开发中.a静态库制作及使用篇
- xcode6制作IOS .a静态库小记
- iOS 静态库.a文件的制作
- iOS开发-静态库.a的制作
- iOS 静态库.a文件的制作
- iOS:.a静态库文件的制作
- iOS中的静态库.a的制作
- iOS开发中静态库制作 之.a静态库制作及使用篇
- ios静态库.a
- IOS-.a静态库
- 制作.a静态库文件
- 制作 静态库.a总结
- iOS静态库(.a 和framework)
- Android 一个app启动另一个app
- Oracle 11gR2 Client 客户端安装步骤(图文详解)
- leetcode快速幂—— 50. Pow(x, n)
- jquery动态新增的元素无法触发事件问题的解决办法方法
- android studio 打包时xml文件中 string 没有翻译的解决办法
- iOS-制作.a静态库SDK和使用.a静态库
- IntelliJ IDEA使用教程(很全)
- UeLogViewer的安装步骤
- git命令基础(一)
- (转)如何而去掉android中Button自带的阴影效果
- 文章标题 Asp.net中 Directory.Delete(path,ture)会导致Session["User"]==null
- 【2017广西邀请赛】hdu 6186 CS Course
- gflags命令行参数
- openwrt防火墙