web-dev-qa-db-fra.com

Xcode 5.1 - Aucune architecture à compiler (ONLY_ACTIVE_Arch = YES, Arch actif = x86_64, VALID_ARCHS = i386)

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

 No architectures to compile for (ONLY_ACTIVE_Arch=YES, active Arch=x86_64, VALID_ARCHS=i386).

Ce sont mes paramètres de construction cible:

Xcode target build settings

J'ai essayé de changer "Build Active Architecture" en "No", ainsi que d'ajouter "i386" aux "architectures valides", malheureusement, aucune n'a fonctionné. Merci pour toutes les suggestions!

165
ebi

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 défini sur "Non" dans les paramètres de construction du projet "Pods" et de votre propre projet.
  4. Nettoyer et construire.
102
Mike Onorato

Ce que vous devez faire est simplement de régler le ONLY_ACTIVE_Arch sur NO (au moins cela fonctionne pour moi). Ci-dessous une capture d'écran pour cela:


MODIFIER:

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

La raison pour laquelle la construction a échoué est peut-être que le projet ne prend pas en charge l'architecture du périphérique 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 "régler le ONLY_ACTIVE_Arch sur NO" fonctionne? Parce que le périphérique peut toujours exécuter le binaire construit pour toutes les architectures que vous avez ajoutées (transmettre la construction), il perdra certaines performances. C'est juste une solution rapide, mais pas la meilleure.


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

182
Kjuly

Ajoutez arm64 à la valid architectures de la cible. On dirait que cela ajoute l'architecture x86-64 aux architectures valides du simulateur.

28
xardas

Si vous utilisez CocoaPods, le problème le plus probable est dû au fait que les paramètres de construction de votre projet Pods pour Construire une architecture active uniquement ont la valeur Oui pour le débogage.

La solution est simple Changez-le en No.

De même, remplacez No pour votre projet d'application.

27
samwize

J'ai eu le même problème. Vous avez résolu le problème en remplaçant "Architecture" par " $ (ARCHS_STANDARD_32_BIT) "dans les paramètres de construction du projet.

Maintenant, vous devez sélectionner les architectures standard (armv7, arm64) - $ (ARCHS_STANDARD) puisque Apple recommande de créer des applications Architecture 64 bits. Cliquez sur: document Apple

12
Jayprakash Dubey

Ajouter: Architectures: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Architectures valides: arm64 armv7 armv7s

10
AntonijoDev

Pour éviter d'avoir "pod install" réinitialiser only_active_Arch pour le débogage à chaque exécution, vous pouvez ajouter ce qui suit à votre fichier 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
5
Jake Hall

Juste au cas où, si vous rencontrez toujours le problème, vérifiez que le simulateur que vous utilisez est également pris en charge. J'avais les miens spécifiés pour arm7 et arm7s mais j'essayais de lancer l'application sur un simulateur 64 bits.

5
irs8925

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

3
Shauket Sheikh

Je devais ajouter les i386 et x86_64 suivants à Valid Architectures. J'utilise Xcode 7.2 et cible iOS 8+. J'avais déjà armv7, armv7s et arm64 là-dedans et cela fonctionnait dans Xcode 6.4.

3
timgcarlson

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

Pour y remédier, 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. C'est-à-dire que les paramètres de construction des architectures doivent être:

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

Je voulais aussi construire toutes les architectures, alors j'ai ajouté ce qui suit au fichier Podfile:

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

J'ai rencontré le même problème lors de l'exécution de mon application sur iPad avec xcode 5.1. Le problème a été résolu en supprimant les armv7 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.

2
Anubha

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

Apparemment, il y a n bogue dans Xcode 7.2 qui provoque l'échec de xcodebuild lors de la tentative de construction pour le simulateur. La solution consiste à 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 générera un fichier binaire comprenant les graphiques pour iPhone 6 uniquement. Si le fichier binaire est exécuté sur d'autres simulateurs, les graphiques de l'iPhone 6 sont adaptés à la plate-forme. Un meilleure solution de contournement qui contient tous les graphiques pour toutes les plateformes 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
2
JRV

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 le projet ne prend pas en charge l'architecture du périphérique que vous avez connecté."

Avec Xcode chargé, je configure automatiquement mon application iPad pour iPad Air.

enter image description here

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

Changer le type d'appareil a immédiatement résolu le problème:

enter image description here

Je ne sais pas pourquoi cela fonctionne, mais voici une réponse très rapide qui m'a permis d'économiser beaucoup de bidouilles en arrière-plan et qui a immédiatement permis à l'application de fonctionner. Je n'aurais jamais pensé que cela pourrait être une chose et quelque chose d'aussi simple pourrait résoudre le problème, mais dans ce cas, c'est ce qui s'est passé.

0
simon_smiley

Dans acrhiecture - parfois pour supporter 6.0 et 7.0, nous excluons arm64

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

0
Ankish Jain

Dans Architectures valides: sélectionnez chaque entrée (release, debug), générez et appuyez sur backspace. Ça devrait marcher

0
Khaled Annajar

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

enter image description here

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.

0
matt

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

0
halifix