How to check if a framework is BITCODE supported for Xcode7

后端 未结 5 832
梦谈多话
梦谈多话 2020-12-04 14:46

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

相关标签:
5条回答
  • 2020-12-04 15:12

    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.

    0 讨论(0)
  • 2020-12-04 15:24

    Set the flag in the Targets:

    Bitcode enabled

    otool -arch arm64 -l myFramework | grep __LLVM
      segname __LLVM
       segname __LLVM
    

    I ( wrongly ) expected to read the same output against a local iOS app build. That was not the case. The same command produced nothing, despite have ENABLE_BITCODE YES. Only when you selected Archive did the bitcode process start.

    This answer helped me:

    What's the difference between `-fembed-bitcode` and BITCODE_GENERATION_MODE?

    0 讨论(0)
  • 2020-12-04 15:25

    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.

    0 讨论(0)
  • 2020-12-04 15:25

    I have observed that __bitcode section is only present for static Libs and not for dynamic libs. So, one 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
    
    0 讨论(0)
  • 2020-12-04 15:30

    you can try these commands:

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

    and

    otool -arch arm64 -l libDeviceManager.a | grep bitcode
    
    0 讨论(0)
提交回复
热议问题