前言
文章開始需要先了解一下幾個問題:
1.arm是啥?
2.armv7又是啥?那armv7s和arm64(注意不是armv64)呢?
3.64位處理器和32位處理器跟上面又有什么關(guān)系呢?
==>
- ARM是嵌入式中的一種架構(gòu),可認(rèn)為是對一類微處理器的統(tǒng)稱(也就是架構(gòu))。(再詳細(xì)點的可以去百度哦!??)
- armv7|armv7s|arm64都是ARM處理器的指令集
- 相應(yīng)的Mac處理器上的指令集有i386|x86_64
- 至于兩者的關(guān)系就是
真機32位處理器需要armv7架構(gòu)或者armv7s架構(gòu)
真機64位處理器需要arm64架構(gòu)
模擬器32位處理器測試需要i386架構(gòu)
模擬器64位處理器測試需要x86_64架構(gòu)
那么常見的指令集又用在那些設(shè)備上呢:
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這個單詞的意思就是架構(gòu),Xcode新建工程的時候Architectures默認(rèn)的幾個設(shè)置就是:

- Architectures
指的是編譯出來的二進制文件需要支持的指令集。需要注意的是,支持的指令集越多,二進制文件中包含的支持指令集的代碼包就越多,進而二進制文件就越大,也就會導(dǎo)致ipa包越大。 - Valid Architectures
限制可能支持的指令集的范圍,也就是編譯的二進制文件支持的指令集的類型都在這里面。而編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個不能為空)的交集來確定 - Build Active Architecture Only
是否只針對Xcode連接的設(shè)備支持的指令集進行編譯,設(shè)置為YES是為了加快編譯速度,設(shè)置為No的話就會編譯支持的所有版本(具體版本由Architectures與Valid Architectures的交集來確定)。至于Debug和Release使用什么配置就看開發(fā)自己的需要了。
Demo
同一套代碼我打了如下幾個包
a. 架構(gòu)指令集:arm64(ipa包大?。?1K)
b. 架構(gòu)指令集:armv7s(ipa包大小:32K)
c. 架構(gòu)指令集:armv7 arm64(ipa包大小:46K)
d. 架構(gòu)指令集:armv7 armv7s arm64(ipa 包大?。?0K)
多支持一個架構(gòu)指令集合,二進制文件中會多一套代碼,所以最后的ipa包大小也不一樣(多出來的只是代碼的大小,好像跟資源例如圖片啥的沒關(guān)系,估計資源對這幾個代碼來說是公用的),安裝到設(shè)備里面的時候會根據(jù)CPU架構(gòu)執(zhí)行對應(yīng)的代碼,但是架構(gòu)指令集只能向下兼容,iPhone5(armv7s)就無法安裝a安裝包,但是iPhone5s(arm64)就可以安裝b安裝包,只不過這樣無法展現(xiàn)iPhone5s 64位處理器的性能。
查看一個安裝包支持的架構(gòu)指令集的方式是先修改安裝包后綴名為zip,然后解壓,在終端cd到解壓的文件夾中的.app文件里面(一般.app會被隱藏),使用lipo -info app項目名命令查看。
