Soumettre à l'App Store questions: non prise en charge de l'Architecture x86
Donc je suis en train d'utiliser le shopify API. Quand je l'archive de l'application et de les valider puis il y a pas de problèmes mais quand je soumettre à l'app store, puis il me donne les questions suivantes.
- ERREUR IMT-90087: "non prise en charge de l'Architecture. Votre exécutable contient pas pris en charge architecture " [x86_64, i386]'."
- ERREUR IMT-90209: "Invalide le segment de l'Alignement. L'Application Binaires à l'SJAPP.app/Frameworks/Acheter.cadre/Acheter n'avons pas de bon segment de l'alignement. Essayez de recompiler l'application avec le dernier xcode version." (Je suis déjà à l'aide de la dernière version).
- ERREUR IMT-90125: "Le Binaire n'est pas valide. Le chiffrement de l'info dans les LC_ENCRYPTION_INFO commande de chargement est manquant ou invalide, ou le binaire est déjà chiffré. Ce binaire ne semble pas avoir été construit avec Apple éditeur de liens".
- AVERTISSEMENT IMT-90080: "Le fichier Exécutable de Charge/..../Acheter.le cadre n'est pas Indépendant de la Position de l'Exécutable. Veuillez vous assurer que ur construire paramètres sont configurés pour créer TARTE exécutables."
- Le premier message sonne comme si elle est un simulateur de construire.
- Lorsque je crée une archive pour la présentation je choisir les appareils iOS en les options de périphériques, puis créer une archive, si c'est ce que u demandent
- Je suis d'accord avec @PhillipMills. Concentrez-vous sur votre première erreur. Pourquoi avez-vous un x86_64 binaire dans votre application iOS? Soit vous avez fait quelque chose de bizarre avec vos paramètres de construction... ou vous avez téléchargé un Simulateur de construire.
- Je n'ai pas pu. J'ai posté dans le Shopify API forum et je suis en attente d'une réponse. Sera certainement quelque chose après si je tombe sur un
- J'ai eu ce comportement lorsque j'ai téléchargé à l'aide de l'Application Loader 3.5
Vous devez vous connecter pour publier un commentaire.
Le problème est que le Buy-cadre contient une version à la fois le simulateur (x86_64) et les périphériques (BRAS).
Bien sûr, vous n'êtes pas autorisé à soumettre à l'App Store, un binaire pour une non prise en charge de l'architecture, de sorte que la solution est "manuellement" supprimer les inutiles, les architectures de la finale binaire, avant de le soumettre.
Daniel Kennett est venu avec une solution sympa et donne ce script à ajouter à la phase de construction:
Je l'ai utilisé et il a parfaitement fonctionné.
EDIT: assurez-vous que vous regardez le script modifié posté par Varrry, que celui-ci a quelques problèmes mineurs.
ARCHS
variable ne comprend pas la montre architectures et de départ dans Xcode 10, regarder des cadres sont en gras. Donc ce script se chargera de les éliminer complètement.Réponse donné par pAkY88 fonctionne, mais j'ai été confrontée au même problème que Mario Une Guzman dans https://stackoverflow.com/a/35240555/5272316: une fois que nous avons coupé inutilisés des architectures que nous ne pouvons pas exécuter le script plus depuis il essaie de supprimer pas les tranches existantes, parce que xcode n'est pas ré-intégrer des binaires à chaque fois.
L'idée était - il suffit de retirer les architectures i386 et x86_64 tranches lors de la construction de l'archive, j'ai donc modifié le script:
Ce script supprime simplement les architectures i386 et x86_64 des tranches de gros binaire (si elles existent) si en cours d'exécution pas de simulateur (cela signifie que le dossier de destination n'est pas comme "Debug-iphonesimulator").
Désolé, je ne suis pas familier avec les scripts shell, donc peut-être que quelqu'un pourrait l'écrire de façon plus élégante. Mais il fonctionne)
case "${TARGET_BUILD_DIR}" in *"iphonesimulator") echo "Skip simulator target"; continue ;; esac
et cela a fonctionné comme un charme.TARGET -> Build Phases -> [CP] Embedded Pods Frameworks
mais il ne fonctionne pas et j'ai encore de les télécharger pour les iTunesConnect erreurs. L'exécution de ce script?Si vous utilisez Carthage ensuite, vous pouvez rencontrer ce problème, car le projet est:
carthage copy-frameworks
phase de construction.Cette action filtres cadres à une liste de bonnes architectures (code).
La configuration de la copie-cadres phase de construction
De la Carthage bâtiment pour iOS étapes:
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
a fait le travailJ'ai résolu l'erreur IMT-90080 par la suppression d'un cadre (l'excellent SVProgressHUD) de l'Embedded Binaires section (Xcode cible -> onglet Général).
Si vous utilisez
Carthage
assurez-vous que votreEmbed Frameworks
Build Step
est avant leCarthage
copy-frameworks
Dans certains cas inhabituels (par exemple: Lottie-iOS-cadre):
vous l'aurez tout simplement dans la "Bibliothèque de liens", comme d'habitude.
Cependant vous avez à aussi explicitement l'ajouter en "Embed Cadres" (même si cela semble inutile, puisqu'il fonctionne parfaitement lorsque vous avez seulement en "Embed Cadres"),
et le mettre dans la copie des cadres
et assurer copier-cadres est après "Embed Cadres"
Supprimer [x86_64, i386] du cadre à l'aide de l'étape ci-dessous. [x86_64, i386] est utilisé pour le simulateur.
Ouvrir
Terminal
ouvrez votre projet, faites glisser le chemin de cadre à la Borne
exemple :
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
ensemble de votre Cadre nom dans la commande ci-dessous et exécutez
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
Je vais ajouter mes 2 cents ici (de moins en moins effrayant moyen :-). J'ai rencontré un certain nombre de graisse bibliothèques de Fournisseurs (pour certaines raisons) ne fonctionnent pas de la manière habituelle, en ajoutant à la
Frameworks
répertoire documenté par Apple. La seule manière que nous avons été en mesure de faire leur travail est en tirant la.framekwork
droit dans le répertoire du projet et en reliant lesEmbedded Frameworks
etLink Binary with Libraries
manuellement dans les Paramètres de construction. Cela semble avoir fonctionné sans aucun problème, cependant, comme avec de la graisse de la bibliothèque, ils viennent avec tout ce qui est superflu Simulateur Architecturesi386
etx86_64
avec learm
architectures.Un moyen rapide de vérifier les architectures en la matière grasse de la bibliothèque est
Qui doit cracher une sortie quelque chose comme cela
Ce qui confirme que vous aurez besoin de "couper dans le gras" (à savoir
i386
&x86_64
) à partir de votre cadre avant iTunesConnect Archives de téléchargement, qui ne permet pas à ces architectures (car ils sont pas prises en charge pour iOS).Maintenant, toutes les réponses (ou au moins certaines des réponses) ici offrir ces merveilleux Exécuter des Scripts que je suis sûr que fonctionne vraiment bien, mais seulement si votre Cadre réside dans le
Frameworks
répertoire. Maintenant, sauf si vous êtes un script shell junkie, ces scripts sans modifications, de ne pas travailler pour le scénario je l'explique ci-dessus. Cependant, il existe un moyen très simple de se débarrasser de lai386
&x86_64
architectures de le cadre.Changer de répertoire directement dans le
.framekwork
, commecd YourProjectDir/YourProject/YourLibrary.framework
Exécuter la série de commandes comme indiqué ci-dessous -
$ mv YourLibrary YourLibrary_all_archs
$ lipo -remove x86_64 YourLibrary_all_archs -o YourLibrary_some_archs
$ lipo -remove i386 YourLibrary_some_archs -o YourLibrary
$ rm YourLibrary_all_archs YourLibrary_some_archs
Quelques choses à noter ici -
lipo -remove
doit être effectuée une fois pour chaque architecture à supprimer.lipo
ne modifie pas le fichier d'entrée, il ne produit un fichier de sorte que vous avez à courirlipo -remove
une fois pourx86_64
eti386
. Les commandes ci-dessus est tout simplement le faire en faisant d'abord renommer le fichier exécutable et puis finalement retrait de l'souhaité archs, puis nettoyage de la gauche sur les fichiers. Et voilà, vous devriez maintenant voir une coche verte dans le Chargeur de l'Application d'Archivage de les télécharger pour les iTunesConnect.Choses à garder à l'esprit : Les étapes ci-dessus ne doit être fait lors de la production de construction, depuis la
.framework
sera dépouillé de l'simulateur architectures, s'appuie sur des simulateurs de cesser de travailler (ce qui est prévu). Dans un environnement de développement, il devrait y avoir aucun besoin de dépouiller les architectures hors de la.framework
fichier que vous voulez être en mesure de tester sur les deux Simulateur et un périphérique physique. Si votre graisse de la bibliothèque réside dans leFrameworks
dossier dans le projet alors s'il vous plaît regardez la accepté de répondre.J'ai eu le même problème, même après l'ajout du script et la mise à jour du cadre un peu de temps.
Assurez-vous que dans xCode le script est ajouté à la fin, après l'intégrer. Je pense que j'ai accidentellement déplacé le script avant de l'embedded cadre.
Note: j'ai xCode 9.1
Juste que vous avez à enlever le cadre d'Incorporés Binaires et il suffit de l'ajouter à la Cadres et les Bibliothèques.
Consultez ci-dessous la capture d'écran;
Ce problème a été résolu pour moi en modifiant légèrement l'exécution d'un script à partir de pAky88 de réponse et d'exécution après l'incorporation des cadres. Aussi assurez-vous de décocher la case "Exécuter le Script uniquement lors de l'installation".
Merci pour toutes les réponses ci-dessus. Voici le script de travail avec swift 4.2 et 5
J'ai enlevé les architectures i386 & x64_86 de Paramètres de construction - Valide les Architectures de la Libération, et tout a très bien fonctionné.
Maintenant, le seul problème serait que vous ne pouvez pas exécuter un LIBÉRATION construire des fins de test sur un SIMULATEUR. Mais, aussi facilement que vous avez supprimé les archs, vous pouvez rajouter si vous le souhaitez.
la solution la plus simple qui a fonctionné pour moi a été
fait!
Cette erreur (IMT-90240) peut aussi être causée par un statique (.a) de la bibliothèque. heres un script à la bande de l'excès d'architectures. Dans Xcode ajouter à Target > BuildPhases > Cliquez sur le + et sélectionnez Exécuter le Script. Puis collez-le dans la zone de script.
Le script de recherche .un fichiers, des vérifications pour voir si elle contient une récidive de l'architecture, puis, si elle fait un nouveau .un fichier sans que l'architecture.
Pour macOS:
Pour iOS :
J'ai eu même problème.
Même s'il n'a pas de travail après l'ajout de la donnée Exécuter le Script.
Il a été Xcode question connexe.
J'ai été en utilisant Xcode version 9.0 mais la dernière version a été 9.2.
J'ai donc installé la dernière Xcode (9.2) et cela a fonctionné.
Votre cadre contient à la fois
ARM
etx86
code, ce qui vous permet de l'utiliser sur un appareil ou dans le simulateur. Si vous avez l'intention de soumettre votre application à l'App Store, exécutez le script suivant pour dépouiller les inactifs code de la binaire.1.Sélectionnez votre cible dans l'explorateur de Projets, puis cliquez sur créer Phases en haut de l'éditeur de projet.
2.À partir de l'Éditeur de menu, sélectionnez Ajouter une Phase de construction, puis Ajouter Exécuter le Script Phase de construction (ou cliquez sur le bouton + dans le coin supérieur gauche de l'Phases de construction de l'éditeur).
3.Développez le triangle d'affichage en regard de la nouvelle Exécuter le Script phase de construction qui vient d'être ajoutée. Dans la zone de script editor, collez le texte suivant:
bash
Voici un script que j'ai utilisée pour supprimer un cadre de l'architecture à partir du fichier exécutable.
Ajouter ce script à vos projets "Build Phases de votre projet cible. Assurez-vous de cocher la case "Exécuter le script uniquement lors de l'installation de"