首先,bitcode 是什么呀?
它其實(shí)是被編譯程序的一種中間形式代碼,而且是跟 iOS、Xcode 脫離不了關(guān)系的一種二進(jìn)制表示形式。它通過 LLVM 編譯器(LLVM 是目前蘋果采用的編譯器工具鏈)將 C/C++/OC/Swift 等前端編程語(yǔ)言編譯成多種不同芯片上的機(jī)器指令過程中的中間代碼,而且與 CPU 無(wú)關(guān)。
雖然 bitcode 僅僅只是一個(gè)中間碼,它不能在任何平臺(tái)上運(yùn)行,但是它可以轉(zhuǎn)化為任何被支持的 CPU 架構(gòu)。任何被支持的,包括未被發(fā)明的 CPU 架構(gòu),打開 bitcode 提交到 App Store 的 App,若蘋果將 CPU 全新設(shè)計(jì)的、新出的一款手機(jī),在蘋果后臺(tái)服務(wù)器一樣可以從該 App 的 bitcode 開始編譯轉(zhuǎn)化為新 CPU 上的可執(zhí)行程序,供新手機(jī)用戶下載運(yùn)行。
在 Xcode 中,相對(duì) iOS,bitcode是可選的;相對(duì) watchOS 和 tvOS,bitcode 是必須的;而 Mac OS,則是不支持 bitcode 的。
很顯然,WatchOS 和 Mac OS 蘋果沒有給你選擇的權(quán)利,為什么蘋果要這么做呢?因?yàn)榘?bitcode 上傳到蘋果的中心服務(wù)器后,原本包含多種支持 CPU 架構(gòu)代碼的 App,蘋果可以動(dòng)態(tài)生成相應(yīng) CPU 的 App 版本,為安裝 App 的設(shè)備進(jìn)行優(yōu)化二進(jìn)制,減小安裝包的下載大小。最重要的是允許蘋果可以在后臺(tái)服務(wù)器對(duì)應(yīng)用程序進(jìn)行簽名,而不用導(dǎo)出任何密鑰到終端開發(fā)者那。
另外,最大的好處就是,以后設(shè)計(jì)了新指令集的新 CPU,可以繼續(xù)從這份 bitcode 開始編譯出新CPU 上執(zhí)行的可執(zhí)行文件,來(lái)供用戶下載安裝。
而 bitcode 對(duì)開發(fā)者的工作也有一定的影響,bitcode 為 NO 時(shí),應(yīng)用程序奔潰后,可以根據(jù)獲取的的奔潰日志,再加上上傳到蘋果服務(wù)器的二進(jìn)制文件的調(diào)試符號(hào)表信息,可以來(lái)還原程序運(yùn)行過程到奔潰后調(diào)用棧的信息,相對(duì)問題的定位排查有一定幫助。而 bitcode 設(shè)置為 YES 后,用戶安裝的二進(jìn)制是蘋果服務(wù)器經(jīng)過優(yōu)化后生成的,信息丟失了,也就無(wú)法排障了。
所以在 iOS 開發(fā)時(shí),工程是否需要支持 bitcode 還是要權(quán)衡的。經(jīng)常使用各種第三方的人,若工程需要支持 bitcode,則必須要求所有引入的第三方庫(kù)都支持 bitcode。而在開發(fā)第三方的開發(fā)者則需要決定 bitcode 的屬性,從而決定是否影響使用者。
不知道大家是否有遇到過關(guān)于 bitcode 的問題,今天列舉一個(gè)如下圖中的問題例子,簡(jiǎn)單闡述下這類問題的解決方案。

第一步: 重啟 Xcode 的,打開后再 clean 下 Xcode,以防奇怪報(bào)錯(cuò);
第二步:修改?Build Settings -> Enable Bitcode?選項(xiàng)的屬性值 YES/NO;
第三步:修改?Build Settings -> Build Active Active Architecture Only?設(shè)置 Debug 或 Release 的 YES/NO;
第四部:打開 Xcode 找到 Products 文件夾里的 .app 文件,點(diǎn)擊 show in Finder 選擇三欄顯示模式 -> 往前滑找到 DerivedData 文件夾, 刪除 ;
第五步:在?Build Settings?->?Custom Compiler Flags,加 -fembed-bitcode
如果還是沒有解決,只能使用第六步了。
第六步:再編譯下,看看是不是其他的問題吧,應(yīng)該不關(guān) bitcode 的事~
Bitcode 在 Xcode 中的深入淺出(二),繼續(xù)聊聊關(guān)于 bitcode 的故事吧。
參考文章:
1)http://www.cnblogs.com/rayshen/p/5646182.html
2)http://blog.csdn.net/helloworld183/article/details/78249127
3)http://www.itdecent.cn/p/e9729a78d1f1