J'essaie donc d'utiliser l'API Shopify. Lorsque j'archive l'application et la valide, il n'y a aucun problème, mais lorsque je la soumets à l'App Store, cela me pose les problèmes suivants.
- ERREUR ITMS-90087: "Architecture non prise en charge. Votre exécutable contient une architecture non prise en charge '[x86_64, i386]'."
- ERREUR ITMS-90209: "Alignement de segment non valide. Le binaire d'application sur SJAPP.app/Frameworks/Buy.framework/Buy n'a pas un alignement de segment approprié. Essayez de reconstruire l'application avec la dernière version de Xcode." (J'utilise déjà la dernière version.)
- ERREUR ITMS-90125: "Le binaire n'est pas valide. Les informations de cryptage dans la commande de chargement LC_ENCRYPTION_INFO sont manquantes ou non valides, ou le binaire est déjà crypté. Ce binaire ne semble pas avoir été construit avec l'éditeur de liens d'Apple."
- AVERTISSEMENT ITMS-90080: "La charge utile exécutable /..../ Buy.framework n'est pas un exécutable indépendant de la position. Veuillez vous assurer que vos paramètres de construction sont configurés pour créer des exécutables PIE."
Réponses:
Le problème est que le framework Buy contient une version pour le simulateur (x86_64) et les périphériques réels (ARM).
Bien sûr, vous n'êtes pas autorisé à soumettre à l'App Store un binaire pour une architecture non prise en charge, donc la solution consiste à supprimer "manuellement" les architectures inutiles du binaire final, avant de le soumettre.
Daniel Kennett a trouvé une bonne solution et fournit ce script à ajouter à la phase de construction:
Je l'ai utilisé et cela a parfaitement fonctionné.
EDIT: assurez-vous de regarder le script modifié publié par Varrry, car celui-ci a quelques problèmes mineurs.
la source
La réponse donnée par pAkY88 fonctionne, mais j'ai rencontré le même problème que Mario A Guzman dans https://stackoverflow.com/a/35240555/5272316 : une fois que nous avons coupé les architectures inutilisées, nous ne pouvons plus exécuter le script car il essaie de supprimer pas de tranches existantes, car xcode ne réintègre pas le binaire à chaque fois. L'idée était - il suffit de supprimer les tranches i386 et x86_64 lors de la construction pour l'archivage, j'ai donc modifié le script:
Ce script supprime simplement les tranches i386 et x86_64 du gros binaire (si elles existent) s'il ne fonctionne pas pour le simulateur (cela signifie que le dossier de destination n'est pas comme "Debug-iphonesimulator").
Désolé, je ne connais pas les scripts shell, donc peut-être que quelqu'un pourrait l'écrire de manière plus élégante. Mais ça marche)
la source
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
J'ajoute ce script mais cela ne fonctionne pas et j'ai encore des erreurs de téléchargement sur iTunesConnect. Comment exécuter ce script?Si vous utilisez Carthage, vous pouvez rencontrer ce problème car le projet est:
carthage copy-frameworks
phase de construction.Cette action filtre les frameworks en une liste d'architectures valides (code) .
Configuration de la phase de construction des frameworks de copie
Depuis le bâtiment Carthage pour les étapes iOS :
la source
$(SRCROOT)/Carthage/Build/iOS/Marshal.framework
le travailJ'ai résolu l'erreur ITMS-90080 en supprimant un cadre (l'excellent SVProgressHUD) de la section Embedded Binaries (cible Xcode -> onglet Général).
la source
Si vous utilisez
Carthage
Assurez - vous que votreEmbed Frameworks
Build Step
est avant laCarthage
copy-frameworks
Dans certains cas inhabituels (exemple: framework Lottie-iOS):
vous l'aurez simplement dans "Link Library" comme d'habitude.
Cependant, vous devez également l'ajouter explicitement dans "Embed Frameworks" (même si cela semble inutile, car cela fonctionne parfaitement lorsque vous ne l'avez que dans "Embed Frameworks"),
et le mettre dans des cadres de copie
et assurez-vous que les cadres de copie se trouvent après "Intégrer les cadres"
la source
Supprimez [x86_64, i386] du cadre en utilisant l'étape ci-dessous. [x86_64, i386] est utilisé pour le simulateur.
Ouvert
Terminal
ouvrez le chemin de glisser de votre projet de framework respectif vers Terminal
exemple :
cd /Users/MAC/Desktop/MyProject/Alamofire.framework
définissez votre nom Framework dans la commande ci-dessous et exécutez
lipo -remove i386 Alamofire -o Alamofire && lipo -remove x86_64 Alamofire -o Alamofire
la source
Je vais ajouter mes 2 cents ici (de manière moins effrayante :-). J'ai rencontré un certain nombre de bibliothèques grasses de fournisseurs qui (pour une raison quelconque) ne fonctionnent pas de la manière habituelle en les ajoutant au
Frameworks
répertoire tel que documenté par Apple. La seule façon dont nous avons pu les faire fonctionner est en tirant vers la.framekwork
droite dans le répertoire du projet et en liant leEmbedded Frameworks
etLink Binary with Libraries
manuellement dans les paramètres de construction. Cela semble avoir fonctionné sans aucun problème, cependant, comme avec n'importe quelle bibliothèque de graisse, ils sont livrés avec les architectures de simulateur étrangèresi386
etx86_64
avec lesarm
architectures.Un moyen rapide de vérifier les architectures de la bibliothèque de graisses est
Qui devrait cracher une sortie quelque chose comme ça
Cela confirme que vous aurez besoin de "couper la graisse" (à savoir
i386
&x86_64
) de votre cadre avant le téléchargement iTunesConnect Archival, ce qui ne permet pas ces architectures (car elles ne sont pas prises en charge pour iOS).Maintenant, toutes les réponses (ou au moins certaines des réponses) ici fournissent ces merveilleux scripts d'exécution qui, j'en suis sûr, fonctionnent très bien, mais seulement si votre Framework réside dans le
Frameworks
répertoire. Maintenant, à moins que vous ne soyez un drogué de script shell, ces scripts sans modifications ne fonctionneront pas pour le scénario que j'explique ci-dessus. Cependant, il existe un moyen très simple de se débarrasser des architecturesi386
&x86_64
du framework.Ouvrez le terminal dans le répertoire de votre projet.
Changez le répertoire directement dans le
.framekwork
, commecd YourProjectDir/YourProject/YourLibrary.framework
Exécutez la série de commandes comme indiqué ci-dessous -
Quelques points à noter ici -
lipo -remove
doivent être effectués une fois pour chaque architecture à supprimer.lipo
ne modifie pas le fichier d'entrée, il ne produit qu'un fichier, vous devez donc exécuterlipo -remove
une fois pourx86_64
eti386
. Les commandes ci-dessus le font simplement en renommant d'abord l'exécutable, puis en supprimant éventuellement les arches souhaitées, puis en nettoyant les fichiers restants. Et c'est tout, vous devriez maintenant voir une coche verte dans le téléchargement d'archivage Application Loader vers iTunesConnect.Choses à garder à l'esprit : Les étapes ci-dessus ne doivent être effectuées que pendant la construction de la production, car
.framework
elles seront supprimées des architectures du simulateur, les constructions sur les simulateurs cesseront de fonctionner (ce qui est prévu). Dans un environnement de développement, il ne devrait pas être nécessaire de supprimer les architectures du.framework
fichier, car vous voulez pouvoir tester à la fois sur le simulateur et sur un périphérique physique. Si votre bibliothèque de matières grasses réside dans leFrameworks
dossier du projet, veuillez consulter la réponse acceptée.la source
J'ai eu le même problème même après avoir ajouté le script et mis à jour le framework plusieurs fois.
Assurez-vous que dans xCode le script est ajouté à la fin, après l'incorporation. Je pense que j'ai accidentellement déplacé le script avant le cadre intégré.
Remarque: j'ai xCode 9.1
la source
Il vous suffit de supprimer le cadre des fichiers binaires intégrés et de simplement l'ajouter aux cadres et bibliothèques liés.
Référez-vous à la capture d'écran ci-dessous;
la source
Merci à toutes les réponses ci-dessus. Voici un script fonctionnant avec swift 4.2 et 5 . Remplacez la chaîne Your_Framework_Name par le nom d'origine de votre Framework.
la source
Ce problème a été résolu pour moi en modifiant légèrement le script d'exécution à partir de la réponse de pAky88 et en l'exécutant après l'intégration des frameworks. Veillez également à décocher la case "Exécuter le script uniquement lors de l'installation".
la source
J'ai supprimé les architectures i386 et x64_86 des paramètres de construction - Architectures valides - Version, et tout a bien fonctionné.
Maintenant, le seul problème serait que vous ne pouvez pas exécuter une version RELEASE à des fins de test sur un SIMULATEUR . Mais aussi facilement que vous avez supprimé les arches, vous pouvez les rajouter si vous le souhaitez.
la source
la solution simple qui a fonctionné pour moi était
terminé!
la source
Cette erreur (ITMS-90240) peut également être provoquée par une bibliothèque statique (.a). voici un script pour dépouiller les architectures en excès. Dans Xcode, ajoutez ceci à Target> BuildPhases> Cliquez sur le + et sélectionnez Run Script. Collez-le ensuite dans la boîte de script.
Le script recherche les fichiers .a, vérifie s'il contient une architecture incriminée, puis s'il crée un nouveau fichier .a sans cette architecture.
Pour macOS:
Pour iOS:
la source
J'avais le même problème. Même cela ne fonctionnait pas après l'ajout du script d'exécution donné. C'était un problème lié à Xcode. J'utilisais la version 9.0 de Xcode mais la dernière version était 9.2.
J'ai donc installé le dernier Xcode (9.2) et cela a fonctionné.
la source
Votre framework contient à la fois
ARM
et dux86
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 supprimer le code inactif du binaire.1.Sélectionnez votre cible dans le Navigateur du projet et cliquez sur Générer des phases en haut de l'éditeur de projet.
2.Dans le menu Éditeur, sélectionnez Ajouter une phase de construction, puis Ajouter une phase de génération de script d'exécution (ou cliquez sur le bouton + dans le coin supérieur gauche de l'éditeur de phases de construction).
3.Agrandir le triangle de divulgation à côté de la nouvelle phase de génération de script d'exécution qui vient d'être ajoutée. Dans la zone de l'éditeur de script, collez ce qui suit: bash
la source
Voici un script que j'ai utilisé pour supprimer spécifiquement l'architecture d'un seul framework du fichier exécutable.
Ajoutez 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"
la source