1. 什么是通用二进制文件?
- 通用二进制文件(Universal binary), 也叫做胖二进制文件,是苹果公司推出的一种可以同时包含多种架构的二进制文件。
- 也就是说一个通用二进制文件里面会包含多个 Mach-O 的可执行文件
- 这样通用二进制的文件会比单一架构的二进制文件体积要大
- 但是由于多种架构会有一些资源文件等非可执行的资源共用的,所以体积也不会大到二倍之多。
- 在运行的时候,只会加载需要用到的那个架构的Mach-O文件,不会加载所有的 Mach-O 文件,所以不会占用额外的内存。
- 在 iOS11.0 以后, 真机都是 arm64 架构的单一二进制文件。
在 iOS11.0 之前,真机打包默认是包含 arm64 和 armv7 的通用二进制文件
2. 如何合并和拆分通用二进制文件?
1.合并多个架构输出至指定文件
lipo -create MachO1 MachO2 -output 输出文件路径
2.拆分出指定架构输出至指定文件
lipo MachO文件 –thin 架构 –output 输出文件路径3.查看架构
lipo -info MachO文件4. 合并拆分实践
用真机架构、最低支持 iOS10 系统打包出来一个app(XXSCustomKVO)。 按如下步骤,对它进行合并架构和拆分架构:
3.CPU 架构
模拟器:
- 模拟器 32 位处理器是 i386 架构:iphone5/iphone5c 以下的模拟器
- 模拟器 64 位处理器是 x86_64 架构:iPhone5s 以上的模拟器
- 真机:armv7 | armv7s | arm64 | arm64e都是ARM处理器的指令集
- 真机 32 位:
- armv6:iPhone、iPhone2、iPhone3G、iPod Touch(第一代)、iPod Touch(第二代)
- armv7:iPhone3Gs、iPhone4、iPhone4s、iPad、iPad 2
- armv7s:iPhone5、iPhone5c
- 真机 64 位
- arm64:iPhone5s、iPhone6、iPhone6p、iPhone6s、iPhone6sp、iPhone7、iPhone7p、iPhone8、iPhone8p、iPhoneX
- arm64e:iPhone XS、iPhone XS Max、iPhone XR、 iPhone 11 、iPhone 11 Pro 、iphone 11 Pro Max
- 真机 32 位:
