web-dev-qa-db-fra.com

Est-il possible de cibler des versions iOS plus anciennes avec Xcode 4.2 et iOS 5 SDK?

Je viens de télécharger récemment le package Xcode 4.2 avec iOS 5 SDK et j'ai immédiatement remarqué que je ne pouvais pas utiliser mon iPhone 3G avec iOS 4.2.1 pour le débogage. Je ne peux déboguer et tester que sur mon iPhone 4 avec iOS 5 installé.

Pour tous mes appareils fonctionnant sous iOS 5.0 inférieur à 5.0, Xcode indique simplement "Terminé pour iPhone3GS" et ne l'exécute pas. Ma cible de déploiement est définie sur 3.0 car je n'utilise aucune fonctionnalité de mon application supérieure à 3.0 et je veux pouvoir cibler toutes les versions 3.0 ou supérieures. Tous mes profils de provisioning sont installés et mis à jour.

J'ai quitté et redémarré xcode, j'ai nettoyé la construction plusieurs fois. J'ai essayé d'ajouter armv6 dans les paramètres de construction de l'architecture, mais rien ne me permettra de créer et d'exécuter mon application sur mon ancien téléphone avec iOS 4.2.1.

Ma question est la suivante: est-il possible de continuer à utiliser des applications avec le nouveau SDK pour les versions iOS inférieures à 5? Comment puis-je être sûr que mon application fonctionnera toujours sur les versions iOS inférieures si je ne parviens pas à les installer sur mon ancien téléphone?

Modifiez: OK, il semble que iOS SDK 5 a abandonné la prise en charge d'armv6 par défaut. Ce que vous devez faire, c'est ajouter armv6 dans le champ Architectures sous Paramètres de construction pour votre cible et votre projet. Ensuite, votre application pourra fonctionner sur les appareils iPhone 3G. La réponse peut être trouvée ici Comment construire des architectures armv6 et armv7 avec iOS 5

103
Greg Ellis

J'avais le même problème en essayant de lancer un projet Xcode 4.2 nouvellement créé sur un iPhone 3G 4.2.1. Voici comment j'ai pu le faire fonctionner.

1) Changez les "Paramètres de construction" ==> "Architecture" de "Standard (armv7)" en "autres". Ajoutez armv6 et armv7.

2) Modifiez les "Paramètres de construction" de la cible ==> "Architecture valide" en armv6 et armv7.

3) Changez les "Paramètres de construction" de la cible ==> "Cible de déploiement iOS" en iOS 4.2.

enter image description here

4) Ouvrez les projets * -Info.plist, supprimez le paramètre "Fonctionnalités requises pour le périphérique" (notez que cela nécessitait armv7) enter image description here

bTW j'ai compris cela quand j'ai essayé d'ajouter manuellement l'application via l'organisateur et il a rapporté:

Impossible d'installer l'application

Le fichier Info.plist pour une application située à /Users/.../TestsDebug.app spécifie les exigences de capacité du périphérique, qui ne sont pas satisfaites par Dev iPhone 3G.

Tout devrait fonctionner après cela. Tu parles d'un PITA.

152
mmorris

Allez dans Xcode> Préférences> Téléchargements et installez la prise en charge du débogage pour les anciennes versions iOS.

12
Aleksejs Mjaliks

mmorris m'a rapproché de la résolution du problème ... Dans Info.plist, je devais définir les fonctionnalités de périphérique requises sur armv6, et non sur armv7. J'espère que cela aidera également les autres.

3
flizit

J'ai découvert que je devais ajouter armv6 aux architectures, mais cela ne fonctionnait toujours pas. Et maintenant, j'ai retiré armv7 des capacités requises, et c'était tout! Ça a marché!

1
Greg

Vous devez connecter le téléphone, puis vous rendre à l’organisateur. Xcode devrait automatiquement demander l'ancienne version.

Voir la page développeur pour plus d'informations. Il a été décrit dans les notes de la version bêta 4.2

1
Foo Bah

J'ai rencontré un problème similaire en essayant d'exécuter mon application sur un ancien iPod Touch. J'ai mis à niveau vers Xcode 4.3.3 et l'application ne s'exécutait plus dans le débogueur pour un matériel plus ancien.

Je pense que les autres commentaires ici sur "Architectures" et "Fonctionnalités de périphérique requises" sont des détails importants à spécifier correctement. Malheureusement, ils n'étaient pas suffisants pour résoudre mon problème.

Dans mon cas, j'ai trouvé que le schéma de construction était le coupable. Xcode 4.3.3 m'a demandé de passer du débogueur GDB à LLDB lors de la mise à niveau de mon projet. Lorsque je ai redéfini l'action Exécuter de mon schéma sur GDB, j'ai pu exécuter l'application à nouveau sur mon ancien matériel à partir de Xcode.

1
otto

Cela a fonctionné pour moi et devrait fonctionner pour vous si vous aviez auparavant une version plus ancienne de Xcode. Sinon, suivez les conseils donnés par d'autres utilisateurs pour obtenir le SDK d'une version antérieure du SDK:

Sudo cp -a /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk

Cette commande n'est qu'un peu différente de celle affichée par d'autres, mais ces commandes ont pour moi supprimé les fichiers du dossier SDK lui-même. Nous souhaitons qu'un sous-répertoire de celle-ci soit créé avec le nom approprié.

0
Tom Boutell

Dans mon cas, il y avait une ligne redondante dans Capacités requises de l'appareil enter image description here

Je viens de l'enlever ...

enter image description here

J'espère que cela aidera quelqu'un d'autre.

0
Arkady