Est-il possible de cibler des versions iOS plus anciennes lors de l'utilisation de Xcode 4.2 et du SDK iOS 5?

103

Je viens de télécharger 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 l'un de mes appareils exécutant un iOS inférieur à 5,0, Xcode dit simplement "Fin de l'exécution pour iPhone3GS" et ne l'exécute pas. Mon objectif de déploiement est défini sur 3.0 car je n'utilise aucune fonctionnalité de mon application supérieure à 3.0 et je souhaite pouvoir cibler toutes les versions 3.0 ou supérieures. J'ai tous mes profils d'approvisionnement installés et à jour.

J'ai quitté et redémarré xcode, j'ai nettoyé la compilation 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 toujours faire fonctionner 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 des versions iOS inférieures si je ne parviens pas à les installer sur mon ancien téléphone?

Edit: OK, il semble que le SDK iOS 5 a abandonné le support pour armv6 par défaut. Ce que vous devez faire est d'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 pour les architectures armv6 et armv7 avec iOS 5

Greg Ellis
la source
Notez que votre modification concerne les architectures, ce qui est un problème distinct des iOSversions. Veuillez également ajouter la modification en tant que réponse afin que vous puissiez accepter la solution que vous avez trouvée et que cette question puisse être marquée comme réponse.

Réponses:

153

J'avais le même problème en essayant de faire fonctionner 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" de la cible ==> "Architecture" de "Standard (armv7)" à "autre". Ajoutez armv6 et armv7.

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

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

entrez la description de l'image ici

4) Ouvrez les projets * -Info.plist, supprimez le paramètre «Capacités de périphérique requises» (notez qu'il fallait armv7) entrez la description de l'image ici

btw j'ai compris cela lorsque j'ai essayé d'ajouter manuellement l'application via l'organisateur et cela a rapporté:

Impossible d'installer l'application

Le fichier Info.plist pour l'application sur /Users/.../TestsDebug.app spécifie les exigences de capacité de l'appareil, qui ne sont pas satisfaites par Dev iPhone 3G

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

mmorris
la source
Merci beaucoup! Je te dois de la bière! Cela a en effet résolu mes problèmes, PITA en effet: D
Greg Ellis
4
Je vous remercie! J'avais lu sur les paramètres d'architecture ailleurs, mais personne d'autre ne semble mentionner les paramètres "Capacités de périphérique requises".
bunnyhero
Je dois ajouter: les projets nouveaux et anciens sont affectés par la mise à niveau! J'ai testé mes vieux trucs avant de googler, et ils n'ont pas fonctionné non plus! Je te dois une bière aussi! :)
Eduardo Costa
1
J'ai le même problème, mais même si les paramètres du projet étaient «Standard armv7» pour les architectures, Valid Architectures indiquait déjà «armv6 armv7». De plus, je n'avais pas de propriété «Capacités de périphérique requises» dans Info.plist. J'essaierai néanmoins l'astuce, j'espère que cela fonctionnera!
rchampourlier
les "Capacités de périphérique requises" m'ont eu aussi
codecaffeine
12

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

Aleksejs Mjaliks
la source
Je suis allé dans les préférences et j'ai téléchargé et installé le support de débogage pour les anciens systèmes d'exploitation, j'ai quitté xcode, rouvert xcode a fait un nettoyage et une compilation, mais l'application ne s'installe toujours pas sur mon ancien appareil. Je suis totalement perdu maintenant, car quand j'ai vu votre réponse, je pensais à coup sûr que cela résoudrait mon problème :(
Greg Ellis
1
Je te dois une bière aussi! Cela a résolu UN AUTRE problème que j'avais après la mise à niveau Xcode 4! Je peux maintenant déboguer mon appareil iOS 4.2 (iPod Touch 2e génération)!
Eduardo Costa
3

mmorris m'a rapproché de la résolution du problème ... Dans Info.plist, j'ai dû définir les capacités de périphérique requises sur armv6, pas armv7. J'espère que cela aide aussi les autres.

flizit
la source
1

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

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

Foo Bah
la source
J'ai fait cela et j'ai cliqué sur "Utiliser cet appareil pour le développement" et il semblait faire ce qu'il était censé faire, mais je n'arrive toujours pas à faire fonctionner une application sur mon ancien appareil à partir de xcode.
Greg Ellis
1

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 fonctionnerait plus dans le débogueur pour moi sur du matériel plus ancien.

Je crois que les autres commentaires ici sur les "Architectures" et les "Capacités de périphérique requises" sont des détails importants à spécifier correctement. Malheureusement, cela n'a pas suffi à 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 invité à passer du débogueur GDB à LLDB lors de la mise à niveau de mon projet. Lorsque j'ai changé l'action Exécuter de mon schéma en GDB , j'ai pu réexécuter l'application sur mon ancien matériel à partir de Xcode.

Otto
la source
1

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

Greg
la source
0

Cela a fonctionné pour moi et devrait fonctionner pour vous si vous aviez une ancienne version de Xcode auparavant. Sinon, vous devez suivre les conseils donnés par d'autres pour obtenir le SDK à partir d'une ancienne version 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 que légèrement différente de celle affichée par d'autres, mais ces commandes ont déposé les fichiers dans le dossier SDK lui-même pour moi - nous voulons qu'un sous-répertoire de celui-ci soit créé avec le nom approprié.

Tom Boutell
la source
0

Dans mon cas, il y avait une ligne redondante dans les capacités de l'appareil requises entrez la description de l'image ici

Je viens de le supprimer ...

entrez la description de l'image ici

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

Arkady
la source