2017-02-07 31 views
3

我目前正在構建一個傘框架(在任何人這麼說之前,我知道蘋果公司不鼓勵這種框架,但我是這種情況,因爲我是所有子框架的所有者,框架,如果它們不屬於這個或另一個Umbrella框架的一部分,則它們不是分佈式的,但我們處於封閉源代碼配置中)。Xcode 8:禁用位代碼和傘框架

我按照這個帖子創建了框架:https://stackoverflow.com/a/41815368/2572568

一切工作正常,除了我得到了以下錯誤:

dyld: Library not loaded: @rpath/B.framework/B Referenced from: /private/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/A Reason: no suitable image found. Did find: /private/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/Frameworks/B.framework/B: required code signature missing for '/private/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/Frameworks/B.framework/B'

應用程序是使用具有子框架乙

我發現,所有項目禁用位碼是解決這一問題的雨傘框架的一個應用程序(這就是我現在所做的)從此主題:https://github.com/CocoaPods/CocoaPods/issues/3661

因此,這裏是我的問題:

  1. 是什麼地停止位碼正好在做什麼?我發現Apple提交代碼後可以運行優化。這些速度優化或磁盤空間優化,還是其他優化?
  2. 我做錯了建設我的傘架?是否有可能不禁用位碼?

回答

1

好等完全無關的問題多了一些研究之後,我發現這個線程:https://github.com/Carthage/Carthage/issues/535

實質上,這解決了問題2和另一個問題:是的,您可以爲您的Umbrella框架啓用位碼。

爲此,您必須手動設置名爲BITCODE_GENERATION_MODE的用戶定義設置(位於生成設置中,單擊頂部欄中的加號)以生成位碼。這將迫使Xcode構建你的真實位碼項目,而不僅僅是一個位碼子集。 User_Defined_Field bitcode 您必須爲您的Umbrella框架下的所有框架設置此標誌。

1

首先: 今天我進了完全相同的問題,我無法修復它。但刪除Bitcode將它固定給我。感謝您的

您的問題:

  1. 位碼是什麼樣的類似於Java的字節碼。你的應用程序被完全編譯,但不能用機器代碼(如彙編器)編譯。你的應用程序被編譯爲Bitcode。這有助於Apple在其服務器上構建不同版本的應用。一個用於64位,另一個用於32位器件。然後他們將兩個應用程序分開,這可以節省實際設備上的磁盤空間。 他們可能還有一些進一步的優化,可以加快應用程序。通常今天不需要。

  2. 我嘗試了幾乎所有我能想象到的事情,此刻我會說:不,如果您有一個大傘架,不可能禁用位代碼。你能否檢查你的傘架中是否有不支持Bitcode的子框架?與AWS SDK,Facebook SDK一樣... 如果所有子框架都支持Bitcode,則可能支持Bitcode。這個答案似乎看好我,但它是一個有點老:https://stackoverflow.com/a/27638841/1203713

問候, 亞歷

+0

感謝亞歷克斯這個答案。我目前只是包裝框架,我是這個傘框架中的所有者,所以我認爲他們都會支持bitcode(除非我需要爲此做一些特殊的事情)。 無論如何,基於你的答案1,由於Umbrella框架的結構,可能無法啓用位碼,從而無法用位碼編譯。 – Supermomo

+1

Bitcode的工作原理並不完全清楚,所以這可能是有道理的,也是蘋果不喜歡Umbrella Frameworks的另一個原因 – Sn0wfreeze