Xcode 5.1 - Aucune architecture à compiler pour (ONLY_ACTIVE_ARCH = YES, active arch = x86_64, VALID_ARCHS = i386)

168

Après la mise à jour vers Xcode 5.1, je ne peux plus créer mon projet pour le simulateur 64 bits, recevant cette erreur:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Voici mes paramètres de build cible:

Paramètres de construction de la cible Xcode

J'ai essayé de changer "Build Active Architecture" sur Non, ainsi que d'ajouter "i386" aux "Valid Architectures", malheureusement aucun n'a fonctionné. Merci pour vos suggestions!

ebi
la source
4
J'ai vu pas mal de questions similaires à la suite de la dernière mise à jour iOS 7.1 et la solution était de laisser de côté arm64. Certes, cela ne résout pas votre problème spécifique, mais il y a des raisons de croire qu'Apple a gâché quelque chose.
dandan78
Merci, cela a du sens, je suppose que je n'utiliserai pas le 64 bits jusqu'à ce qu'Apple publie une mise à jour pour cela.
ebi
1
duplication possible de EXC_BAD_ACCESS, code 1, appareils iOS 7.0.x 64 bits
ignotusverum
Même problème sur Xcode 6.1, j'ai essayé toutes les solutions données ci-dessous, elles ne fonctionnent pas. J'ai des CocoaPods dans mon projet. Toute solution pour résoudre ce problème sur Xcode 6.1
Vinayaka Karjigi

Réponses:

102

J'ai eu le même message d'erreur après la mise à niveau vers XCode 5.1. Utilisez-vous CocoaPods? Si tel est le cas, cela devrait résoudre le problème:

  1. Supprimez le projet "Pods" de l'espace de travail dans le volet gauche de Xcode et fermez Xcode.
  2. Exécutez "pod install" à partir de la ligne de commande pour recréer le projet "Pods".
  3. Rouvrez Xcode et assurez-vous que "Build Active Architecture Only" est réglé sur "No" dans les paramètres de construction du projet "Pods" et de votre propre projet.
  4. Nettoyez et construisez.
Mike Onorato
la source
1
Correction de la suppression de arm64 des architectures de pods.
ebi
J'ai aussi résolu le même problème dans un projet Cordova / PhoneGap. Merci
Rocco
182

Ce que vous devez faire est simplement de définir le ONLY_ACTIVE_ARCHsur NO(au moins fonctionne pour moi). Ci-dessous, une capture d'écran:


ÉDITER:

Pour autant que je sache ( veuillez le signaler s'il y a quelque chose qui ne va pas, merci ), si vous définissez ONLY_ACTIVE_ARCHsur YES, cela signifie que le Xcode ne sera construit que pour l'architecture active (qui fait référence au périphérique actuellement actif dans Xcode). Il semble que le paramètre par défaut de Xcode soit défini sur Debug YES, de sorte qu'il ne construira pas de binaires pour d'autres architectures lorsque vous souhaitez uniquement créer un périphérique spécial connecté à votre Mac.

La raison de l'échec de la construction peut être que le projet ne prend pas en charge l'architecture de l'appareil que vous avez connecté. La meilleure solution consiste donc à ajouter la bonne architecture pour votre appareil. Vous trouverez ci-dessous une liste des architectures et des appareils prenant en charge:

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air,Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c,iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3,iPad Mini
  • ARMv6: iPhone, iPhone 3G,iPod 1G/2G

Alors , pourquoi « définir la ONLY_ACTIVE_ARCHà NO» œuvres? Parce que l'appareil peut toujours exécuter le binaire qui a été construit pour toutes les architectures que vous avez ajoutées (passez la compilation), mais perdra des performances. C'est juste une solution rapide, mais pas la meilleure.


Remarque : plus vous ajoutez d'architectures, plus le binaire sera généré. Il est donc bon de choisir les bonnes architectures pour votre projet. ;)

Kjuly
la source
@EmilMarashliev juste la cible de construction. Vous le verrez lorsque vous sélectionnez votre projet racine (avec l'icône bleue).
Kjuly
@Praveen n'est pas sûr, il semble que cette option soit modifiée dans Xcode 5.1.
Kjuly
C'est la bonne réponse, vous m'avez sauvé une vie ici, merci :)
Bikramjit Singh
2
C'est la réponse la plus claire et la plus complète. Devrait certainement être celui approuvé !!! Merci
MeV
1
cela a été très utile. la réponse serait complète, si vous pouvez ajouter comment télécharger l'architecture nécessaire.
Kalpesh Popat
29

Ajouter arm64à la cible valid architectures. On dirait que cela ajoute également une x86-64architecture aux architectures valides du simulateur.

xardas
la source
27

Si vous utilisez CocoaPods, le problème le plus probable est que votre projet Pods Build Settings for Build Active Architecture Only est défini sur Yes pour le débogage.

La solution est simple. Changez-le en Non .

De même, passez à Non pour votre projet d'application.

samwize
la source
12

J'ai eu un problème similaire. Je l'ai résolu en changeant "Architecture" en " $ (ARCHS_STANDARD_32_BIT) " dans les paramètres de construction du projet.

Maintenant, vous devez sélectionner les architectures standard (armv7, arm64) - $ (ARCHS_STANDARD) car Apple recommande que les applications soient construites sur une architecture 64 bits. Cliquez sur: document Apple

Jayprakash Dubey
la source
@JayprakashDubey, qu'en est-il de ça? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
Dois-je utiliser $(ARCHS_STANDARD_32_BIT)ou $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
@hagile: Allez avec $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey
10

Ajouter: Architectures: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Architectures valides: arm64 armv7 armv7s

AntonijoDev
la source
Hmm, avez-vous essayé de tout réinitialiser, le contenu du simulateur, le simulateur, nettoyer le projet, redémarrer xCode et Mac, car j'ai xCode5.1 et mon simulateur fonctionne bien
AntonijoDev
Exécutez-vous votre application / simulateur avec un iPhone 4 pouces 64 bits?
ebi
5

Juste au cas où, pour toute personne rencontrant toujours le problème malgré le respect de ce qui précède, vérifiez que le simulateur que vous utilisez est également celui pris en charge. J'avais spécifié le mien sur arm7 et arm7s, mais j'essayais d'exécuter l'application sur un simulateur 64 bits.

irs8925
la source
+1 Oui, c'est celui-là! Après avoir vérifié et revérifié et vérifié trois fois que tout va bien, c'était le problème!
JOM
1
Sensationnel. Je dois brancher l'appareil pour lequel je veux construire afin d'obtenir le bon code cible compilé? J'ai juste vomi un peu dans ma bouche. Votre message a résolu ce problème pour moi, merci.
5

Pour éviter que "l'installation du pod" ne réinitialise only_active_arch pour le débogage à chaque exécution, vous pouvez ajouter ce qui suit à votre fichier de pod

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end
Jake Hall
la source
3

Ajoutez simplement arm64 dans une architecture valide. J'espère que cela fonctionnera pour vous.

Shauket Sheikh
la source
3

Mon problème était que le projet Pods ciblait OS X, malgré mon Podfile platform :ios. J'utilise des cocoapodes 0.35.0.rc2.

Pour résoudre ce problème, sélectionnez le projet Pods dans le navigateur de projet et vérifiez que le nœud Pods PROJECT (attention, pas la cible Pods) cible iOS. Autrement dit, les paramètres de construction des architectures doivent être:

  • Architectures: $(ARCHS_STANDARD)
  • SDK de base: iOS 8.1
  • Plateformes prises en charge: iOS
  • Architectures valides: $(ARCHS_STANDARD)

Je voulais également créer toutes les architectures, j'ai donc ajouté ce qui suit au Podfile:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end
Jano
la source
3

J'ai dû ajouter ce qui suit i386et x86_64à Valid Architectures. J'utilise Xcode 7.2 et cible iOS 8+. J'avais déjà armv7, armv7set arm64là-dedans et cela fonctionnait dans Xcode 6.4.

Timgcarlson
la source
2

J'ai rencontré le même problème lors de l'exécution de mon application sur iPad à l'aide de xcode 5.1. Il a été résolu en supprimant armv7s des «architectures valides» et en définissant la valeur «construire uniquement les architectures actives» sur Non. Ces deux champs se trouvent dans votre application-> cibles-> paramètres de construction-> architectures.

Anubha
la source
2

Je suis arrivé à cette question en raison d'un problème avec la construction de ligne de commande pour le simulateur dans Xcode 7.2. Au cas où quelqu'un d'autre arriverait ici avec le même problème, je partagerai la solution que j'ai trouvée:

Apparemment, il y a un bogue dans Xcode 7.2 qui provoque un xcodebuildéchec lors de la tentative de compilation pour le simulateur. La solution est de spécifier l'option "-destination", par exemple:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Mettre à jour

L'exemple de commande ci-dessus créera un binaire comprenant les graphiques pour iPhone 6 uniquement. Si le binaire est exécuté sur d'autres simulateurs, les graphiques de l'iPhone 6 sont mis à l'échelle de la plate-forme. Une meilleure solution de contournement qui contient tous les graphiques pour toutes les plates-formes consiste à spécifier le paramètre PLATFORM_NAME=iphonesimulator, par exemple:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build
JRV
la source
0

Essayez de supprimer toutes les architectures précédentes (c'est-à-dire supprimez le paramètre ARCHS_STANDARD) en même temps que vous ajoutez i386 aux architectures. Cela devrait changer l'architecture active en i386. J'ai rencontré un problème similaire lorsque j'ai essayé de construire pour armv7 par défaut, mais il a continué à essayer de construire pour arm64. J'ai changé ARCHS_STANDARD en ARCHS_STANDARD_32_BIT, et cela a changé l'architecture active choisie.

halifix
la source
0

En acrhiecture - parfois pour prendre en charge 6.0 et 7.0, nous excluons arm64

Dans les architectures -> acrchitecture - sélectionnez l'architecture standard arm64 armv7 armv7s. Juste en dessous, dans Acrchitecture valide, l'utilisateur arm64 armv7 armv7s est inclus. Cela a fonctionné pour moi.

Ankish Jain
la source
0

J'ai résolu ce problème en utilisant la réponse de @ Kjuly et la ligne spécifique:

"La raison de l'échec de la construction peut être que le projet ne prend pas en charge l'architecture de l'appareil que vous avez connecté."

Avec Xcode chargé, il configure automatiquement mon application iPad sur iPad Air

entrez la description de l'image ici

Cela a provoqué l'erreur d'analyse de dépendance.

La modification du type d'appareil a immédiatement résolu le problème:

entrez la description de l'image ici

Je ne sais pas pourquoi cela fonctionne, mais c'est une réponse très rapide qui m'a évité beaucoup de tripotages en arrière-plan et a instantanément fait fonctionner l'application pour tester. Je n'aurais jamais pensé que cela pouvait être une chose et quelque chose d'aussi simple réglerait le problème, mais dans ce cas, c'est le cas.

simon_smiley
la source
0

J'ai trouvé qu'il était nécessaire de saisir les noms d'architecture à la main:

entrez la description de l'image ici

Je ne sais pas pourquoi cela était nécessaire, c'est-à-dire pourquoi ces valeurs n'ont pas été héritées de Xcode lui-même. Mais dès que j'ai fait cela, le problème a disparu.

mat
la source
0

Dans les architectures valides: sélectionnez chaque entrée (version, débogage) et créez et appuyez sur retour arrière. Ça devrait marcher

Khaled Annajar
la source