簡體   English   中英

如何檢查框架是否支持 Xcode7 的 Bitcode

[英]How to check if a framework is Bitcode supported for Xcode7

從 Xcode 7 開始,第三方框架應該支持Bitcode成為常見問題之一 我們還可以通過在 Build 設置中將 ENABLE_BITCODE 設置為 NO 來禁用 BITCODE。 但我不想關閉它,而是想將我所有的框架轉換為 BITCODE 兼容。

那么除了在 Xcode 中編譯框架之外,如何檢查框架是否與 BITCODE 兼容。 有時 Xcode 會為一個框架的 BITCODE 兼容性給出錯誤,而其他框架即使沒有 BITCODE 支持。

是否有任何工具/命令行檢查?

這個 Apple Developers Forum討論中,用戶dshirleybwilson建議使用命令行工具otoolgrep來檢查是否存在 bitcode 部分。

$ otool -l libName.o | grep __LLVM

或者

$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM

運行上述命令,如果庫包含位碼,您將看到segname __LLVM輸出。

接受的答案表明你應該做grep __LLVM但我寧願這樣做

otool -l libName.o | grep __bitcode

因為有不同的__LLVM段,並不是所有這些都表明 Bitcode 的存在。 下面是一個例子:

Section
  sectname __bitcode
   segname __LLVM
      addr 0x00000000000007d0
      size 0x0000000000000f10
    offset 3360
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0
Section
  sectname __cmdline
   segname __LLVM
      addr 0x00000000000016e0
      size 0x0000000000000069
    offset 7216
     align 2^4 (16)
    reloff 0
    nreloc 0
     flags 0x00000000
 reserved1 0
 reserved2 0

__cmdline部分的存在並不表示 Bitcode 存在,但在搜索__LLVM時也會找到它。

我觀察到 __bitcode 部分只存在於靜態庫而不是動態庫。 因此,一種解決方案是以下命令。

otool -l libDeviceManager.a | grep __LLVM 

此外,有時使用胖二進制文件 otool 可能不會給出 __LLVM 段,即使它們存在。 對於這些情況,您可以使用以下命令

otool -arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM

你可以試試這些命令:

otool -arch armv7 -l libDeviceManager.a | grep bit code

otool -arch arm64 -l libDeviceManager.a | grep bitcode

Targets設置標志:

在此處輸入圖片說明

啟用位碼

otool -arch arm64 -l myFramework | grep __LLVM
  segname __LLVM
   segname __LLVM

我(錯誤地)期望針對本地 iOS 應用程序構建讀取相同的輸出。 情況並非如此。 盡管有ENABLE_BITCODE YES ,但同樣的命令什么也沒產生。 只有當您選擇Archive時,位bitcode過程bitcode啟動。

這個答案幫助了我:

`-fembed-bitcode` 和 BITCODE_GENERATION_MODE 有什么區別?

另一種方法

otool -v -s __LLVM __bundle <binary_path>
//e.g.
otool -v -s __LLVM __bundle "/Users/alex/MyModule.framework/MyModule" 

或者在__LLVM段中找到__bundle部分

otool -l <binary_path> | grep __bundle 

[位碼]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM