armv6、armv7、armv7s、arm64都是ARM处理器的指令集,所有指令集原则上都是向下兼容的。如 iPhone 4s的CPU默认指令集为armv7指令集,但它可以同时也兼容armv6的指令集,只是在使用armv6的时候无法充分发挥其性能(无法发挥armv7指令集中得新特性)。
模拟器:
4s-5: i386
5s-6s Plus: x86_64
真机:
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代)
armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2
armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行)
arm64(注:无armv64): iPhone 5s、iPhone 6、iPhone 6 Plus、iPhone 7、iPhone 7PlusPlus、iPad Air、iPad Air2、iPad mini2、iPad mini3
Build Active Architecture Only
这个属性设置为YES时,只编译当前的architecture版本(常用于Debug,这样编译速度更快);
设置为NO时,会编译所有的版本(常用于Release)。
常见Bug:
warning: ignoring file /Users/admin/Desktop/xxxxxxDemo/xxx.framework/xxx, file was built for arm64 which is not the architecture being linked (armv7): /Users/admin/Desktop/xxxxxxDemo/xxx.framework/xxx
大概意思就是:制作Framework时选择的是arm64指令集,不支持在armv7指令集的设备上运行。
解决办法:1、修改framework使其支持armv7;2、在TARGET-Build Settings-Valid Architectures中,将armv7暂时去掉。
参考文档:
1、关于iOS设备处理器的指令集
2、iOS CPU架构(ARM指令集)
3、iPhone CPU指令集架构
网友评论