Je commence un nouveau projet dans Xcode 5. Je souhaite développer une application en utilisant iOS SDK 7
mais avec la cible de déploiement iOS 5.0
. Dès que je crée un nouveau projet dans Xcode et que je tente de changer la cible de déploiement en 5.0, j'ai le message suivant:
Applications including an arm64 slice are not compatible with versions of iOS
prior to 6.0
Adjust your Architectures build setting to not include arm64 in order to deploy
to releases prior to iOS 6.0.
Ainsi, les architectures changèrent en Standard
(pas de 64 bits). Je compile, je cours mais je ne comprends pas vraiment ce qui vient de se passer.
Quelle est la différence entre les paramètres Architectures
et Valid architectures
dans les paramètres de construction du projet Xcode?
Si je règle Architectures
pour exclure le 64 bits, que se passe-t-il lorsque je lance mon application sur un iPhone 64 bits ou un simulateur iOS (je sais que cela fonctionne, je suis curieux de savoir ce qui se passe dessous)?
Pouvez-vous expliquer le grand désordre avec la nouvelle architecture 64 bits?
Définissez le paramètre d'architecture dans la construction sur Architectures standard (armv7, armv7s)
l'iPhone 5S est alimenté par le processeur A7 64 bits. De documentation Apple
Xcode peut créer votre application avec les fichiers binaires 32 bits et 64 bits inclus. Ce binaire combiné nécessite une cible de déploiement minimale d'iOS 7 ou ultérieure.
Remarque: une future version de Xcode vous permettra de créer une seule application prenant en charge le runtime 32 bits sur iOS 6 et versions ultérieures et prenant en charge le runtime 64 bits sur iOS 7.
D'après la documentation, ce que j'ai compris est
Mise à jour (Xcode 5.0.1)
Dans Xcode 5.0.1, ils ont ajouté le support pour créer du binaire 64 bits pour iOS 5.1.1 et les versions ultérieures.
Xcode 5.0.1 peut créer votre application avec les fichiers binaires 32 bits et 64 bits inclus. Ce binaire combiné nécessite une cible de déploiement minimale pour iOS 5.1.1 ou version ultérieure. Le binaire 64 bits ne s'exécute que sur les périphériques 64 bits exécutant iOS 7.0.3 et versions ultérieures.
Mise à jour (Xcode 5.1)
Xcode 5.1 a apporté des modifications significatives dans la section architecture. Ceci réponse sera un suivi pour vous. Cochez cette case
Lorsque vous définissez 64 bits, le binaire résultant est un binaire "Fat", qui contient les trois images Mach-O associées à un en-tête Fat Fat. Vous pouvez voir cela en utilisant otool ou jtool. Vous pouvez consulter certains fichiers binaires gras inclus dans le SDK iOS 7.0, par exemple, le cadre AVFoundation, comme suit:
% cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0\ \(11A465\)/Symbols/System/Library/Frameworks/AVFoundation.framework/
%otool -V -f AVFoundation 9:36
Fat headers
fat_magic FAT_MAGIC
nfat_Arch 3
architecture arm64 # The 64-bit version (A7)
cputype CPU_TYPE_ARM64
cpusubtype CPU_SUBTYPE_ARM64_ALL
capabilities 0x0
offset 16384
size 2329888
align 2^14 (16384)
architecture armv7 # A5X - packaged after the arm64version
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7
capabilities 0x0
offset 2359296
size 2046336
align 2^14 (16384)
architecture armv7s # A6 - packaged after the armv7 version
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7S
capabilities 0x0
offset 4407296
size 2046176
align 2^14 (16384)
Quant au binaire lui-même, il utilise le jeu d’instructions de bits ARM64, qui est (principalement compatible avec 32 bits, mais) un jeu d’instructions totalement différent. Ceci est particulièrement important pour les programmes graphiques (utilisant les instructions et les registres NEON). De même, la CPU a plus de registres, ce qui a un impact important sur la vitesse du programme. Il y a une discussion intéressante dans http://blogs.barrons.com/techtraderdaily/2013/09/19/Apple-the-64-bit-question/?mod=yahoobarrons sur le point de savoir si cela rend ou non une différence; les tests d’étalonnage ont jusqu’ici clairement indiqué que c’était le cas.
Si vous utilisez otool -tV, l’assemblage sera sauvegardé (si vous avez XCode 5 et versions ultérieures), puis vous pourrez voir les différences de jeu d’instructions pour vous-même. La plupart des développeurs (mais pas tous) resteront agnostiques vis-à-vis des modifications, dans la mesure où ils n'affectent pas directement Obj-C (à l'exception des API CG *) et doivent en faire plus avec la gestion des pointeurs de bas niveau. Le compilateur travaillera sa magie et ses optimisations.
Ma compréhension de Apple Docs.
Qu'est-ce que Architectures valides (VALID_ARCHS) dans les paramètres de construction de Xcode?
Exemple: - Un projet iOS possède les paramètres de construction suivants dans Xcode.
Vous n'avez pas besoin de limiter votre compilateur à seulement armv7 et armv7s en supprimant le paramètre arm64 des architectures prises en charge. Il vous suffit de définir cible de déploiement sur 5.1.1
Remarque importante: vous ne pouvez pas définir la cible de déploiement sur 5.1.1 dans la section Paramètres de construction car cette liste déroulante contient uniquement des valeurs fixes. Mais vous pouvez facilement le définir à 5.1.1 dans la section Général des paramètres de l'application en saisissant simplement la valeur dans un champ de texte.
Solution simple:
Cibles -> Paramètres de construction -> Options de construction -> Activer le code binaire -> Non
Fonctionne sur le périphérique avec iOS 9.3.3