在我搜索确定iOS二进制文件是否使用Bitcode构建的方法时,我发现了以下帖子:
How to check if a framework is BITCODE supported for Xcode7
这里建议使用以下方法来确定bitcode是否存在于二进制文件中:
$ otool -l libName.o | grep __LLVM
但是,我在几个二进制文件上尝试了这个并没有成功。其中一个是我知道有bitcode的库,因为在我改变项目标志后,构建错误就消失了。另外一个是文件扩展名的二进制文件,使用Archive构建。另一个是苹果手表。
我相信所有上述二进制文件都应该有Bitcode,但我总是得不到上述命令的结果。
有没有人知道任何其他适用于最新二进制文件的方法?
我正在使用XCode 7.2和10.10.5以防万一。
更新:这是一个应该有bitcode的文件示例,但上面的命令不返回任何内容。它是来自测试文件提供程序的二进制文件。我通过Archive和Deploy as Ad Hoc生成它,并确保bitcode的设置为目标开启。
https://www.dropbox.com/s/eyuzs5j1t7nsq6t/CustomDocumentProviderFileProvider?dl=0
答案 0 :(得分:3)
这似乎是otool
报告here的问题。使用file
获取体系结构列表,然后将体系结构提供给otool
。给出了armv7
,arm64
,i386
和x86_64
的Bitcode胖二进制文件:
$ 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
根据此question,otool不报告x86_64
和i368
的Bitcode。
CustomDocumentProviderFileProvider
似乎不包含Bitcode:
$ 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
$
答案 1 :(得分:0)
免责声明:我是LibEBC的作者。
您可以使用ebcutil
来确定bitcode是否存在于任何二进制文件(Mach-O,ELF)或库(.a
/ .dylib
/ .so
)中。< / p>
答案 2 :(得分:0)
到目前为止,对我有用的技术是this answer中从另一个SO线程提到的技术。具体来说,对于一个名为MyLib
的(动态)框架,其中包含这两种设备架构:
otool -arch armv7 MyLib.framework/MyLib | grep LLVM
otool -arch arm64 MyLib.framework/MyLib | grep LLVM
答案 3 :(得分:0)
如果您使用胖二进制文件,则需要在特定的片上运行otool -l
。例如,在以下示例中,我选择了arm64:
otool -arch arm64 -l MyFramework.framework/MyFramework | grep -a4 __LLVM
在输出中,您应该检查:
__LLVM
的部分