web-dev-qa-db-fra.com

Comment vérifier si un framework est pris en charge par BITCODE pour Xcode7

À partir de Xcode 7, il est devenu l'un des problèmes courants que les frameworks tiers devraient prendre en charge Bitcode . Nous pouvons également désactiver le BITCODE en définissant ENABLE_BITCODE sur NO dans les paramètres de génération. Mais je ne veux pas le désactiver, je veux plutôt convertir tous mes frameworks en BITCODE compatible.

Alors, comment vérifier si un framework est compatible BITCODE en dehors de la compilation du framework dans Xcode. Parfois, Xcode donne une erreur pour la compatibilité BITCODE pour un cadre laissant les autres même s'ils ne prennent pas en charge BITCODE.

Existe-t-il une vérification de l'outil/de la ligne de commande?

30
iPrabu

De this Apple Developers Forum discussion, user dshirley and bwilson suggère d'utiliser les outils de ligne de commande otool et grep pour vérifier si des sections de code bit existent.

$ otool -l libName.o | grep __LLVM

ou

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

En exécutant la commande ci-dessus, si la bibliothèque contient du code bit, vous verrez segname __LLVM production.

39
Michael M. Myers

La réponse acceptée suggère que vous fassiez grep __LLVM mais je préfère faire ça

otool -l libName.o | grep __bitcode

car il existe différents __LLVM segments et pas tous indiquent la présence de Bitcode. Voici un exemple:

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

La présence du __cmdline La section n'indique pas que le Bitcode est présent, mais il serait également trouvé lors de la recherche de __LLVM.

13
Mecki

J'ai observé que la section __bitcode n'est présente que pour les bibliothèques statiques et non pour les bibliothèques dynamiques. Donc, la solution est la commande ci-dessous.

otool -l libDeviceManager.a | grep __LLVM 

De plus, parfois avec de gros fichiers binaires, otool peut ne pas donner de segments __LLVM même s'ils sont présents. Vous pouvez utiliser la commande suivante pour ces cas

otool -Arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM
5
SnehaK

vous pouvez essayer ces commandes:

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

et

otool -Arch arm64 -l libDeviceManager.a | grep bitcode
1
naresh d