Erreur de construction - architecture requise i386 manquante dans le fichier

105

J'obtiens cette erreur lors de la création de mon application iPhone:

ld: avertissement: dans /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, l'architecture requise i386 manquante dans le fichier

Il en va de même pour tous les frameworks de mon application. C'est très étrange car cela ne se produisait pas plus tôt.

Gabe Shahbazian
la source
Cela s'est-il produit après l'installation de Snow Leopard et du nouveau SDK iPhone (Xcode 3.2)?
avocat
8
Ma réponse résout le problème. Vérifiez s'il vous plaît.
Jordanie
9
Une autre possibilité qui n'est pas abordée dans les réponses est que vous obtiendrez cette erreur si vous avez ajouté une référence à un framework non universel (c'est-à-dire que vous avez ajouté un framework armv6 / armv7 et ensuite essayé de faire une construction de simulateur). Ceci est principalement un problème si vous avez créé vos propres frameworks personnalisés.
2011
@aroth a également raison, veuillez vérifier cette question
ArkReversed

Réponses:

131

Cela se produit lorsque vous ajoutez un framework à votre projet et copiez involontairement le framework dans votre répertoire de projet.

Le correctif consiste à vérifier votre répertoire de projet (où vous stockez votre projet sur le disque) pour tous les fichiers iphone SDK * .Framework et à les supprimer.

Le projet se construira bien par la suite.

Jordan
la source
4
de plus, testez-le sur un appareil iOS au lieu de Simulator.
Raptor
Si vous avez un autre cadre, la modification du fichier de projet semble également supprimer les références à cela, cela a fonctionné et a été plus facile, merci Jordan
texian
Ça ne marche pas pour moi. Aucun fichier .framework dans mon répertoire de projet. Fwiw, j'ai fait un nettoyage puis une construction et ce problème a commencé. Le nettoyage a dû en quelque sorte casser des choses.
Alyoshak
85

J'ai eu le même problème et la solution s'est avérée être une solution facile. Sauvegardez puis ouvrez project.pbxproj (situé à l'intérieur de votre bundle de fichiers de projet) dans TextMate ou TextEdit et recherchez la section intitulée "/ * Begin XCBuildConfiguration section * /". Recherchez une clé nommée FRAMEWORK_SEARCH_PATHS et supprimez-la et son contenu (une fois par configuration de construction, je l'ai donc supprimée à deux endroits). Voici un exemple de ce que j'ai supprimé:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Mon projet est maintenant conçu pour l'appareil iPhone et l'iPhoneSimulator.

Sean Roehnelt
la source
2
Je peux vérifier que cela fonctionne comme décrit. Il semble que Xcode puisse facilement perdre le contact avec ses métadonnées lors du déplacement de projets Xcode entre différents ordinateurs; dans ce cas avec l'un ayant 3.0 et Leopard, et l'autre 3.1 et Snow Leopard installés. Les métadonnées FRAMEWORK_SEARCH_PATHS sont vides dans les paramètres de construction alors que le project.pbxproj actuel contient des éléments.
avocade
1
FRAMEWORK_SEARCH_PATHS accepté était également affiché comme vide dans les paramètres de compilation pour moi également. Cependant, l'édition manuelle du fichier project.pbxproj comme décrit a résolu le problème.
Alasdair Allan
11
Cela n'a pas fonctionné pour moi. CEPENDANT, vous me conduisez au bon endroit pour regarder. Mon .pbxproj n'avait pas la clé FRAMEWORK_SEARCH_PATHS, mais une clé nommée LIBRARY_SEARCH_PATHS.
rébellion
Je seconde @rebellion. Peut-être que les nouvelles versions de XCode ont changé le nom de la clé.
Moshe
Merci, j'avais aussi une clé LIBRARY_SEARCH_PATHS errante dans mon fichier pbxproj. La clé est apparue en gras dans les paramètres du projet dans Xcode 3, mais sans valeur. Cela m'a amené à croire qu'il y avait quelque chose qui clochait. J'ai ouvert le projet dans Xcode 4 Preview 5 une fois, après quoi cela s'est produit.
mvexel du
43

Ce qui s'est passé ici, c'est que Xcode a mystérieusement ajouté une entrée "Framework Search Paths" qui pointe vers un SDK de périphérique iPhone particulier. Par exemple, le mien a été récemment défini sur:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Cela conduit le compilateur à trouver des frameworks de l'architecture incorrecte. La suppression de toutes les valeurs sous la clé «Framework Search Paths» dans les paramètres de construction de votre cible résoudra le problème.

John Cromartie
la source
c'était le problème dans mon cas. il avait ajouté un tas de répertoires de recherche chaque fois que j'ajoute une nouvelle bibliothèque. même si je supprime la référence, l'entrée du répertoire de recherche était là, ce qui avait causé le problème.
darshansonde
Les "chemins de recherche du cadre" sont déjà vides dans mon cas. L'erreur exacte que j'obtiens est ld: construction pour iOS Simulator, mais la liaison avec dylib construite pour le fichier MacOSX '/usr/lib/libSystem.B.dylib' pour l'architecture i386 clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 ( utilisez -v pour voir l'invocation) J'utilise le SDK 7.0 sur Mavericks.
Ans
J'ai eu la même erreur, j'ai supprimé les valeurs du chemin de recherche du cadre sous Paramètres de construction et maintenant il se compile avec succès.
Nirav le
10

Je voulais juste mentionner que dans XCode si vous allez dans "Modifier les paramètres du projet" et trouvez "Chemins de recherche" Il y a un champ pour "Chemins de recherche du cadre". La mise à jour devrait résoudre le problème, sans avoir à pirater le fichier du projet!

À votre santé!

Jesse


la source
J'ai le même problème qui me rend complètement fou. Il semble que vous connaissez la solution, mais je ne trouve pas le fichier "project.pbxproj" et je ne trouve pas où se trouve "Modifier les paramètres du projet".
saman01
2
Dans XCode 4.2.1, j'ai trouvé ceci comme suit: cliquez sur le nom du projet dans le navigateur de projet. Dans l'écran des propriétés qui apparaît, sélectionnez l'onglet «Paramètres de construction». Les chemins de recherche se trouvent dans cet écran. Les supprimer a fonctionné pour moi.
dsteele
8

Vérifiez que vous n'avez pas copié le framework dans votre projet lorsque vous l'avez ajouté. Si vous l'avez copié, il ne peut pas trouver les chemins d'origine. Pour résoudre ce problème. Supprimez le framework AVFoundation de votre dossier frameworks dans votre projet, puis ajoutez-le à nouveau, mais cette fois, assurez-vous que vous n'avez pas coché la copie.

Cela l'a corrigé pour moi!

Jrman52
la source
8

Je l'ai corrigé d'une manière différente.La raison pour laquelle j'obtenais cette erreur était que j'ai ajouté security.framework deux fois dans mon projet.Je n'ai pas pu voir le cadre de sécurité dans xcode, j'ai ouvert le projet dans finder et j'ai trouvé ce cadre qui J'ai supprimé et le problème est résolu.

Suraj K Thomas
la source
7

Si votre application est destinée à s'exécuter sur l'appareil, assurez-vous que vous n'essayez pas de l'exécuter sur le simulateur. Cela peut sembler évident, mais vérifiez quand même.

Eric Brotto
la source
5

Bien qu'il soit possible que quelque chose ait été supprimé, d'après mon expérience, quelque chose se fausse dans le fichier du projet. Je n'ai pas encore défini ce qu'est ce «quelque chose». J'ai eu des problèmes similaires lorsque l'installation du SDK est très bien. Il existe plusieurs options.

Tout d'abord, ajoutez tous vos fichiers à un nouveau projet. Cela semble fonctionner généralement. Une sorte de douleur, cependant.

Deuxièmement, vous pouvez cliquer avec le bouton droit sur le projet dans XCode / Get Info / Build / Library Search Paths. Ajoutez de nouveaux chemins similaires à /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Ajoutez les versions appropriées de cette chaîne pour chaque version (2.2.1, etc.) et plate-forme (simulateur ou iPhoneOS). Effectuez une action similaire pour les chemins de recherche de framework si les frameworks sont votre problème.

Troisièmement, qui est plus de travail mais plus fiable, est d'ouvrir project.pbxproj à partir de MyProject.xcodeproj (Textmate est bon pour cela). Recherchez "/ * Begin XCBuildConfiguration section * /", puis "LIBRARY_SEARCH_PATHS" et "FRAMEWORK_SEARCH_PATHS". Ajoutez ou modifiez les chemins selon vos besoins et enregistrez le fichier.

Dans tous les cas, une douleur dans les fesses, et j'aimerais sûrement en cerner la cause parce que cela s'est produit plusieurs fois. Le projet se construit bien, puis juste en place et refuse de le faire avec ce qui semble être peu de raison.

mikestew
la source
Je vais juste commencer un nouveau projet. Oh puits.
Gabe Shahbazian
Vous pouvez corriger les paramètres de construction "Chemins de recherche Frameworks" à partir du panneau d'informations d'une cible.
John Cromartie
J'ai eu l'erreur mais je n'avais pas les problèmes de framework décrits ci-dessus. Curieusement, sur un ordinateur, le projet pouvait être extrait de SVN et construit correctement, tandis que sur deux autres, cela provoquait soudainement cette erreur sur chaque build. La seule solution (et plutôt simple) - après avoir essayé toutes sortes d'autres solutions - était de créer un nouveau projet vierge et d'y déplacer tous les fichiers.
mmattke
Cette méthode a fonctionné pour moi. J'avais un ensemble de projets de travail qui a soudainement cessé de construire pour exactement une configuration un jour. Sans raison. J'ai utilisé la technique textmate ci-dessus et j'ai remarqué que "$ (SDKROOT) / Developer / Library / Frameworks" était absent de cette configuration. Je ne sais pas pourquoi, et je n'ai pas pu voir cela en utilisant Xcode.
Rob
4

"Modifier les paramètres du projet" et trouver "Chemins de recherche" Il y a un champ pour "Chemins de recherche du cadre". supprimer tout !!

Litebeam
la source
4

Cela m'est arrivé ici aussi. Grâce à un excellent partenaire, nous avons trouvé la réponse. Votre Xcode peut pointer vers le simulateur ..changez-le plutôt vers un appareil IOS .. construit en douceur après ....

j2emanue
la source
1

Exécutez la commande de fichier sur le framework à partir du terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Vous devriez recevoir un message vous indiquant avec quelles architectures le binaire UIKit est compatible. Si vous ne voyez pas «i386» dans la liste, c'est que vous avez réussi à supprimer la version i386 d'UIKit, ce qui signifie que vous ne pouvez pas construire pour le simulateur. Pour résoudre ce problème, vous devrez réinstaller le SDK.

Si vous obtenez une autre erreur, j'espère que cela vous aidera à déterminer quel est le problème réel.

Mark Bessey
la source
Réinstallé le sdk et j'obtiens toujours la même erreur de construction exacte.
Gabe Shahbazian le
J'ai ce problème. déjà vérifié le cadre et le chemin de la bibliothèque et ils sont propres. le fichier de commande /Developer/Platforms.../UIKit.framework/UIKit dit seulement "Bras de bibliothèque partagé lié dynamiquement Mach-O". est-il vraiment nécessaire d'installer tout le SDK?, ou puis-je copier la version complète du framework?
Alexander Fradiani
Bon à apprendre! pour mon cas, armv7 et i386 sont là, mais pas d'armv6!
Nianliang
1

Je veux juste vous faire savoir que dans mon cas, j'avais le même problème, j'ai réalisé que j'avais un ancien dossier Xcode appelé Xcode3.1.3 Je le renomme simplement parce que c'était une version plus ancienne et cela a fait la magie pour moi.

Raya2
la source
1

Vérifiez les chemins de recherche de votre bibliothèque dans vos paramètres cibles. Parfois, des bibliothèques loufoques y sont entrées et cela vous donnera une erreur similaire.

Vous pouvez supprimer toutes les entrées de cette section.

Atma
la source
0

Je viens de vivre quelque chose de légèrement différent, car je travaille sur ma propre bibliothèque (WM_GSRecognizerLib), mais l'erreur est la même.

Ce qui se passerait: en raison de certaines mises à jour, le chemin ciblant la librairie à inclure (.a) provenait du dossier "Debug-iphoneos" (où il est généré). La compilation pour les appareils iOS génériques fonctionnait bien, mais pas pour le simulateur, se plaignant de l'architecture i386 manquante.

Ce que j'ai fait pour ce problème, c'est d'inclure également les binaires du dossier "Debug-iphonesimulator".

Cela peut aider pour ce sujet, car l'explication est ici: les périphériques nécessitent des binaires pour arm64 / armv7 / armv7s, tandis que le simulateur a besoin d'i386.

tontonCD
la source
0

Ma solution était de définir le débogage de la cible du simulateur OUI, il suffit de regarder l'état de git pour voir la nouvelle ligne ajoutée comme architecture uniquement sur .project. si vous ne définissez pas cela, la construction fonctionnera sur toutes les architectures et affichera une architecture manquante comme i386 ou autre. NOTEZ QUE, de toute évidence, le principal problème est d'utiliser un cadre qui implémente une sorte d'architecture spécifique.

Guilherme Pedriconi
la source
-1

J'ai aussi eu la même erreur en utilisant la version 4.0.2 de xcode, donc ce que j'ai fait a été sélectionné le fichier de projet xcode et à partir de leur j'ai sélectionné l'option cible, je pouvais voir l'application de mon projet alors j'ai cliqué dessus et je suis allé à la construction option de paramètres.

Leur dans l'option de recherche, j'ai tapé le chemin de recherche de Framework , et supprimé tous les paramètres, puis j'ai cliqué sur le bouton de construction et cela a très bien fonctionné pour moi,

Merci et salutations

Base
la source