1. 程式人生 > >Xcode bitcode報錯解決方法

Xcode bitcode報錯解決方法

bitcode是什麼?
bitcode是被編譯程式的一種中間形式的程式碼。包含bitcode配置的程式將會在App store上被編譯和連結。bitcode允許蘋果在後期重新優化程式的二進位制檔案,而不需要重新提交一個新的版本到App store上。
bitcode選項預設是設定為YES的。

解決Xcode報bitcode錯誤的方法:
1.讓第三方庫支援bitCode,
2.將bitcode關閉(Xcode 7以後,bitcode預設是YES)


擴充套件
為什麼蘋果預設要求watchOS和tvOS的App要上傳bitcode?因為把bitcode上傳到它自己的中心伺服器後,它可以為目標安裝App的裝置進行優化二進位制,減小安裝包的下載大小,當然iOS開發者也可以上傳多個版本而不是打包到單個包裡,但是這樣會佔用更多的儲存空間。最重要的是允許蘋果可以在後臺伺服器對應用程式進行簽名,而不用匯出任何金鑰到終端開發者那。
上傳到伺服器的bitcode給蘋果帶來更好處是:以後新設計了新指令集的新CPU,可以繼續從這份bitcode開始編譯出新CPU上執行的可執行檔案,以供使用者下載安裝。
但是bitcode給開發者帶來的不便之處就是:沒用bitcode之前,當應用程式奔潰後,開發者可以根據獲取的的奔潰日誌,再配上上傳到蘋果伺服器的二進位制檔案的除錯符號表資訊,可以還原程式執行過程到奔潰時後呼叫棧資訊,對問題進行定位排查。但是用了bitcode之後,使用者安裝的二進位制不是開發者這邊生成的,而是蘋果伺服器經過優化後生成的,其對應的除錯符號資訊丟失了,也就無法進行前面說的還原奔潰現場找原因了。目前,watchOS和tvOS應用釋出必須上傳帶bitcode版本的包。iOS應用釋出對bitcode的要求是可選的,使用者可以在Xcode的專案設定中關閉。相當於在編譯的時候加一個標記:embed-bitcode-marker(除錯構建) embed-bitcode(打包/真機構建)。這個在clang編譯器的引數是-fembed-bitcode,swift編譯器的引數是-embed-bitcode。