Comment construire pour les architectures armv6 et armv7 avec iOS 5

Dans iOS5 Apple supprime l'architecture armv6 du ARCHS_STANDARD_32_BIT.

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

Quelqu'un A trouver une solution pour cela?

96
demandé sur auselen 2011-09-20 20:40:46

6 réponses

Je viens de construire quelque chose aujourd'hui en spécifiant une cible de déploiement d'iOS 4.0. Avec seulement armv7 spécifié dans les Architectures, Xcode m'a averti que pour supporter tout ce qui est inférieur à iOS4. 2, je devais inclure armv6 dans les Architectures. Il suffit de modifier ce champ, cliquez sur le bouton " + "lorsque la boîte de dialogue apparaît et entrez le littéral "armv6".

Dans mon cas, nous voulons que notre application fonctionne sous iOS4 et iOS5. Nous avons dû faire quelques modifications pour que cela fonctionne correctement sous iOS5, mais tous ces changements ont été faits avec changements de code iOS4-friendly.

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

Donc, soutenir iPhone3G dans un monde iOS5 pourrait tout aussi bien signifier "nous voulons que notre application fonctionne sur iOS4 et au-dessus (indépendamment de toute utilisation des fonctionnalités iOS5) "plutôt que" nous voulons nous assurer que notre application fonctionne sur un appareil plus ancien exécution d'iOS5". Il y a une différence ici; penser. :-)

Quoi qu'il en soit, l'ajout du support armv6 est très facile. Et je suppose que le point est le suivant: à un moment donné, quand il n'y a plus de périphériques armv6 à s'inquiéter (pour une raison quelconque), vous n'aurez pas à construire pour cela. Le point de vue d'Apple est tout le monde devrait passer au dernier matériel dès que possible. Donc, dans ce monde, il n'y a pas besoin pour les outils par défaut à quoi que ce soit, mais le plus récent et le plus grand aussi. :-) Heureusement (ou non), nous les développeurs vivent dans le monde réel et reconnaître que vous devez soutenir des choses plus anciennes 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 armv6 tout simplement.

97
répondu Mark Granoff 2011-09-20 18:46:17

La réponse simple est que vous devez changer les paramètres actuels de "Standard (armv7) - $(ARCHS_STANDARD_32_BIT)" pour être 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.

Paramètres corrects pour armv6 et armv7

51
répondu adjwilli 2011-10-16 16:49:42

Assurez-vous également de définir cela dans le projet et les cibles ... m'a coûté une heure pour comprendre cela. a définir pour l'un mais pas l'autre. espérons que cette aide. GLTA

11
répondu ubert 2011-10-16 20:28:11

Je pense qu'il y a une raison pour laquelle Apple a abandonné armv6 du réglage standard.

J'ai compilé armv7 / armv6 avec le SDK iOS5, cependant, le compilateur armv6 a produit un mauvais code en mode release. Après des heures de trouver une solution de contournement (en essayant llvm ou gcc avec différents niveaux d'optimisation), j'abandonne.

Donc, je retourne à IOS SDK 4.x tant que je supporte 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 que j'ai une certaine corruption de mémoire, cependant, sur le compilateur armv7 et sur iOSSDK

Cordialement

9
répondu jfieres 2011-10-11 09:20:32

Je ne sais pas si c'est encore 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" m'a permis de compiler avec iOS5 comme base et iOS4 comme cible de déploiement, et de passer la validation .

Je n'utilise pas de bibliothèques ou d'appels exclusifs à IOS5, mais j'ai l'intention de le faire dans ma prochaine version.

7
répondu Peter Johnson 2011-10-06 15:26:58

Je n'ai pas eu 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 texte brut, en appuyant sur plus et en le tapant simplement sur la ligne deux.

1
répondu Johan 2012-03-02 12:25:34