Est-il possible d'installer le SDK iOS 6 sur Xcode 5?

250

Xcode 5 a un volet de préférences qui permet de télécharger le simulateur iPhone 6.1, mais je ne trouve pas d'endroit où il permet le téléchargement du SDK iOS 6, il n'est donc pas possible de définir le SDK actif sur iOS 6 lors du développement avec Xcode 5 Existe-t-il une solution de contournement qui permettrait à Xcode 5 d'installer le SDK iOS 6?

ÉDITER:

Les solutions de contournement ne devraient plus être nécessaires maintenant que Xcode 5 est généralement disponible et vous permet de télécharger les versions précédentes du SDK.

entrez la description de l'image ici

Tony
la source
41
Pour profiter de nombreuses améliorations dans Xcode 5, tout en étant en mesure de créer une application pour l'App Store d'aujourd'hui.
Tony
61
Hé maddy, le point "d'embrasser iOS 7 de toute façon" n'est absolument pas lié à la version GA. La décision et l'effort de repenser l'ensemble du langage de conception et de l'expérience utilisateur d'une application pour se conformer au design plat et aux composants d'interface utilisateur iOS7 redessinés ne sont ni petits, ni faciles à faire du point de vue commercial et temporel. La construction par rapport au SDK 6.1 permettra à iOS7 d'utiliser le langage de conception d'interface utilisateur d'iOS 6 et versions antérieures (à des fins de prise en charge en amont). Ainsi, il peut être très bien garanti que nous souhaitons développer dans Xcode 5 contre le SDK 6.1 pour un bon moment à venir.
Marchy
2
hmmm peut-être parce qu'il s'attend à ce que le SDK soit séparé de l'IDE, au lieu d'une pile monolithique de code?
phreakhead
1
Je travaille actuellement avec un client qui n'est pas prêt à accepter les modifications de l'interface utilisateur IOS7, mais qui peut bénéficier des améliorations de la migration de Core Data dans XCode 5. Donc, dans ce cas, c'est exactement ce que je veux aussi.
Droid Chris
On pourrait penser que Xcode, s'il n'inclut pas le SDK 6.1, l'intégrerait au moins en douceur. Mais il y a ensuite ce problème .
JohnK

Réponses:

203

EDIT: à partir du 1er février 2014, Apple n'acceptera plus les applications pré-iOS7 pour les soumettre à l'App Store. Ainsi, bien que cette technique fonctionne toujours, elle ne sera pas utile pour la plupart des lecteurs.


Oui, ça va. Je construis toujours avec iOS 4.3 pour un projet (cela fait un moment que nous avons mis à jour; mais ils l'ont toujours accepté après la sortie d'iOS 6), et je construis actuellement 10,5 applications avec Xcode 5.

Voir Comment pointer Xcode vers un ancien SDK pour qu'il puisse être utilisé comme "SDK de base"? pour plus de détails sur la configuration. Vous pouvez utiliser mon script fix-xcode pour tout lier à chaque fois que vous effectuez une mise à niveau.

La seule astuce consiste à obtenir les anciens SDK. Si vous ne les avez pas, vous devez généralement télécharger les anciennes versions de Xcode (toujours disponibles sur developer.apple.com ), ouvrir le package d'installation et rechercher pour trouver le SDK dont vous avez besoin.

Les SDK se trouvent dans le package d'installation à l'adresse suivante:

Xcode.app/Contents/Developer/Platforms/

Rob Napier
la source
devez-vous supprimer le SDK iOS 7 lors de l'archivage pour vous assurer qu'il se construit avec le SDK iOS 6?
ohayon
6
salut. c'est proche mais pas tout à fait pour moi. les boutons ressemblent à iOS 6 mais le contenu du contrôleur de vue monte toujours derrière la barre de navigation lors de l'utilisation d'un UINavigationController. des réflexions sur la façon d'obtenir le comportement iOS 6 pour cela aussi?
matt bezark
2
Non; vous ne verrez cela que sur l'appareil. Il n'y a pas de mode de compatibilité iOS 6 dans le simulateur iOS 7. Si vous voulez voir à quoi cela ressemble dans le simulateur, testez sur le simulateur iOS 6.
Rob Napier
1
Puis-je soumettre l'application créée avec Xcode 5 et le SDK iOS 6 sur l'App Store?
hujunfeng
1
Tant que l'iPad 1 est toujours pris en charge, vous pouvez toujours supposer qu'Apple acceptera iOS 5.X. Il ne peut pas être mis à niveau.
ahwulf
60

J'exécutais également le même problème lorsque j'ai mis à jour vers xcode 5, il a supprimé l'ancien sdk. Mais j'ai pris la copie de l'ancien SDK d'un autre ordinateur et le même que vous pouvez télécharger à partir du lien suivant.

http://www.4shared.com/zip/NlPgsxz6/iPhoneOS61sdk.html
(www.4shared.com test account [email protected]/test)

Il y a 2 façons de travailler avec.

1) Décompressez et collez ce dossier dans /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs et redémarrez le xcode.

Mais cela pourrait à nouveau être supprimé par Xcode si vous mettez à jour xcode.

2) Une autre façon est de décompresser et de coller où vous voulez et accédez à /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs et créez un lien symbolique ici, afin que le SDK reste le même, même si vous mettez à jour le Xcode.

Une autre modification que j'ai apportée, Build Setting> Architectures> standard (not 64) so ​​list all the toutes les versions de Deployment Target

Pas besoin de télécharger le zip si vous ne souhaitez modifier que la cible de déploiement.

Voici quelques captures d'écran. entrez la description de l'image ici entrez la description de l'image ici

AvtarSingh Suchariya
la source
2
comment et où avez-vous téléchargé ce SDK ios6.1? Je cherche iOS 5 sdk pour fonctionner avec mon Xcode 5. Pouvez-vous télécharger cela ou pointer en moi où je peux le télécharger moi-même. Merci
Sam B
En fait, j'ai aussi l'ancien système. donc je l'ai pris de l'ancien xcode. De même, j'ai essayé pour ios sdk 5, mais comme je n'en avais pas vraiment besoin, je n'ai pas essayé de le retirer. De plus, si cette réponse semble bonne, j'apprécie vos commentaires en termes de + ou -. Je vous remercie.
AvtarSingh Suchariya
1
Hé Avtar, j'ai téléchargé votre zip ios6, l'ai décompressé sous le chemin d'emplacement que vous aviez répertorié, fermé complètement xcode 5, relancé à nouveau et pourtant je ne vois toujours que 7.0 comme cible déployable dans l'option déroulante. Je suppose qu'il manque des étapes et qu'il y en a plus?
Sam B
La même chose fonctionne pour moi. Juste une question, avez-vous ajouté ceci dans l'application xcode elle-même ou créé un lien symbolique?
AvtarSingh Suchariya
directement à l'app dir lui-même.
Sam B
34

Oui, je viens de résoudre le problème aujourd'hui.

  1. Recherchez le fichier SDK, comme iPhoneOS6.1.sdk, dans votre ancien répertoire Xcode ou celui de votre ami.
  2. Copiez et placez-le dans le répertoire Xcode 5: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.

entrez la description de l'image ici

Ensuite, vous pouvez choisir le SDK comme ci-dessous:

entrez la description de l'image ici

J'espère que cela vous aidera.

Jason Lee
la source
2
J'ai fait la même chose, mais mon interface graphique de l'application change et elle ressemble à l'interface graphique iOS 7. J'ai choisi le simulateur iPhone Retina (4 pouces 64 bits) pour exécuter l'application. Il me manque autre chose après avoir fait ça.
python
20

Recherchez et téléchargez l'ancien SDK. Les anciens SDK se trouvent ici .

J'ai copié le répertoire xcode.app en tant que Xcode_4.6.3.app.

Vous pouvez maintenant tester et déboguer dans les deux versions de xcode. Vous devez les exécuter à partir des dossiers correspondants ou créer des raccourcis sur votre bureau. Lors de la construction à partir de la ligne de commande, donnez le paramètre au iPhoneOS6.1lieu deiPhoneOS7.0

Cela a très bien fonctionné pour moi dans Xcode5 et iOS.

Allez dans le répertoire SDK de Xcode5. Il est généralement situé à:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

Ajoutez un lien symbolique vers l'ancien SDK comme ceci:

sudo ln -s /Applications/Xcode_4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk iPhoneOS6.1.sdk

Ou plus précisément de n'importe où dans la ligne de commande,

sudo ln -s /Applications/Xcode_4.6.3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk  /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
Karim
la source
Nous pouvons utiliser cette option pour tester notre application, mais probablement après février 2014, toute application construite avec un sdk iOS 7 antérieur ne sera pas acceptée dans l'App Store!
karim
11

Vous pouvez télécharger l'ancien SDK et l'installer dans

Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/

dossier. Déconnexion + Connexion juste pour vous assurer que les changements prennent effet et vous devriez voir l'ancien SDK dans votre nouveau XCode

bavardage
la source
Je l'ai fait (en utilisant le lien de téléchargement dans une réponse précédente), et le choix du sdk iOS 6.1 apparaît dans xcode 5 sous Paramètres de construction> Architectures> SDK de base. Cependant, lorsque je crée et exécute sur un simulateur iOS 7 (ou un appareil iOS 7), il utilise toujours des boutons iOS 7 UIKit (pas des versions iOS 6). Si quelqu'un a des suggestions sur la raison, je vous serais reconnaissant ....
Bill Patterson
Si TimeMachine est installé, vous pouvez ouvrir le chemin ci-dessus (dans le type de terminal: ouvrir "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/") et restaurer le SDK iOS6.1 à partir de là .
avance
11

Juste pour ajouter, vous pouvez réellement télécharger les anciennes versions du simulateur avec Xcode 5 lui-même - allez simplement dans les préférences et vous les trouverez sous Téléchargements:

entrez la description de l'image ici

Smikey
la source
Cela doit être arrivé depuis que xcode 5 est sorti de la version bêta et est maintenant une version générale. Bon à savoir, merci Smikey
Tony
5
@Manni Ce n'est pas la même chose que la compilation avec l'ancienne API. Vous construisez en utilisant la nouvelle API pour iOS 6.
oligofren
Ces options n'apparaissent pas par défaut sur Xcode 6 même si vous avez défini une plateforme cible plus ancienne.
GilesDMiddleton
10
  • Téléchargez Xcode 4.6.x depuis l'Apple Dev Center: https://developer.apple.com/downloads/index.action
  • Créez un dossier appelé Xcode4 dans le dossier Applications et faites-y glisser le dmg téléchargé.
  • Ouvrez une fenêtre de terminal

    $sudo cp -R /Applications/Xcode4/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  • Vous serez invité à entrer un mot de passe car vous êtes dans un dossier système

  • Ouvrez Xcode 5 et vous devriez maintenant voir les deux SDK
autremoi
la source
10

Pour moi, la solution la plus simple:

  1. Localisez un SDK plus ancien comme par exemple "iPhoneOS6.1 sdk" dans une ancienne version de xcode par exemple. Si ce n'est pas le cas, vous pouvez le télécharger à partir du serveur de développement Apple à cette adresse: https://developer.apple.com/downloads/index.action?name=Xcode Lorsque vous ouvrez le xcode.dmg, vous pouvez le trouver en ouvrant le Xcode.app (clic droit et "afficher le contenu") et accédez à Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS6.1 sdk entrez la description de l'image ici
  2. Copiez simplement le dossier iPhoneOS6.X sdk et collez-le dans votre xcode.app
    • faites un clic droit sur votre xcode.app dans le dossier Applications.
    • Accédez à Contents / Developer / Platforms / iPhoneOS.platform / Developer / SDKs /
    • Collez simplement ici.

entrez la description de l'image ici

  1. Fermez votre application xcode et rouvrez-la à nouveau.

Pour tester une application dans iOS 6 sur votre simulateur: - Choisissez simplement iOS 6.0 dans votre programme actif. entrez la description de l'image ici

Pour créer votre application dans iOS 6, la conception de votre application sera donc la conception la plus ancienne sur un iPhone avec iOS 7: - Choisissez iOS6.1 dans Targets - Base SDK

entrez la description de l'image ici

Remarque: lorsque vous modifiez le SDK de base dans vos cibles, iOS 7.0 ne sera plus disponible pour construire sur le simulateur!

Daniel C.
la source
9

Peut le faire , mais pas vraiment nécessaire

Comment faire

Jason Lee a obtenu la réponse. Lors de l'installation de xCode, j'ai préféré conserver les installations précédentes plutôt que de les remplacer. Je les ai donc dans mon dossier d'installation

entrez la description de l'image ici

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKsContenez donc différents sdks. (Remplacez Xcode.app par le numéro correct) copiez les sdks précédents dans

/Applications/Xcode 3.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

Voici mon dossier après en avoir copié un.

entrez la description de l'image ici

Redémarrez maintenant xCode et vous pouvez définir les versions précédentes de sdks comme sdk de base.

Pourquoi ce n'est pas nécessaire

Référencer Apple Documentaion

Pour utiliser un SDK particulier pour un projet Xcode, effectuez deux sélections dans les paramètres de construction de votre projet.

  1. Choisissez une cible de déploiement .

    Cela identifie la première version du système d'exploitation sur laquelle votre logiciel peut s'exécuter.

  2. Choisissez un SDK de base

    Votre logiciel peut utiliser les fonctionnalités disponibles dans les versions du système d'exploitation jusqu'à et y compris celle correspondant au SDK de base. Par défaut, Xcode définit cela sur le dernier système d'exploitation pris en charge par Xcode.

La règle est Utiliser le dernier SDK de base et définir la cible de déploiement sur l'application de version minimale censée s'exécuter

Par exemple, vous pouvez utiliser iOS 7 comme sdk de base et définir iOS 6 comme cible de déploiement. Exécutez sur le simulateur iOS 6 pour tester son fonctionnement sur iOS 6. Installez le simulateur s'il n'est pas disponible avec la liste des simulateurs.

entrez la description de l'image ici

De plus, vous pouvez utiliser inconditionnellement des fonctionnalités jusqu'à iOS 6. Et conditionnellement, vous pouvez prendre en charge les nouvelles fonctionnalités d'iOS 7 pour les nouveaux appareils mis à jour tout en prenant en charge les versions précédentes.

Cela peut être fait en utilisant les classes Faiblement liés , Méthodes Faiblement liés , fonctions et symboles

https://developer.apple.com/library/ios/documentation/developertools/conceptual/cross_development/Using/using.html#//apple_ref/doc/uid/20002000-SW3

Liens faibles

Supposons que dans Xcode vous définissez la cible de déploiement (version minimale requise) sur iOS6 et le SDK cible (version maximale autorisée) sur iOS7. Pendant la compilation, le compilateur relierait faiblement toutes les interfaces introduites dans iOS7 tout en reliant fortement les interfaces antérieures. Cela permettrait à votre application de continuer à fonctionner sur iOS6 tout en profitant des nouvelles fonctionnalités lorsqu'elles sont disponibles.

MadNik
la source
4

Les autres réponses ici sont également correctes, mais je trouve que les étapes suivantes sont les plus simples:

Téléchargez simplement Xcode 4.6.3 à partir du lien vers le centre de développement qui dit "Vous cherchez une ancienne version de Xcode?" (pointe actuellement ici ) et montez le dmg.

Puis dans le terminal, copiez les fichiers SDK sur:

cp -R /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/

Enfin, relancez Xcode et vous avez terminé.

nioq
la source
3

Mon application a été transférée de manière transparente vers Xcode 5 car elle peut toujours être construite avec la cible de déploiement iOS d'origine que vous avez définie dans le projet (5.1 dans mon cas). Si le nouveau SDK ne cause pas de problème insurmontable, alors pourquoi ne pas le construire? Il y a sûrement de nombreuses améliorations sous le capot.

Par exemple, je préférerai de loin utiliser Xcode 5 au lieu de Xcode 4.6.3. Pourquoi? J'obtiendrai beaucoup plus d'autonomie de la batterie, car le défilement de l'interface utilisateur des zones de texte / code dans Xcode 5 ne mâche plus tout un thread de CPU.

Steven Lu
la source
Raisons de ne pas le faire - Xcode 5 est assez instable pour le moment. Crashing horaire pour moi. Également des problèmes de position étranges et des problèmes de couleur dans certaines vues (mais pas beaucoup de travail à corriger)
Nick H247
2

Lier le SDK 6.1 à Xcode 5 comme décrit dans les autres réponses est une étape. Cependant, cela ne résout toujours pas le problème de l'exécution sur iOS 7 de nouveaux éléments d'interface utilisateur, les contrôleurs de vue sont créés en taille réelle, etc.

Comme décrit dans cette réponse, il est également nécessaire de passer l'interface utilisateur en mode hérité sur iOS 7:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"UIUseLegacyUI"];
[[NSUserDefaults standardUserDefaults] synchronize];

Attention: il s'agit d'une clé non documentée et déconseillée pour les builds de l'App Store!

De plus, d'après mon expérience lors des tests sur l'appareil, j'ai constaté que cela ne fonctionne que la deuxième fois que je lance l'application même si j'exécute le code assez tôt dans le lancement de l'application, dans +[AppDelegate initialize] . Il existe également de subtiles différences avec une version construite à l'aide de Xcode 4.6. Par exemple, les barres de navigation transparentes se comportent différemment (ce qui rend la vue en taille réelle).

Cependant, comme Xcode 4.6.3 plante sur Mavericks (du moins pour moi, voir rdar: // 15318883 ), c'est au moins une solution pour continuer à utiliser Xcode 5 pour le débogage.

Ortwin Gentz
la source
1

J'ai téléchargé XCode 4 et pris le SDK iOS 6.1 vers le XCode 5 comme décrit dans d'autres réponses. Ensuite, j'ai également installé iOS 6.1 Simulator (il était disponible dans les préférences). J'ai également basculé le SDK de base sur iOS 6.1 dans les paramètres du projet.

Après toutes ces manipulations, le projet avec le sdk de base 6.1 s'exécute en mode de capacité de comp dans iOS 7 Simulator.

OneSman7
la source
1

À partir du 1er février, Apple rejettera les applications conçues uniquement pour iOS6 ou une version antérieure. Voici également la communication officielle d'Apple. Mieux vaut commencer à construire pour iOS7.

Pour clarifier ma déclaration: si vous construisez pour iOS6 ou une version antérieure, Apple rejettera votre application. Si vous construisez pour iOS7 ET abaissez tout va bien, cela signifie:

  1. vous devez utiliser xcode5
  2. vous devez au moins déployer sur iOS7.

Le contenu de l'e-mail Apple est assez clair pour moi

"Assurez-vous que vos applications fonctionnent de manière transparente avec les technologies innovantes d'iOS 7. À partir du 1er février, les nouvelles applications et mises à jour d'applications soumises à l'App Store doivent être construites avec Xcode 5 et le SDK iOS 7."

Andrea
la source
Oui, mais le SDK iOS 6 fonctionne également bien avec iOS 7. Certaines applications sont vraiment difficiles à changer.
Aniruddh Joshi
Je pense que vous vous trompez. Apple nécessite (a) Construit par le dernier Xcode 5, et (b) optimisé pour iOS 7. Voir mon commentaire sur la réponse de Rob Napier pour les liens.
Basil Bourque
Certains d'entre nous développons pour la distribution d'entreprise et doivent cibler des SDK (et appareils) plus anciens. Les applications d'entreprise ne passent pas par le processus de révision Apple et / ou l'App Store, et cette discussion est très utile, reste pertinente et continuera de l'être à l'avenir. Je comprends votre point de vue, mais ce n'est pas le seul.
Kevin OMara
Tu as complètement raison!!! Je n'ai pas pensé à la distribution d'entreprise. Mais n'oubliez pas que vous pouvez toujours déployer sur iOS6 avec le nouveau Xcode simplement en définissant la cible de déploiement, sans vous soucier de l'optimisation ios7 et du processus de révision.
Andrea
0

J'ai actuellement Xcode 4.6.3 et 5.0 installé. J'ai utilisé le script bash suivant pour lier 5.0 aux SDK de l'ancienne version:

platforms_path="$1/Contents/Developer/Platforms";
if [ -d $platforms_path ]; then
    for platform in `ls $platforms_path`
    do
        sudo ln -sf $platforms_path/$platform/Developer/SDKs/* $(xcode-select --print-path)/Platforms/$platform/Developer/SDKs;
    done;
fi;

Il vous suffit de lui fournir le chemin d'accès au .app:

./xcode.sh /Applications/Xcode-463.app
Wayne
la source
Notez que la mise à niveau vers 5.1 a supprimé mon SDK 7.0.x et l'a remplacé par le SDK 7.1. J'ai une ancienne installation Xcode5-DP6dont j'ai pu récupérer 7.0.x, mais c'est un bon rappel pour sauvegarder les répertoires du SDK (ou renommer complètement l'application) avant de mettre à niveau ou d'installer la dernière version de Xcode.
Wayne