1. 什么是通用二进制文件?

  • 通用二进制文件(Universal binary), 也叫做胖二进制文件,是苹果公司推出的一种可以同时包含多种架构的二进制文件
  • 也就是说一个通用二进制文件里面会包含多个 Mach-O 的可执行文件
    • 这样通用二进制的文件会比单一架构的二进制文件体积要大
    • 但是由于多种架构会有一些资源文件等非可执行的资源共用的,所以体积也不会大到二倍之多
  • 在运行的时候,只会加载需要用到的那个架构的Mach-O文件,不会加载所有的 Mach-O 文件,所以不会占用额外的内存。
  • iOS11.0 以后, 真机都是 arm64 架构的单一二进制文件。
  • iOS11.0 之前,真机打包默认是包含 arm64 和 armv7 的通用二进制文件

    2. 如何合并和拆分通用二进制文件?

    1.合并多个架构输出至指定文件

    1. lipo -create MachO1 MachO2 -output 输出文件路径

    2.拆分出指定架构输出至指定文件

    lipo MachO文件 –thin 架构 –output 输出文件路径
    

    3.查看架构

    lipo -info MachO文件
    

    4. 合并拆分实践

    用真机架构、最低支持 iOS10 系统打包出来一个app(XXSCustomKVO)。 按如下步骤,对它进行合并架构和拆分架构:
    image.png

    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