71 votes

Xcode - Erreur ITMS-90635 - Invalid Mach-O in bundle - soumission à l'App store

Je viens de recevoir cette erreur en soumettant une application au magasin d'applications.

enter image description here

Cela signifie-t-il que je dois définir ENABLE_BITCODE pour toutes les dépendances ? J'ai essayé mais j'ai eu des erreurs disant que les dépendances n'étaient pas compatibles avec le bitcode (ou quelque chose comme ça)...

65voto

Guillaume L. Points 731

J'ai eu le même problème plus tôt ce matin. En fait, la réponse est dans l'erreur : "Vérifiez que toutes les cibles d'une plate-forme ont une valeur cohérente pour les paramètres de construction ENABLE_BITCODE".

J'avais une cible (avec ENABLE_BITCODE défini sur NO), utilisant plusieurs pods ayant ENABLE_BITCODE défini sur YES. Donc, tout ce que j'avais à faire était de définir ENABLE_BITCODE sur YES dans la cible de mon projet. Mais je pense que vous avez le choix, vous pouvez aussi mettre ENABLE_BITCODE à NO dans toutes les librairies que vous utilisez.

64voto

Mike Sprague Points 124

La solution la plus simple et la plus courante :

Vous pouvez décocher "Inclure Bitcode" lorsque vous soumettez l'application via Xcode. uncheck the box

Si vous utilisez xcodebuild vous pouvez utiliser le passage d'un exportOptionsPlist avec la valeur de uploadBitcode mis à faux. Dans mon cas, nous utilisons xctool pour construire l'application et n'ont pas la possibilité de passer une exportOptionsPlist Nous avons donc dû retirer le bitcode de tous nos cadres.


Si quelqu'un utilise cocoapods et veut désactiver le bitcode pour ses frameworks, vous pouvez simplement ajouter ce qui suit à votre podfile :

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

Via https://stackoverflow.com/a/32685434/1417922


Pour clarifier un peu plus ce qui se passe avec cette question :

Il semble qu'Apple ait commencé à appliquer cette règle hier. Si votre binaire principal a le bitcode désactivé, mais que vous incluez une bibliothèque statique ou un framework qui a le bitcode activé, la validation échouera. Cela fonctionne également dans l'autre sens : si votre binaire principal a le bitcode activé, mais que vous incluez une bibliothèque ou un framework dont le bitcode est désactivé, la validation échouera.

J'avais quelques dépendances de GoogleMaps et Amazon qui rendaient non trivial le fait de tout changer pour activer le bitcode, donc je l'ai simplement désactivé et supprimé le bitcode d'une bibliothèque statique que j'avais importée dans mon projet. Vous pouvez supprimer le bitcode de n'importe quel binaire en utilisant la commande suivante

$ xcrun bitcode_strip -r {Framework}.dylib -o tmp.dylib
$ mv tmp.dylib {Framework}.dylib

https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html

Bien que les solutions ci-dessus soient des solutions au problème, je ne suis pas d'accord que si le binaire principal a le bitcode désactivé, tous les binaires inclus devraient en avoir besoin aussi. Le bitcode n'est qu'un code IR qu'Apple peut utiliser pour éclaircir les applications - pourquoi ne le supprime-t-il pas simplement des autres binaires (ce que je suppose être ce qu'ils faisaient auparavant) ? Cela n'a pas beaucoup de sens pour moi.

Fil de la pomme https://forums.developer.apple.com/thread/48071

5voto

Yestay Muratov Points 503

J'ai juste décoché "inclure le bitcode" et le téléchargement a commencé.

3voto

Dimuth Lasantha Points 389

Pour Carthage

  1. Ouvrez vos bibliothèques dans votre dossier de projet (Carthage->Checkouts->[nom de la librairie])
  2. Ensuite, ouvrez chaque lib dans Xcode
  3. Définir Enable Bitcode - No dans les paramètres de construction. enter image description here
  4. Faites-le pour chaque lib dans votre liste
  5. Construire Carthage carthage build --platform xxx

Vous pouvez ensuite archiver et soumettre à l'Appstore avec succès.

1voto

Swapnil Points 11

Nous avons obtenu la même erreur "Xcode - Error ITMS-90635 - Invalid Mach-O in bundle - submitting to App store" depuis vendredi dernier (3 juin 2016) nous avons utilisé les 2 étapes mentionnées ci-dessous pour y parvenir.

Étape 1 :
Ajout d'un code au fichier pod pour marquer 'ENABLE_BITCODE' = 'NO' en gousses

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

Étape 2 :
Marqué 'ENABLE_BITCODE' = 'NO' en dosettes pour le projet

Note : Essayé avec le marquage 'ENABLE_BITCODE' = 'YES' dans les pods et dans mon projet aussi, mais comme nous utilisons le framework twillio pour appeler qui a un flag -read_only_relocs qui ne permet pas la compilation avec 'ENABLE_BITCODE' = 'YES' . Donc, si votre application n'utilise aucun de ces frameworks, avec -read_only_relocs vous pouvez alors procéder à la réalisation 'ENABLE_BITCODE' = 'YES' car cela sera bon pour votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X