库的种类
-
开源库
-
闭源库
闭源库分类
-
动态库
- 链接时不复制,程序运行时由系统动态加载到内存中,供程序调用。
- 系统只加载一次,多个程序共用,节省内存。(使用自制动态库的程序不能上传Appstore,WWDC大会上,苹果对iOS 8开放了加载dylib的接口,开放了动态库挂载,但是很少用)
- eg:*.dylib(iOS9取消了.dylib,使用.tbd替代) 和 *.framework
-
静态库
- 对于老旧的MRC实现的功能,可以通过编译成静态库文件在ARC环境下运行。
- 方便代码移植,代码保密。
- .framework 静态库制作需要将build settings -> Mach-O Type 设置成static Library,因为framework默认是动态库。
- eg:*.a 和 *.framework
关于架构
-
模拟器架构:
i386 : 32位 4s和5 x86_64: 64位 5s之后机型
-
真机架构:
armv7 : 32位 4s/4 (静态库只要支持armv7,就可以跑在armv7s架构上) armv7s: 5/5c arm64 : 64位 5s以后机型
-
架构的兼容:
-
选择target -> build active architecture only (只编译活跃的架构) -> NO
废话不多说,直接上手
-
新建工程
新建工程.png
-
-
.h 声明
WZTool.h
-
-
.m 实现
WZTool.m
-
-
静态库的生成
Edit Scheme
-
调试版本 VS 发布版本
- 调试版本会包含完整的符号信息,以方便调试
- 调试版本不会对代码进行优化
- 发布版本不会包含完整的符号信息
- 发布版本的执行代码是进行过优化的
- 发布版本的大小会比调试版本的略小
- 在执行速度方面,发布版本会更快些,但不意味着会有显著的提升
- 查看静态库支持的架构
打开终端 : lipo -info 静态库.a
- 查看静态库支持的架构
- 静态库合并
打开终端 : lipo -create 静态库1.a 静态库2.a -output 新静态库.a
- 静态库合并
关于bitcode
-
什么是bitcode
Bitcode. When you archive for submission to the App Store, Xcode will compile your app into an intermediate representation. The App Store will then compile the bitcode down into the 64 or 32 bit executables as necessary.
当我们提交程序到App store上时,Xcode会将程序编译为一个中间表现形式(bitcode)。然后App store会再将这个botcode编译为可执行的64位或32位程序。 -
哪些需要支持bitcode
iOS,bitcode是可选的。
watchOS,bitcode是必须的。
Mac OS不支持bitcode。 -
如何支持bitcode
- 1,选择静态库对应的target ->build settings ,搜索other c flags ,添加
-fembed-bitcode
- 1,选择静态库对应的target ->build settings ,搜索other c flags ,添加
这样编译出来的静态库就支持bitcode。
-
如何检验是否已经支持bitcode
进入到.a所在的目录,使用以下命令:
lipo -info xxxx.a
lipo -thin arm64 xxxx.a -output xxxx-arm64.a
ar -x xxxx-arm64.a,这三步完成后会在当前文件夹下生成对应的.o文件
otool -l xxxx.o | grep bitcode 最后通过这个,会输出sectname __bitcode字样,说明该静态库支持bitcode。
当你按以上方法可以写出自己第一个静态库的时候,你就会发现一个缺点,调试很不方便,想着如果能看到源码调试的话就好了,所以后边我们讲如何真正方便的调试静态库。
- 1,新建single view application工程
- 2,新建静态库target
- 3,引用静态库,不然会报错
有不对的请指正。
网友评论