web-dev-qa-db-fra.com

Architecture Arm64 dans xcode 5.1

Dans le nouveau XCode 5.1, arm64 est devenu l'une des architectures standard à construire.

Cependant, dans mes projets en cours, j'ai inclus des bibliothèques (Google AdMob par exemple) qui ne prennent pas encore en charge cette nouvelle architecture. Celles-ci provoquent maintenant des erreurs de l'éditeur de liens:

ld: symbol(s) not found for architecture arm64

Google AdMob 6.8.0, par exemple, est supposé supporter arm64 mais je ne peux pas vraiment le confirmer, à moins que cputype (16777228) cpusubtype (0) soit arm64? (trouvé via l'outil de ligne de commande de fichier)

libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures
libGoogleAdMobAds.a (for architecture armv7):   current ar archive random library
libGoogleAdMobAds.a (for architecture armv7s):  current ar archive random library
libGoogleAdMobAds.a (for architecture i386):    current ar archive random library
libGoogleAdMobAds.a (for architecture x86_64):  current ar archive random library
libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)):   current ar archive random library

Y a-t-il un moyen de s'y prendre?

63
MrJre

Ce n'est pas si difficile de se débarrasser de arm64 pour le moment. tout ce que vous devez faire est de:

  • Editez votre cible's Paramètres de construction. Modifiez la valeur de Architectures en ouvrant le menu déroulant, cliquez sur Autre ... et sélectionnez-le, supprimez la ligne avec la valeur $(ARCHS_STANDARD) et ajoutez deux lignes avec des valeurs: armv7 et armv7s (ou $(ARCHS_STANDARD_32_BIT) comme mentionné par nschum ), fermez la fenêtre contextuelle.

  • Modifiez la valeur Valid Architectures et supprimez simplement la partie arm64.

  • Faites-le pour chaque projet imbriqué que vous pourriez avoir dans votre espace de travail ou projet.

Remarque: Ce n'est pas une solution, ce ne sont que quelques étapes pour atténuer votre problème actuel. Continuez à suivre vos projets de dépendance pour savoir quand ils arrivent avec la compatibilité arm64 et annulez la modification de ces paramètres dès que possible.

Bonne chance

108
M. Porooshani

À partir de Xcode 5.1, $ (ARCHS_STANDARD) inclut désormais arm64 (ainsi que armv7 et armv7s) alors que avec Xcode 5.02, $ (ARCHS_STANDARD) n'incluait que armv7 et armv7.

Pour Xcode 5.1

$ (ARCHS_STANDARD armv7 armv7s arm64) ==

$ (ARCHS_STANDARD_32_BIT armv7 armv7s) ==

Donc, si vous DEVEZ compiler en 64 bits, vous devez vous assurer que toutes les bibliothèques incluses ont une tranche de 64 bits. S'ils ne supportent pas encore 64 bits, vous devrez plutôt compiler en 32 bits.

Mais dans les deux cas, dans les paramètres de construction de vos cibles, vous devez vous assurer que les Achitectures et les Achitectures valides sont définies de la même manière et qu’elles correspondent (voir les images ci-dessous). Vous pouvez donc les essayer tous les deux avec $ (ARCHS_STANDARD) et s’ils ne compilent pas, vous pouvez les essayer tous les deux avec $ (ARCHS_STANDARD_32_BIT), ce qui en théorie supprimera les erreurs et compilera un projet en cours.

-

comme ceci pour 64 bits avec arm64 armv7s et armv7:

enter image description here

-

Ou comme ceci pour 32 bits avec armv7s et armv7 uniquement (sans arm64):

enter image description here

19
jsherk

Dans les paramètres de construction de votre cible, remplacez les "Architectures valides" par celles que vous prenez en charge. armv7 probable et armv7s dans ce cas.

Si vous utilisez Cocoapods, veillez à modifier cette option pour toutes les cibles du projet Pods, et définissez la valeur "Non" de toutes les cibles de ces cibles pour "Tous".

Un petit changement dans votre podfile pour supprimer automatiquement l'architecture de construction 64 bits de vos cibles cocoapods est détaillé ici: http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from -cocoapods-cibles

6
karlbecker_com

La définition de l’architecture sur $ (ARCHS_STANDARD_32_BIT) sur XCode 5.1 fonctionne. Pas besoin de retirer arm64 des architectures valides.

L'architecture spécifie les architectures réelles sur lesquelles construire et ignorera l'entrée arm64 dans les architectures valides (qui spécifie le sur-ensemble). Espérons que Apple corrige cela bientôt.

5
Agnit

J'ai eu la même erreur. Le téléchargement de la nouvelle version de Google AdMob SDK 6.8.0 a résolu le problème. Voici le lien: https://developers.google.com/mobile-ads-sdk/download#downloadios

La désactivation de l’architecture arm64 n’est donc pas nécessaire.

1
RawMean

Aucune des réponses n'a fonctionné pour moi.
J'ai finalement soumis mon application en installant l'ancien Xcode 5.0.2 avec Xcode 5.1
Utilisez cette version de Xcode pour archiver une application sans erreur.

Téléchargez l'ancienne version de Xcode 5.0.2 ici (vous devez être connecté avec votre Apple ID):

1
Almas Adilbek