How to check if a framework is BITCODE supported for Xcode7

我们两清 提交于 2019-11-27 00:17:42

问题


From Xcode 7 it became one of the common problem that third party frameworks should support Bitcode. We can also disable the BITCODE by setting ENABLE_BITCODE to NO in Build settings. But i do not want to turn it off, instead i want to convert all my frameworks to BITCODE compatible.

So how to check if a framework is BITCODE compatible apart from compiling the framework in Xcode. Sometimes Xcode give error for BITCODE compatibility for one framework leaving the others even though they don't have BITCODE support.

Is there any tool/command line check?


回答1:


From this Apple Developers Forum discussion, user dshirley and bwilson suggest using command line tools otool and grep to check if bitcode sections exist.

$ otool -l libName.o | grep __LLVM

or

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

Running the above command, if the library contains bitcode you will see segname __LLVM output.




回答2:


The accepted answer suggests you shall do grep __LLVM but I'd rather do this

otool -l libName.o | grep __bitcode

as there are different __LLVM segments and not all of these indicate the presence of Bitcode. Here's an example:

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

The presence of the __cmdline Section does not indicate that Bitcode is present, yet it would also be found when just searching for __LLVM.




回答3:


I have observed that __bitcode section is only present for static Libs and not for dynamic libs. So, on solution is the below command.

otool -l libDeviceManager.a | grep __LLVM 

Also, sometimes with fat binaries otool may not give __LLVM segments even though they are present. You can use the following command for those cases

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



回答4:


you can try these commands:

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

and

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


来源:https://stackoverflow.com/questions/32808642/how-to-check-if-a-framework-is-bitcode-supported-for-xcode7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!