Bibliothèque iOS vers BitCode

J’ai récemment téléchargé Xcode 7 beta et Xcode se plaint de ce que certaines de mes bibliothèques C ne soient pas compilées dans BitCode. Comment pourrais-je dire à Clang de produire du BitCode compatible avec iOS? J’ai vu des réponses similaires sur stackoverflow, mais je ne sais pas si elles s’appliquent à la production de bibliothèques BitCode pour iOS.

Modifier:

J’utilise le bon paramètre, -fembed-bitcode, mais quand j’essaie d’archiver, j’obtiens l’erreur: ld: warning: ignorer le fichier XXXX / XXXX, le fichier a été construit pour l’archive qui n’est pas l’architecture liée (arm64). Lorsque j’utilise -fembed-bitcode-marker, je peux archiver, mais j’obtiens l’erreur: le bundle de bitcode complet n’a pas pu être généré car XX / XX a été construit uniquement avec un marqueur de code binary. La bibliothèque doit être générée à partir de la version d’archive Xcode avec le code binary activé.

Des idées sur ce qui ne va pas? La bibliothèque comstack avec succès, mais elle ne me laisse pas archiver. J’ai créé une fonction d’ajout simple et en ai fait une bibliothèque, et j’ai les mêmes symptômes, ce n’est donc pas la bibliothèque que je comstack.

Edit 2: Vous devez construire les versions arm64 et armv7 en utilisant bitcode et les assembler. L’utilisation du bitcode ne supprime pas le besoin d’une grosse bibliothèque lors de l’archivage. source: https://forums.developer.apple.com/message/25132#25132

Lors de la création de bibliothèques statiques, vous devez append les éléments suivants pour la génération de code:

-fembed-bitcode 

pour une bibliothèque dynamic, vous devez également créer un lien avec

 -fembed-bitcode 

Remarque: cette commande est uniquement disponible avec Xcode7 +

En ce qui concerne la réponse acceptée à l’utilisation de -fembed-bitcode-marker

Vous devez être conscient qu’une construction normale avec l’option -fembed-bitcode-marker produira des sections de code bit intégré de taille minimale sans aucun contenu réel. Cela permet de tester les aspects de votre build liés au bitcode sans ralentir le processus de construction. Le contenu réel du code binary est inclus lorsque vous créez une archive.

bwilson Apple Staff. https://forums.developer.apple.com/thread/3971#12225


Pour être plus précis:

  • -fembed-bitcode-marker marque simplement l’emplacement du bitcode dans le binary après une compilation d’archive.
  • -fembed-bitcode en fait la génération et l’incorporation complètes du -fembed-bitcode . C’est ce que vous devez utiliser pour créer des bibliothèques statiques.
  • Xcode lui-même construit avec -fembed-bitcode-marker pour les constructions régulières (comme le déploiement sur simulateur)
  • Xcode ne construit qu’avec -fembed-bitcode pour les builds / builds d’archivage (car cela n’est nécessaire que pour Apple).

Allez dans les parameters de construction . Recherchez ” drapeaux de compilation personnalisés “.
Ajouter -fembed-bitcode à Other C Flags . Cela garantira que la lib est construite avec la compatibilité bitcode au moment de la compilation. Je l’ai fait pour iOS 64 bits et 32 ​​bits, et les ai transformés en un seul. Fonctionne comme un charme.

Comme vous avez eu des requêtes, voici une capture d’écran des parameters: Les parameters sont les mêmes pour la cible du projet et la cible du SDK.

entrer la description de l'image ici


Le code bitcode ne fonctionnera pas avec Xcode 6.

Si vous rencontrez toujours des problèmes après avoir ajouté -fembed-bitcode aux autres indicateurs, recherchez “Activer le code” sous “Options de génération” et définissez-le sur Non. Cela vous permettra d’archiver correctement.

Ce dont vous avez besoin est -fembed-bitcode. Lorsque ENABLE_BITCODE est activé, Xcode construit avec -fembed-bitcode-marker pour les versions standard et avec -fembed-bitcode pour les versions d’archive. Une option consiste simplement à “marquer” le bitcode dans le fichier binary après une construction d’archive et à appliquer les nouvelles règles de bitcode, tandis que l’autre effectue la génération de bitcode complet, qui est probablement plus lente et inutilisable .

Le guide de Syo Ikeda sur la gestion de BITCODE pourrait également vous aider:

Vous pouvez trouver le jeu de diapositives complet ici.

Si vous construisez une bibliothèque statique et que vous souhaitez activer le bitcode, il se peut que le (1) ENABLE_BITCODE = YES ne soit pas suffisant.

(2) Également avec le paramètre -fembed-bitcode l’erreur ci-dessous était toujours lancée pour plusieurs fichiers lorsqu’ils étaient intégrés à Teamcity

 bitcode bundle could not be generated because '/path/fileInYourStaticLib.a(fileInYourStaticLib.o)' was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64 

Quelques conseils / éléments à prendre en compte qui m’ont aidé à résoudre le problème, en plus des étapes (1) et (2) ci-dessus.

  1. Assurez-vous que vous définissez la variable «Other C Flags» sur «-fembed-bitcode» sur le «PROJECT» et sur toutes les «TARGETS».

  2. S’il existe plusieurs projets pour lesquels vous essayez de créer une bibliothèque statique, assurez-vous que tous les projets ont "-fembed-bitcode" activé.

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the name BITCODE_GENERATION_MODE , and set Debug to marqueur , Release to bitcode

  4. Si les étapes ci-dessus ne fonctionnent pas, vous pouvez également essayer cette option. On Build Settings -> Other C flags, set Debug to -fembed-bitcode-marker , and Release to -fembed-bitcode

Ce blog a été d’une grande aide https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Aussi, chaque fois que vous apportez les modifications ci-dessus, essayez de supprimer le DerivedData, Nettoyez le projet XCode, et éventuellement quittez et redémarrez XCode