web-dev-qa-db-fra.com

Comment construire des architectures armv6 et armv7 avec iOS 5

Dans iOS5 Apple supprime l'architecture armv6 de ARCHS_STANDARD_32_BIT =.

Afin de garder le support pour iPhone3G, je veux toujours compiler dans armv6 même dans iOS5.

Quelqu'un a-t-il trouvé une solution pour cela?

96
iGranDav

Je viens de construire aujourd'hui quelque chose spécifiant une cible de déploiement d'iOS 4.0. Avec seulement armv7 spécifié dans Architectures, Xcode m'a averti que pour prendre en charge tout ce qui se trouvait sous iOS4.2, je devais inclure armv6 dans Architectures. Éditez simplement ce champ, cliquez sur le bouton "+" lorsque la boîte de dialogue apparaît et entrez le littéral "armv6".

Dans mon cas, nous souhaitons que notre application fonctionne sous iOS4 et iOS5. Nous avons dû faire quelques modifications pour que cela fonctionne correctement sous iOS5, mais toutes ces modifications ont été apportées avec des modifications de code compatibles avec iOS4.

Nous avons également ajouté des fonctionnalités spécifiques à iOS5 d’une manière qui permet à l’application de fonctionner sans plantage sous iOS4. Plus précisément, nous avons testé les fonctionnalités iOS5 avant d'essayer de les utiliser et lié les bibliothèques uniquement iOS5 en tant qu'options.

Ainsi, prendre en charge iPhone3G dans un monde iOS5 pourrait tout aussi simplement signifier "nous voulons que notre application fonctionne sur iOS4 et les versions ultérieures (quelle que soit l'utilisation des fonctionnalités iOS5)" plutôt que "nous voulons nous assurer que notre application fonctionne sur un appareil plus ancien exécutant iOS5. ". Il y a une différence ici; penses-y. :-)

Quoi qu'il en soit, il est très facile d’ajouter le support armv6. Et je suppose que le problème est le suivant: à un moment donné, quand il n’y aura plus de périphériques ArmV6 sur lesquels s’inquiéter (pour quelque raison que ce soit), vous n’aurez pas à construire pour cela. Selon Apple, tout le monde devrait passer à la dernière version du matériel le plus rapidement possible. Ainsi, dans ce monde, les outils n’ont nul besoin de faire défaut à autre chose qu’au dernier cri. :-) Heureusement (ou pas), nous, les développeurs, vivons dans le monde réel et reconnaissons que vous devez prendre en charge des éléments plus anciens pendant un certain temps. Et je suppose que l’équipe de développement Xcode le sait aussi, c’est pourquoi vous pouvez ajouter le support d’ArvV6 tout simplement.

97
Mark Granoff

La réponse simple est que vous devez modifier les paramètres actuels de "Standard (armv7) - $ (ARCHS_STANDARD_32_BIT)" pour qu'ils soient juste "armv6" et "armv7". Voir l'image ci-dessous. Vous devez supprimer la ligne avec les paramètres précédents pour que cela fonctionne.

Correct settings for armv6 and armv7

51
adjwilli

assurez-vous également que vous définissez cela dans Projet ET objectifs ... me coûte une heure pour comprendre cela. l'avait mis pour l'un mais pas l'autre. J'espère que cela t'aides. GLTA

11
ubert

Je pense qu'il y a une raison pour laquelle Apple a supprimé armv6 du paramètre standard.

J'ai compilé armv7/armv6 avec iOS5 SDK, cependant, le compilateur armv6 a généré un code erroné en mode de publication. Après des heures à trouver une solution (essayer llvm ou gcc avec différents niveaux d’optimisation), j’abandonne.

Donc, je retourne à iOS SDK 4.x tant que je prends en charge les anciens appareils ArmV6.

Exemple de code:

// myView center=(160, 100)
CGPoint p=myView.center;  
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100) 
p.y+=100;
// now p =(200,200) (what the heck?)

Peut-être ai-je une corruption de mémoire, cependant, sur le compilateur armv7 et sur iOSSDK <5.0, il se comporte comme prévu.

Meilleures salutations

9
jfieres

Je ne suis pas sûr qu'il s'agisse encore d'une solution, mais j'ai découvert que le remplacement de la chaîne définie dans "architectures", qui était $ (ARCHS_STANDARD_32_BIT), par "armv6 armv7" me permettait de compiler avec iOS5 en tant que base et iOS4 en tant que déploiement. cible et passer la validation.

Je n'utilise pas de bibliothèque ni d'appels exclusifs à IOS5, mais j'en ai l'intention dans ma prochaine version.

7
Peter Johnson

Je n'avais pas besoin de remplacer $ (ARCHS_STANDARD_32_BIT) par juste armv7 pour que l'application soit compilée et téléchargée sur l'App Store.

Comme suggéré par MarkGranoff, j’ai simplement ajouté armv6 en tant que texte brut, en appuyant sur plus et en le tapant simplement sur la deuxième ligne.

1
Johan