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指令集架構