web-dev-qa-db-fra.com

Échec de la vérification du bitcode lors de l'exportation de l'archive pour une distribution ad hoc - Xcode 8.3.3 et Xcode 9 essayés

Les applications contenant notre infrastructure se plaignent des codes bits manquants lors de l'exportation d'archives pour une distribution ad hoc.

J'ai parcouru la documentation fournie par Apple à cet égard Note technique TN2432 . Les causes premières possibles répertoriées dans les documentations ne ressemblent pas à notre scénario. (Nous n'utilisons pas les instructions d'assemblage ou avons un fichier info.plist mal formé)

J'ai traversé des questions similaires postées sur SO

Erreur lors de l'exportation avec Bitcode activé (symbole introuvable pour l'architecture armv7)

Est-il possible de créer un framework iOS universel en utilisant le bitcode?

Nouveaux avertissements dans iOS 9

Mais les solutions proposées ne semblent pas fonctionner.

J'ai essayé d'ajouter l'indicateur BITCODE_GENERATION_MODE dans les paramètres de construction définis par l'utilisateur. J'ai également essayé d'ajouter -fembed-bitcode- marker & -fembed-bitcode dans les drapeaux Other C dans la cible Framework.

Je vérifie la présence de segments de code binaire dans la structure générée à l’aide de la commande suggérée

otool -l -Arch arm64 <framework_name> | grep __LLVM

Il montre 2 segments

nom de séquence __LLVM

nom de séquence __LLVM

Cependant, lors de l'exportation de l'archive, Xcode se plaint toujours de l'absence de bitcode. 

J'ai essayé de télécharger une application sur l'App Store pour vérifier si ce problème était dû aux versions de Xcode (j'ai essayé les versions 8.3.3. Et 9.0), mais je reçois un courrier électronique concernant une erreur d'importation de la construction depuis iTunes Store.

Lors du traitement de votre application iOS, APP_NAME 1.0 (4), des erreurs se sont produites lors du processus d’amincissement de l’application et votre application n’a pas pu être amincie. Si votre application contient un bitcode, le traitement du bitcode peut avoir échoué. En raison de ces erreurs, cette version de votre application ne pourra pas être soumise à l'examen ni placée sur l'App Store. Pour plus d'informations susceptibles de vous aider à résoudre ce problème, voir la note technique 2432.

PS: La désactivation du bitcode n'est pas une option pour nous, car l'application hôte doit prendre en charge le bitcode.

 Error while exporting the Archieve

8
Vipin

La description de l'erreur m'a pris dans la mauvaise direction pour trouver la solution.

Cette erreur n'est pas liée au bitcode. Il est apparu lorsque la structure contenait des tranches de simulateur (i386 x86_64)

Les supprimer avant l'archivage a résolu le problème. 

L'ajout d'une phase de script d'exécution pour créer les phases de la cible avec le code suivant a permis de supprimer l'erreur.

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"

EXTRACTED_ARCHS=()

for Arch in $ARCHS
do
echo "Extracting $Arch from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$Arch" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$Arch"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$Arch")
done

echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"

echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

done

Crédits: http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/

Si vous ne savez pas comment ajouter une phase de script d'exécution à votre projet Xcode, car vous construisez peut-être un projet avec Cordova ou Ionic et que l'on ne vous a jamais beaucoup appris sur Xcode, voici comment procéder:

  • Ouvrez votre projet dans Xcode.
  • Assurez-vous de regarder votre projet dans le "Navigateur de projet" en cliquant sur l'icône la plus à gauche dans le volet gauche de Xcode (celle qui indique "afficher le navigateur de projet" lorsque vous le pointez.
  • Cliquez sur votre projet en haut de la fenêtre du navigateur pour le sélectionner comme cible.
  • À ce stade, dans la partie centrale de la fenêtre Xcode, plusieurs éléments apparaissent en haut. Général, capacités, balises de ressources, informations, entre autres. L'une d'entre elles est Build Phases - cliquez dessus.
  • Cliquez sur le signe + situé en haut à gauche de la partie centrale de la fenêtre Xcode. Il indiquera Ajouter une nouvelle phase de construction si vous le pointez suffisamment longtemps.
  • Sélectionnez "Nouvelle phase de script d'exécution" dans le menu qui s'est affiché lorsque vous avez cliqué sur le signe +.
  • Cliquez sur la flèche à côté du script d'exécution qui vient d'apparaître.
  • Copiez et collez le script ci-dessus dans la zone appropriée juste en dessous du mot "Shell". Vous ne devriez pas avoir à changer autre chose.
  • Construisez/archivez votre projet comme d'habitude, ce n'est que maintenant que vous n'obtiendrez pas ces erreurs ennuyeuses "échec de la vérification du bitcode". :-)
51
Vipin

Je devais définir Enable Bitcode sur 'NO' dans les paramètres de construction

6
MobileMon

Essayez ce qui suit:

  • Assurez-vous que ce cadre est ajouté sous Copier le script Frameworks dans les phases de construction.
  • Utilisez BITCODE_GENERATION_MODE au lieu de BITCODE_GENERATION_CODE
1
Roy K