Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检查Xcode7是否支持框架位码_Ios_Xcode7_Ios Frameworks_Bitcode - Fatal编程技术网

Ios 如何检查Xcode7是否支持框架位码

Ios 如何检查Xcode7是否支持框架位码,ios,xcode7,ios-frameworks,bitcode,Ios,Xcode7,Ios Frameworks,Bitcode,从Xcode 7开始,它成为第三方框架应该支持的常见问题之一。我们还可以通过将ENABLE_BITCODE设置为NO-in-Build设置来禁用位代码。但我不想关闭它,而是想将我所有的框架转换为比特码兼容的 因此,除了在Xcode中编译框架外,如何检查框架是否与位代码兼容。有时,Xcode会给出一个框架的位代码兼容性错误,而将其他框架留下,即使它们不支持位代码 是否有任何工具/命令行检查?根据讨论,用户建议使用命令行工具otool和grep检查位代码部分是否存在 $ otool -l libNa

从Xcode 7开始,它成为第三方框架应该支持的常见问题之一。我们还可以通过将ENABLE_BITCODE设置为NO-in-Build设置来禁用位代码。但我不想关闭它,而是想将我所有的框架转换为比特码兼容的

因此,除了在Xcode中编译框架外,如何检查框架是否与位代码兼容。有时,Xcode会给出一个框架的位代码兼容性错误,而将其他框架留下,即使它们不支持位代码

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

根据讨论,用户建议使用命令行工具
otool
grep
检查位代码部分是否存在

$ otool -l libName.o | grep __LLVM


运行上述命令,如果库中包含位代码,您将看到
segname\uuullvm
输出。

接受的答案建议您执行
grep\uuullvm
,但我宁愿这样做

otool -l libName.o | grep __bitcode
因为存在不同的
\uu LLVM
段,并且并非所有这些段都表示存在位码。下面是一个例子:

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

出现
\uuuu cmdline
部分并不表示存在位码,但在搜索
\uuuu LLVM
时也会找到位码。您可以尝试以下命令:

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


我已经注意到_位代码部分仅用于静态lib,而不用于动态lib。因此,一个解决方案是下面的命令

otool -l libDeviceManager.a | grep __LLVM 
此外,有时使用fat二进制文件时,otool可能不会提供LLVM片段,即使它们存在。对于这些情况,可以使用以下命令

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

目标中设置标志:

启用位码

otool -arch arm64 -l myFramework | grep __LLVM
  segname __LLVM
   segname __LLVM
我(错误地)期望通过本地iOS应用程序构建读取相同的输出。事实并非如此。尽管have
ENABLE\u BITCODE YES
,但同一命令没有产生任何结果。只有当您选择了
Archive
时,
bitcode
过程才会启动

这个答案帮助了我:

还有一种方法

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

谢谢你的回答,迈克尔。所以这个工具可以在.o或.a文件上工作。如何检查.framework文件?.framework只是一种将资源、公共头和库打包在一起的好方法。库就在那里,您需要在上面运行命令。例如,根据目录结构:
$otool-l MyFramework.framework/Versions/A/MyFramework | grep u LLVM
,其中
MyFramework
是库(不带文件扩展名)。有关框架目录结构的更多信息,请查看MichaelUse this以检查树中的所有.a文件的信息(请注意,最后一个分号必须是命令的一部分。也不要忘记使test_bitcode.sh可执行):查找-名称'*a'-type f-exec./test_bitcode.sh{}\;test_bitcode.sh的内容是:echo“******TESTING$1”;otool-l$1 | grep | ulvm | head-n1这只适用于我检查特定架构时。e、 g.
otool-arch arm64-l MyFramework.framework/Versions/A/MyFramework | grep LLVM
这不起作用。我有一个Swift框架,在启用位代码的情况下搜索“u LLVM”是可行的,但事实并非如此。在用户bwilson(苹果员工)的文章中提到搜索u_位代码是不可靠的,并推荐了u LLVM。到今天为止,这种方法对我有效。如果我没有指定任何architecture@superjos是的,您需要为fat二进制文件指定体系结构。
otool -arch arm64 -l myFramework | grep __LLVM
  segname __LLVM
   segname __LLVM
otool -v -s __LLVM __bundle <binary_path>
//e.g.
otool -v -s __LLVM __bundle "/Users/alex/MyModule.framework/MyModule" 
otool -l <binary_path> | grep __bundle