iOS静态库与动态库

释放双眼,带上耳机,听听看~!

简介

在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟、百度地图等第三方的sdk)
静态库和动态库的存在形式
• 静态库:.a 和 .framework
• 动态库:.dylib(xcode7以上时.tbd) 和 .framework

静态库和动态库的区别

• 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
• 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

修改:之前说##项目中如果使用了动态库,会苹果拒接##,但在Xcode 6(iOS 8)之后可以使用动态库, 在官方文档中也有了说明(iOS developers can now create dynamic frameworks),实际上不仅仅是iOS 8及之后可以使用动态库,低版本的也可以使用,只不过低版本会需要手动的使用dlopen()加载下。动态库上架会有一些机审的规则需要注意下,至于能不能上架,答案是肯定的。

静态库文件的版本(4种)

• 真机-Debug版本
• 真机-Release版本
• 模拟器-Debug版本
• 模拟器-Release版本

Debug(调试)版本
1. 含完整的符号信息,以方便调试
2. 不会对代码进行优化

Release(发布)版本
1. 不会包含完整的符号信息
2. 执行代码是进行过优化的
3. 大小会比Debug版本的略小
4. 在执行速度方面,Release版本会更快些(但不意味着会有显著的提升)

在开发中都打包Release(发布)版本,提供外界

制作静态库

1.新建静态库,选择新建Cocoa Touch Static Library文件

新建静态库

2.新建文件后,会自动生成与文件名相同的.h和.m文件,可在其中编辑,也将其删除新建

新建文件

3.在Buiding Phases中新建Header Phase,将文件中所有.h文件添加至其中

添加.h文件会在project中,将其全部选中拖入public中

新建Header Phase

4.打开Products文件,会看到.a文件,此时.a文件是不存在故为红色的,选择设备为ios 设备编译(Command+B)生成支持真机的Debug版本,选择ios模拟器变异 ,生成支持模拟器的Debug版本,此时.a文件变为黑色

生成Debug版本

5.将文件show in finder,会看到对应的静态库,里面包括.a文件和所有的.h文件,将其内容导入新的工程中即可使用。

静态库

6.合并静态库,在终端中进入对应文件,输入lipo -create Debug-iphoneos/XXXX.a Debug-iphonesimulator/XXXX.a – output YYYY.a 将XXXX.a静态库合并成YYYY.a静态库(如lipo -create Debug-iphoneos/libHTTPRequestLib.a Debug-iphonesimulator/libHTTPRequestLib.a – output HTTPRequest.a)

使用对应的HTTPRequest.a和.h文件即可同时支持模拟器和真机。

[注意]生成静态库是模拟器还是真机,若使用的类型不同会有相应的报错,生成静态库时对应的CPU不同也会有报错

设备的CPU架构简介(补充知识)

模拟器:
• 4s~5 : i386
• 5s~6plus : x86_64
真机:
• 3gs~4s : armv7
• 5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
• 5s~6plus : arm64

谢谢查看,欢迎补充!

 

人已赞赏
iOS文章

AppStore安装历史版本,利用Charles抓包安装历史版本

2020-5-14 2:33:06

iOS文章

iOS开发中遇到的问题

2020-5-14 3:48:06

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索