36 votes

Xcode 4.5 et iOS 4.2.1 incompatibilité

Les dernières notes de version indique 4.2.1 et inférieure ne sera pas pris en charge, nous avons maintenant d'utiliser 2 version de Xcode pour développer en prenant en charge les appareils plus anciens?? Cela va être difficile de prendre en charge les appareils plus anciens, si nous voulons nous développer iOS6 ET de soutien 4.2 et inférieur.

Je ne pense pas que Xcode 4.4 soutien iOS6. C'est donc la question. Comment les développeurs de facilement prendre en charge ces plate-forme sans trop de tracas?

29voto

Nate Points 22452

Vous pouvez faire cela, mais il nécessite quelques petites Xcode piratage, et quelques sacrifices. En fonction de ce que vous entendez par "support iOS 6", cela peut ou peut ne pas être suffisant pour vous. Si vous voulez que votre application de fonctionner sur iOS 6, alors cela devrait fonctionner. Si vous avez également besoin de votre app pour intégrer de nouvelles fonctionnalités d'iOS 6, alors il ne sera pas.

    (Note pour les autres qui n'ont pas de problème d'utilisation de plusieurs versions de Xcode: cette question semblable a des réponses qui ne vous permettent également l'utilisation du nouvel iOS 6 Api et de cibler directement armv7s)

Voir les instructions de base sur chpwn blog ici (mais lisez le reste de cette ci-dessous, aussi!)

Fondamentalement, vous pouvez utiliser Xcode 4.5 à construire pour iOS 4 et au-dessus, mais vous ne pouvez pas profiter de la nouvelle iOS 6 ne dispose d'. Donc, vous êtes vraiment des capacités pour iOS 4 et 5, et en supposant que l'application fonctionne parfaitement sur iOS 6 (qui devrait être vrai, mais vous aurez besoin de tester vous-même).

Vous devez copier le dossier SDK iOS 5

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.*.sdk

à partir d'une ancienne installation de Xcode (que vous aurez besoin de garder autour brièvement, ou réinstaller à un emplacement non standard). Vous allez ensuite définir les Déployer Cible dans vos Paramètres de génération sous iOS 4.0 (ou quel que soit minimale du système d'exploitation que vous voulez). Vous pouvez avoir besoin d'ouvrir l' project.pbxproj le fichier dans un éditeur de texte pour définir manuellement:

IPHONEOS_DEPLOYMENT_TARGET = 4.0;

Vous aurez aussi besoin de définir les Architectures armv6 et armv7. Vous ne pouvez pas directement également cible armv7s. Mais, cela ne signifie pas que votre application ne fonctionne pas sur iPhone 5. armv7 exécutables devrait fonctionner sur l'iPhone 5, tout simplement, sans optimisations ajoutée en armv7s. C'est juste que la compatibilité ne fonctionne pas dans l'autre sens (par exemple, armv7 exécutables ne pas exécuter sur un armv6 iPhone 3G).

enter image description here

Il y a aussi une étape qui peut être nécessaire, c'est pas mentionné dans chpwn blog. Vous pouvez obtenir ces mises en garde (qui sont vraiment des erreurs, parce que Xcode ne génère pas de votre exécutable correctement):

avertissement: pas de règle pour traiter le fichier '$(PROJECT_DIR)/main.m' de type de code source.c.objc pour l'architecture armv6

Pour remédier à cela, vous aurez besoin de l'installation d'un custom Règle de génération pour votre cible, qui raconte Xcode pour utiliser LLVM GCC 4.2 pour générer armv6 code. Définir la règle pour les fichiers correspondant au modèle *.[mc]:

enter image description here

Ce sera un autre compilateur que Xcode par défaut, et vous pouvez avoir besoin d'ajuster certains de la syntaxe de votre code Objective-C. Même si beaucoup de gens veulent faire de cette a probablement écrit leurs applications avant d'ARC, il est important de noter que LLVM gcc 4.2 ne prend pas en charge l'ARC.

Enfin, vous aurez probablement encore voir mises en garde de Xcode sur iOS déployer les cibles à moins de 4.3, et armv6 n'étant pas pris en charge. Ceux qui, je trouve, n'étaient pas des problèmes, et peut être ignorée:

enter image description here

L'exécution lipo -info sur mon application exécutable après cela montre le résultat souhaité:

lipo -info MyAppName
Architectures in the fat file: MyAppName are: armv6 armv7 

22voto

Paul Lalonde Points 3940

Xcode 4.5 rend iOS 4.3 la plus récente prise en charge de système d'exploitation, qui, de fait, les orphelins de l'iPhone original et la 3G.

Si vous voulez soutenir iOS versions antérieures à 4.3, vous aurez besoin de garder autour de 4,4 version de Xcode.

Pour être un peu plus clair : vous ne pouvez pas facilement (sens Xcode n'est pas out-of-the-box) support pré-4.3 appareils et utiliser les fonctionnalités d'iOS 6 dans la même application. C'est parce que iOS 6 fonctionnalités nécessitent XCode 4.5 qui fixe aussi les iOS 4.3 minimum OS pris en charge.

Donc, vous avez 3 choix :

  1. Continuer à utiliser XCode 4.4. Vous serez en mesure de cibler les pré-iOS 4.3. Vous ne serez pas en mesure de profiter des fonctionnalités d'iOS 6, mais votre application doit s'exécuter correctement sur elle, en supposant que vous effectuer des tests effectués sur de vrais iOS 6 appareils.
  2. Migrer vers XCode 4.5. Vous ne serez pas en mesure de cibler les pré-4.3 d'iOS, mais vous serez en mesure de profiter des fonctionnalités d'iOS 6.
  3. Faire deux versions de votre application. Construire une version de XCode 4.4 (comme dans l'option 1), et l'autre avec 4,5 (comme dans l'option 2). Du point de vue de la distribution, ces 2 apps différentes, ils ont chacun leur propre ID de lot, etc. Vous disposez de deux entrées dans l'app store.

Si vous êtes à l'aise d'aller au-delà de ce qui est pris en charge directement par Xcode, voir Nate réponse.

2voto

Scott Berrevoets Points 8932

L'original de l'iPhone et l'iPhone 3G sont les seuls appareils qui ne supportent pas l'iOS 5. L'iPhone 3G est maintenant 4 ans. Vous pouvez envisager d'enlever le support de l'iOS 4. Si vous ne voulez pas le faire, je pense que vous aurez à se développer dans deux différentes versions de Xcode.

2voto

Christian Fries Points 3010

Je suppose que l'supprimé le support de l'iOS 4.2.1 n'est pas le cœur du problème. En fait, j'ai essayé de travailler autour de ça, et procédez de la manière suivante:

  • Construire l'application avec le kit SDK d'iOS 6, réglage de la cible de déploiement d'iOS 4.2.1 (qui fonctionne).
  • Pack l'application ad hoc de l'installation et installer l'application sur un appareil iOS 4.2.1 (iPod touch 2G).
  • Test de l'application.

Toutefois, l'installation échoue. La raison ici est - à ma connaissance - pas la version iOS. La raison en est l'architecture. XCode 4.5 ne vous permet plus de construire pour armv6. Il s'appuie uniquement pour armv7. D'autre part: tous les périphériques qui ont armv7 ou mieux peut exécuter iOS 5. Les seuls appareils qui ne prennent pas en charge armv7 sont iPhone, iPhone 3G, iPod touch 1G et l'iPod touch 2G.

Donc pour moi la question est: pouvez-vous construire pour armv6 avec XCode 4.5 et iOS 6 comme base SDK?

Edit: ce Qui vous ne pouvez pas le faire, parce que l'iOS 6 base SDK n'est pas disponible pour armv6. Droit?

0voto

matsoftware Points 261

Je pense que le ciblage de 4.3 est le meilleur choix, en fonction de la version ios statistiques

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