繁体   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