web-dev-qa-db-fra.com

Xcode - Erreur ITMS-90635 - Mach-O non valide dans le paquet - envoi sur App Store

Je viens de recevoir cette erreur lors de la soumission d'une application sur l'App Store.

 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 bitcode (ou quelque chose comme ça) ... 

71
Nuno Gonçalves

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

J'avais une cible (avec ENABLE_BITCODE définie sur NO), en utilisant plusieurs modules dont ENABLE_BITCODE était défini sur YES. Donc, tout ce que j'avais à faire, c'est de définir ENABLE_BITCODE sur OUI dans la cible de mon projet. Mais je suppose que vous avez le choix. Vous pouvez également définir ENABLE_BITCODE sur NO dans toutes les bibliothèques que vous utilisez.

65
Guillaume L.

Le correctif le plus simple et le plus courant:

Vous pouvez décocher "Inclure le bitcode" lors de la soumission de l'application via Xcode .  uncheck the box

Si vous utilisez xcodebuild, vous pouvez utiliser pass an exportOptionsPlist avec la valeur uploadBitcode définie sur false. Dans mon cas, nous utilisons xctool pour créer l'application et n'avons pas la capacité de transmettre une exportOptionsPlist, nous avons donc dû supprimer le bitcode de tous nos frameworks.


Si quelqu'un utilise des cocoapodes et veut désactiver le bitcode pour leurs 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 ajouter un peu plus de précisions sur ce qui se passe avec ce problème:

Il semble qu'Apple ait commencé à faire respecter cela hier. Si votre code binaire principal a le bitcode désactivé, mais que vous incluez une bibliothèque statique ou un framework avec Bitcode activé, la validation échouera. Cela va aussi dans l'autre sens: si votre binaire principal a le bitcode activé, mais que vous incluez une bibliothèque/framework avec du bitcode désactivé, la validation échouera.

J'avais quelques dépendances de Google Maps et d'Amazon qui rendaient non trivial de tout changer pour activer le bitcode, alors je l'ai tout simplement désactivé et j'ai 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 cette commande

$ 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 pense pas que si le code binaire principal a désactivé le bitcode, tous les fichiers binaires inclus devraient également en avoir besoin. Le bitcode est juste un code IR que Apple peut utiliser pour l’amincissement d’applications - pourquoi ne le supprime-t-il pas simplement des autres fichiers binaires (ce qui, je suppose, est ce qu’ils avaient fait auparavant)? Cela n'a pas beaucoup de sens pour moi.

Sujet Apple https://forums.developer.Apple.com/thread/48071

64
Mike Sprague

Je viens de décocher "inclure le bitcode" et le téléchargement a commencé

5
Yestay Muratov

Pour Carthage 

  1. Ouvrez vos bibliothèques dans votre dossier de projet (Carthage-> Checkouts -> [nom de la bibliothèque])
  2. Puis ouvrez chaque lib dans Xcode
  3. Définir Activer Bitcode - Non 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

Ensuite, vous pouvez archiver et soumettre à l'Appstore avec succès 

3
Dimuth Lasantha

Nous obtenions la même erreur "Xcode - Erreur ITMS-90635 - Mach-O non valide dans le paquet - soumission à l'App Store" du vendredi 3 juin 2016 .. a utilisé les deux étapes mentionnées ci-dessous pour y parvenir.

Étape 1:
Ajout du code au fichier pod pour marquer 'ENABLE_BITCODE' = 'NO' dans les pods 

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' dans les modules du projet

Remarque: J'ai essayé de marquer 'ENABLE_BITCODE' = 'YES' dans les pods et dans mon projet aussi, mais nous utilisons twillio Framework pour les appels qui ont un indicateur -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 continuer à créer 'ENABLE_BITCODE' = 'YES' car ce sera bon pour votre application.

1
Swapnil

Pour ceux qui rencontrent une erreur de construction après avoir défini "Activer le code binaire" sur Oui . Je dois mettre à jour toute la bibliothèque.Mais la partie la plus facile est d’utiliser Cocoapods.So, mettez à jour tous vos projets de pod: ) ou tous

Définissez ensuite Enable BitCode sur "No" avant d’archiver.

Puis Archive >> Upload >> Il passera cette erreur.

À votre santé.

0
Thiha Aung

J'ai eu le même problème avec le projet "ENABLE_BITCODE = YES" et les dépendances "ENABLE_BITCODE = YES" sur mon CI avec Xcode 7.3 . La solution mettait à jour Xcode vers la dernière version disponible (7.3.1)

0
iuriimoz