32位和64位處理系統(tǒng)
模擬器32位處理器測(cè)試需要i386架構(gòu),
模擬器64位處理器測(cè)試需要x86_64架構(gòu),
真機(jī)32位處理器需要armv7,或者armv7s架構(gòu),
真機(jī)64位處理器需要arm64架構(gòu)
手機(jī)arm處理器不同,導(dǎo)致需要區(qū)分arm指令集, 都可以向下兼容
項(xiàng)目中使用的第三方庫(kù)肯定需要支持64位系統(tǒng)
Armv6、armv7、armv7s、arm64都是arm處理器的指令集,所有指令集原則上都是向下兼容的,如iPhone4S的CPU默認(rèn)指令集為armv7指令集,但它同時(shí)也兼容armv6指令集,只是使用armv6指令集時(shí)無(wú)法充分發(fā)揮其性能,即無(wú)法使用armv7指令集中的新特性,同理,iPhone5的處理器標(biāo)配armv7s指令集,同時(shí)也支持armv7指令集,只是無(wú)法進(jìn)行相關(guān)的性能優(yōu)化,從而導(dǎo)致程序的執(zhí)行效率沒(méi)那么高

Architectures
指定工程被編譯成可支持哪些指令集類型,而支持的指令集越多,就會(huì)編譯出包含多個(gè)指令集代碼的數(shù)據(jù)包,對(duì)應(yīng)生成二進(jìn)制包就越大,也就是ipa包會(huì)變大Valid Architectures
限制可能被支持的指令集的范圍,也就是Xcode編譯出來(lái)的二進(jìn)制包類型最終從這些類型產(chǎn)生,而編譯出哪種指令集的包,將由Architectures與Valid Architectures(因此這個(gè)不能為空)的交集來(lái)確定Build Active Architecture Only
指定是否只對(duì)當(dāng)前連接設(shè)備所支持的指令集編譯
當(dāng)其值設(shè)置為YES,這個(gè)屬性設(shè)置為yes,是為了debug的時(shí)候編譯速度更快,它只編譯當(dāng)前的architecture版本,而設(shè)置為no時(shí),會(huì)編譯所有的版本。 所以,一般debug的時(shí)候可以選擇設(shè)置為yes,release的時(shí)候要改為no,以適應(yīng)不同設(shè)備
制作靜態(tài)庫(kù).a是指令集選擇
現(xiàn)在回歸到正題,如何制作一個(gè)“沒(méi)有問(wèn)題”的.a靜態(tài)庫(kù),通過(guò)以上信息了解到,當(dāng)我們做App的時(shí)候,為了追求高效率,并且減小包的大小,Build Active Architecture Only設(shè)置成YES,Architectures按Xcode默認(rèn)配置就可以,因?yàn)閍rm64向前兼容。但制作.a靜態(tài)庫(kù)就不同了,因?yàn)橐WC兼容性,包括不同iOS設(shè)備以及模擬器運(yùn)行不出錯(cuò),所以結(jié)合當(dāng)前行業(yè)情況,要做到最大的兼容性。
ValidArchitectures設(shè)置為:armv7|armv7s|arm64|i386|x86_64
Architectures設(shè)置不變(或根據(jù)你需要): armv7|arm64
然后分別選擇iOS設(shè)備和模擬器進(jìn)行編譯,最后找到相關(guān)的.a進(jìn)行合包:
合并兩個(gè)不同構(gòu)架的庫(kù)文件
$ lipo -create /Users/xxxxxx/lib/libv7.a /Users/xxxxxx/lib/lib64.a -output /Users/xxxxxx/lib/lib.a
指令說(shuō)明: lipo -create 庫(kù)文件1一完整路徑 庫(kù)文件2完整路徑 -output 輸出的文件名路徑
從某個(gè)庫(kù)文件中提起出指定構(gòu)架的庫(kù)文件
Desktop$ lipo -thin arm64 debugserver -output debugserver2
指令說(shuō)明:lipo -thin 對(duì)應(yīng)構(gòu)架指令 對(duì)應(yīng)文件 -output 輸出的文件名路徑
使用lipo -create 真機(jī)庫(kù).a的路徑 模擬器庫(kù).a的的路徑 -output 合成庫(kù)的名字.a ,這樣就制作了一個(gè)通用的靜態(tài)庫(kù).a。