2

在我寻找一种确定 iOS 二进制文件是否使用 Bitcode 构建的方法时,我发现了以下帖子:

如何检查框架是否支持 Xcode7 的 BITCODE

在这里,建议使用以下方法来确定二进制文件中是否存在位码:

$ otool -l libName.o | grep __LLVM

但是,我已经在几个二进制文件上尝试过这个,但没有成功。其中之一是我知道有位代码的库,因为在我更改其项目的标志后,构建错误消失了。其中另一个是用于文件扩展名的二进制文件,使用存档构建。另一个是苹果手表。

我相信上面所有的二进制文件都应该有 Bitcode,但我总是从上面的命令中得不到任何结果。

有谁知道任何其他适用于最新二进制文件的方法?

我正在使用 XCode 7.2 和 10.10.5 以防万一。

更新:这是一个应该具有位码但上述命令不返回任何内容的文件示例。它是来自测试文件提供程序的二进制文件。我通过 Archive and Deploy as Ad Hoc 生成它,并确保目标的 bitcode 设置已启用。

https://www.dropbox.com/s/eyuzs5j1t7nsq6t/CustomDocumentProviderFileProvider?dl=0

4

4 回答 4

6

如果你有一个胖二进制文件,那么你需要otool -l在一个特定的切片上运行。例如,在以下示例中,我选择了 arm64:

otool -arch arm64 -l MyFramework.framework/MyFramework | grep -a4 __LLVM

在输出中,您应该检查:

  1. 如果至少有一个部分被命名__LLVM
  2. 如果大小大于零
于 2019-06-25T14:57:31.473 回答
4

这似乎是这里otool报告的问题。用于获取架构列表,然后将架构提供给. 给定一个带有,和的位码的胖二进制文件:fileotoolarmv7arm64i386x86_64

$ file lib.a 
lib.a: Mach-O universal binary with 4 architectures
lib.a (for architecture armv7): current ar archive random library
lib.a (for architecture i386):  current ar archive random library
lib.a (for architecture x86_64):    current ar archive random library
lib.a (for architecture arm64): current ar archive random library

$ otool -arch armv7 -l lib.a | grep bitcode
sectname __bitcode

根据这个问题, otool 不报告x86_64和的位码i368

CustomDocumentProviderFileProvider似乎不包含位码:

$ file CustomDocumentProviderFileProvider
CustomDocumentProviderFileProvider: Mach-O universal binary with 2 architectures
CustomDocumentProviderFileProvider (for architecture armv7):    Mach-O executable arm
CustomDocumentProviderFileProvider (for architecture arm64):    Mach-O 64-bit executable

$ otool -arch armv7 -l CustomDocumentProviderFileProvider | grep bit
$
于 2016-02-03T11:06:51.097 回答
0

截至今天,对我有用的技术是另一个 SO 线程的这个答案中提到的技术。具体来说,对于名为MyLib并包含这两种设备架构的(动态)框架:

otool -arch armv7 MyLib.framework/MyLib | grep LLVM
otool -arch arm64 MyLib.framework/MyLib | grep LLVM
于 2019-05-30T15:35:08.093 回答
0

免责声明:我是 LibEBC 的作者。

您可以使用ebcutil来确定位码是否存在于任何二进制文件(Mach-O、ELF)或库(.a// .dylib.so中。

https://github.com/JDevlieghere/LibEBC

于 2017-07-13T06:40:30.180 回答