### 目录
一、 基本概念
1. 静态库动态库区别
2. 库的版本
3. iOS 设备的CPU架构
4. ARM处理器指令集
5. i386|x86_64 指令集
6. Xcode中指令集相关选项
二、打包framewor静态库
1. 创建项目-》创建静态库项目
2. 静态库如何开发调试?
3. 脚本合成静态库
4. 自己打包的静态库依赖第三方.a和.framework静态库?
5. 自己打包的静态库依赖第三方框架比如YYModel、AFN?
6. 静态库依赖的图片、xib等资源处理?
7. -ObjC / -all_load / -force_load 什么鬼
文章中的demo资源代码可以从这里下载
更多内容欢迎关注简书
静态库和动态库
-
静态库 -> .a或者.framework的库
-
动态库 -> .dylib或者.framework的库
区别:
-
静态库在系统中多次使用就有多份拷贝 (比如A应用里有个xxx.a的静态库、B应用里有一个xxx.a的静态库,那么在系统内存里就会占用两份)
-
动态库是由系统动态加载到内存,而且只加载一次,多个程序共用节省内存
我们自己制作的动态库苹果不允许上架到App Store 所以这里不做介绍 下面主要说一下静态库
库的版本
Debug版本 -》 真机Debug版本 / 模拟器Debug版本
包含完整的符号信息方便调试
不会对代码进行优化
Release版本 -》真机Release版本 / 模拟器Release版本
不包含完整的符号信息
执行代码进行过优化
执行速度会更快些
几个概念
iOS 设备的CPU架构
-
在模拟器上支持:
iPhone4s-5: i386 架构 iPhone5s-8 Plus: x86_64 架构
-
在真机设备上支持:
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2 armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行) arm64: iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Air、iPad Air2、iPad mini2、iPad mini3
ARM处理器指令集
-
几乎所有手机处理器都基于ARM处理器的,ARM处理器特点是体积小、低功耗、低成本、高性能,所以在嵌入式系统中应用广泛
armv6|armv7|armv7s|arm64都是ARM处理器的指令集 这些指令集都是向下兼容的
i386|x86_64 指令集:i386和x86_64 是Mac处理器的指令集
- i386是针对intel通用微处理器32位处理器的
- x86_64是针对x86架构的64位处理器
所以当使用iOS模拟器的时候会遇到i386|x86_64(ios模拟器没有arm指令集)
模拟器32位处理器测试需要i386架构。
模拟器64位处理器测试需要x86_64架构。
真机32位处理器需要armv7或者armv7s架构。
真机64位处理器需要arm64架构
命令查看静态库支持的架构:
通过 lipo -info - 》 拖入模拟器或者真机.framework的路径 查看静态库支持的架构
Xcode中指令集相关选项(Build Setting中)
1. Architectures
指定工程被编译成支持哪些指令集类型.
支持的指令集越多,就会编译出很多个指令集代码的数据包,对应生成二进制包就越大,也就是ipa包越大.
2. Valid Architectures
限制可能被支持指令集的范围.
xcode编译出来的二进制包类型最终从这些类型产生,而编译出哪些指令集的包,将由Architectures与Valid Architectures这些交集来确定,面会举例说明.
3. Build Active Architecture Only
指定只对当前连接设备所支持的指令集编译.
当设置为YES时是为了debug编