Details:应用不支持当前设备的CPU类型。
This application does not support this device’s CPU type.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402653049
思路:
真机
- Architectures 是否设置正确,Xcode12以上,设置为 $(ARCHS_STANDARD),即 arm64,armv7。
- VALID_ARCHS 是否包含当前设备的指令集。正确设置为 armv7 armv7s arm64
- Build Active Architecture Only 设置为常用模式。
模拟器
真机 1 2 两条设置添加上模拟器的指令集 i386 x86_64 即可。
拓展
一、iOS设备对应的CPU的指令集
指令集 | 设备类型 |
---|---|
arm64 | iPhone5S、iPad Air、 iPad mini2(iPad mini with Retina Display) 及以上 |
armv7s | iPhone5、iPhone5C、iPad4(iPad with Retina Display) |
armv7 | iPhone3GS、iPhone4、iPhone4S、iPad、iPad2、iPad3(The New iPad)、iPad mini、iPod Touch 3G、iPod Touch4 |
armv6 | iPhone、iPhone2、 iPhone3G、 第一代、第二代 iPod Touch |
i386 | 模拟器32位处理器,iPhone5及之前模拟器 |
x86_64 | 模拟器64位处理器,iPhone5s及之后模拟器 |
注:1.armv6 现在基本不用支持。2. 从低到高排列,armv6 armv7 armv7s arm64,高版本指令集向下兼容,只是在低版本中无法体现其相关的性能优化。
二、Xcode中指令集设置选项含义(Build Setting 中设置)
- Architectures:
指定所选 target 编译生成的二进制包 可支持 哪些指令集类型。
支持的指令集越多,对应生成的二进制包就越大,也就是ipa包会越大。
- Valid Architectures:
限制支持的指令集的范围。指定本次 build 可包含哪些指令集。
通俗说,Architectures 可理解为工程就支持这么多架构,Valid Architectures 可理解为本次 build 就想要这么多架构。
所以最终 XCode 编译出的二进制包包含哪几种指令集,是有 Architectures 和 Valid Architectures 两个选项的交集来确定的,这个交集不可以为空。
举个例子:
Architectures | Valid Architectures | 二进制包 |
---|---|---|
armv7 armv7s | armv7 arm64 | armv7 |
armv7 armv7s arm64 | armv7 armv7s | armv7 armv7s |
armv7 armv7s arm64 | armv7 armv7s arm64 | armv7 armv7s arm64 |
armv7s arm7 | armv64 | null |
- Build Active Architecture Only:
指定是否只编译当前连接设备所支持的指令集
这个属性设置为 YES,只编译当前设备支持的architecture版本,可以让编译速度更快;设置为 NO 时,则会编译所有的版本。
一般 debug 的时候设置为 YES,release 的时候要设为 NO,以适应不同设备。
网友评论