81 votes

Xcode 5 et iOS 7 : Architecture et architectures valides

Je commence un nouveau projet dans Xcode 5. Je veux développer une application à l'aide de iOS SDK 7 mais avec une cible de déploiement iOS 5.0. Dès que j'ai créer un nouveau projet dans Xcode et essayer de changer la cible de déploiement à 5.0, j'ai eu ce message:

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.

Donc changé d'architectures Standard (pas de 64 bits). Je compile, fonctionne, mais je ne comprends pas vraiment ce qui vient de se passer.

Quelle est la différence entre Architectures et Valid architectures paramètres dans Xcode projet de Paramètres de construction?
Si j'ai mis en Architectures d'exclure 64 bits ce qui se passe quand je lance mon application sur une version 64 bits de l'iPhone ou de Simulateur iOS (je sais que ça fonctionne, je suis juste curieux de savoir ce hapens-dessous)?
Pouvez-vous nous expliquer gros gâchis avec la nouvelle architecture 64 bits?

enter image description here

122voto

Anil Points 13977

Définir l'architecture en paramètre de construction d' architectures Standard(armv7,armv7s)

enter image description here

l'iPhone 5S est alimenté par l'autoroute A7 64 bits processeur. De apple docs

Xcode pouvez construire votre application avec les deux 32-bit et 64-bit binaires inclus. Cette combinaison binaire nécessite un minimum cible de déploiement d'iOS 7 ou version ultérieure.

Remarque: Une future version de Xcode vous permettra de créer une seule application qui prend en charge 32 bits runtime sur iOS 6 et versions ultérieures, et qui prend en charge le 64 bits runtime sur iOS 7.

À partir de la documentation de ce que j'ai compris, c'est

  • Xcode peut créer à la fois 64 bits 32 bits binaires pour une seule application, mais l' cible de déploiement doit être iOS7. Ils disent dans l'avenir, il sera être iOS 6.0
  • 32 bits binaires fonctionnent bien dans l'iPhone 5S(64 bits processeur).

Mise À Jour (Xcode 5.0.1)
Dans Xcode 5.0.1 ils ont ajouté le soutien à la création d'64 bits binaires pour iOS 5.1.1 partir.

Xcode 5.0.1 pouvez construire votre application avec les deux 32-bit et 64-bit binaires inclus. Cette combinaison binaire nécessite un minimum cible de déploiement de l'iOS 5.1.1 ou plus tard. Le 64-bit binaire ne fonctionne que sur les 64-bit les appareils exécutant iOS 7.0.3 et plus tard.

Mise À Jour (Xcode 5.1)
Xcode 5.1 changement significatif dans la section architecture. Cette réponse sera d'un suivi pour vous. Cochez cette

8voto

cooliPhoneGuy Points 391

Ma compréhension de la part de Apple Docs.

  • Qu'est-ce que les Architectures (ARCHITECTURES) dans Xcode l'accumulation de paramètres?
    • Spécifie l'architecture/s pour qui le binaire est CIBLÉE. Lorsqu'il est spécifié plus que l'architecture, le binaire généré peut contenir le code de l'objet pour chacun de l'architecture spécifiée.
  • Ce qui est Valable Architectures (VALID_ARCHS) dans Xcode l'accumulation de paramètres?

    • Spécifie l'architecture/s pour lesquelles le binaire peut être CONSTRUIT.
    • Pendant le processus de construction, cette liste est recoupée par des PONTS, et la liste spécifie les architectures les binaires peut s'exécuter sur.
  • Exemple :- Un iOS de projet a la suite de l'accumulation de paramètres dans Xcode.

    • ARCHITECTURES = armv7 armv7s
    • VALID_ARCHS = armv7 armv7s arm64
    • Dans ce cas, binaire sera construit pour armv7 armv7s arm64 architectures. Mais le même binaire sera exécuté UNIQUEMENT sur ARCHS = armv7 armv7s.

6voto

Technologeeks Points 2194

Lorsque vous définissez 64 bits le binaire résultant est un "Gros" fichier binaire qui contient tous les trois Mach-O images livré avec un mince la graisse en-tête. Vous pouvez voir que l'utilisation de otool ou jtool. Vous pouvez consulter quelques gros fichiers binaires inclus dans le cadre de l'iOS 7.0 SDK, par exemple le AVFoundation Cadre, 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)

Comme pour le binaire lui-même, il utilise le ARM64 bits du jeu d'instructions, ce qui est (le plus souvent compatible avec les versions 32 bits, mais) un totalement différent du jeu d'instructions. Ceci est particulièrement important pour le programme graphique (à l'aide de NÉONS instructions et registres). De même, le PROCESSEUR n'a plus les registres, ce qui le rend tout à fait un impact sur le programme de la vitesse. Il y a une discussion intéressante dans http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons sur si oui ou non cela fait une différence; l'analyse comparative des tests ont clairement indiqué qu'elle n'.

À l'aide de otool -tV vidage de l'assemblée (si vous avez XCode 5 et versions ultérieures), et puis vous pouvez voir le jeu d'instructions différences pour vous-même. La plupart (mais pas tous) les développeurs vont rester agnostique pour les modifications, pour la plupart, ils n'affectent pas directement l'Obj-C (CG* Api nonobstant), et doivent en faire plus avec un faible niveau pointeur de la manipulation. Le compilateur va travailler sa magie et des optimisations.

6voto

Kibernetik Points 805

Vous n'avez pas besoin de limiter votre compilateur pour seulement armv7 et armv7s en supprimant arm64 paramètre à partir d'architectures prises en charge. Il vous suffit de définir la cible de Déploiement paramètre 5.1.1

Note importante: vous ne pouvez pas définir la cible de Déploiement 5.1.1 dans les Paramètres de construction de la section, car c'est déroulante uniquement avec des valeurs fixes. Mais vous pouvez facilement mettre à 5.1.1 en Général, la section des paramètres de l'application simplement en tapant la valeur dans un champ de texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X