一、前言问题
在iOS 开发过程中,估计比较少的人会在意armv7,armv7s,arm64这些概念,如果在意可能也是项目中出现了像下面的问题,才会想起来解决这些问题,但还是不是特别的理解,这些概念,今天写这篇博客,希望大家对这些概念有所了解。
上面的这个问题,是我用自己手机iPhone 7p真机运行的,关于配置如下:
如果出现上面的问题,我们在valid Architectures中加入arm64即可,就可以通过编译!!!
虽然问题可以得到解决,但是还是要了解一下armv7,armv7s,arm64以及i386和x86_64这些概念还是有所必要的。
二、讲解
1. armv7 | armv7s | arm64是ARM处理器的指令集
2. i386 | x86_64是Mac 处理的指令集。
下面是指令集在设备的使用
arm64:iPhoneX | iphone8 plus|iPhone8| iPhone7| iphone7 plus | 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|iPad mini|iPod Touch 3G|iPod Touch4
i386 是针对intel通用的微处理器32位处理器
x86_64是针对x86架构64位处理器
模拟器32位处理器测试要i386的架构
模拟器64位处理器测试要x86_64的架构
真机32位处理器要armv7 或者armv7s
真机64位处理器要arm64架构
三、开发
3.1 Architectures
Xcode 通过Architectures指定工程被编译成,可支持的哪些指令集类型。在这其中,支持的指令集如果越多,编译出的数据包也就会越大,对应的生成的二进制包ipa就会越大。
3.2 Valid Architectures
Xcode 通过Valid Architectures来限制可能被支持的指令集范围,Xcode 最终编译出来的二进制包类型也是从这些类型产生。对于编译出哪种指令集的包,是由Architectures和Valid Architectures的交集来确定的,所以不能为空。
例如:
假如Architectures支持的arm指令集为armv7,armv7s,而对应的Valid Architectures支持的指令集为armv7s,arm64,那么Xcode生成的二进制包指令集为armv7s。
>>>>拓展
我们创建项目中,Valid Architectures设置里,会默认为Standard architectures也就是armv7,arm64,如果自己想改的话,可以加入其他内容,在Other中。
通过Standard architectures,打包的代码有两份,一份是32位,一份是64位。在在iPhone5s或者以上( iPhone5s的cpu是64位的 )下,会运行64位代码包,但是可以兼容32位代码,但是这样会降低性能,但不会对用户体验造成威胁。
以上就是关于Xcode 中Build Settings的部分内容,希望大家对armv7,armv7s,arm64以及i386和x86_64有所了解。欢迎指正!!!