前言
文章开始需要先了解一下几个问题:
1.arm
是啥?
2.armv7
又是啥?那armv7s
和arm64
(注意不是armv64
)呢?
3.64位处理器
和32位处理器
跟上面又有什么关系呢?
==>
- ARM是嵌入式中的一种架构,可认为是对一类微处理器的统称(也就是架构)。(再详细点的可以去百度哦!😂)
- armv7|armv7s|arm64都是ARM处理器的指令集
- 相应的Mac处理器上的指令集有i386|x86_64
- 至于两者的关系就是
真机32位处理器需要armv7架构或者armv7s架构
真机64位处理器需要arm64架构
模拟器32位处理器测试需要i386架构
模拟器64位处理器测试需要x86_64架构
那么常见的指令集又用在那些设备上呢:
arm64:iPhone6s | iphone6s plus|iPhone6| iPhone6 plus|iPhone5S | iPad Air| iPad mini2(iPad mini with Retina Display)
armv7s:iPhone5|iPhone5C|iPad4(iPad with Retina Display)
armv7:iPhone4|iPhone4S|iPad|iPad2|iPad3(The New iPad)|iPad mini|iPod Touch 3G|iPod Touch4
至于iPhone7和iPhone 7Plus上面的指令集没找到资料,所以也不敢乱写。
Architectures
Architectures这个单词的意思就是架构,Xcode新建工程的时候Architectures默认的几个设置就是:
- Architectures
指的是编译出来的二进制文件需要支持的指令集。需要注意的是,支持的指令集越多,二进制文件中包含的支持指令集的代码包就越多,进而二进制文件就越大,也就会导致ipa包越大。 - Valid Architectures
限制可能支持的指令集的范围,也就是编译的二进制文件支持的指令集的类型都在这里面。而编译出哪种指令集的包,将由Architectures与Valid Architectures(因此这个不能为空)的交集来确定 - Build Active Architecture Only
是否只针对Xcode连接的设备支持的指令集进行编译,设置为YES是为了加快编译速度,设置为No的话就会编译支持的所有版本(具体版本由Architectures与Valid Architectures的交集来确定)。至于Debug和Release使用什么配置就看开发自己的需要了。
Demo
同一套代码我打了如下几个包
a. 架构指令集:arm64(ipa包大小:31K)
b. 架构指令集:armv7s(ipa包大小:32K)
c. 架构指令集:armv7 arm64(ipa包大小:46K)
d. 架构指令集:armv7 armv7s arm64(ipa 包大小:60K)
多支持一个架构指令集合,二进制文件中会多一套代码,所以最后的ipa包大小也不一样(多出来的只是代码的大小,好像跟资源例如图片啥的没关系,估计资源对这几个代码来说是公用的),安装到设备里面的时候会根据CPU架构执行对应的代码,但是架构指令集只能向下兼容,iPhone5(armv7s)就无法安装a安装包,但是iPhone5s(arm64)就可以安装b安装包,只不过这样无法展现iPhone5s 64位处理器的性能。
查看一个安装包支持的架构指令集的方式是先修改安装包后缀名为zip,然后解压,在终端cd到解压的文件夹中的.app文件里面(一般.app会被隐藏),使用lipo -info app项目名
命令查看。