en Xcode, je peux spécifier SDK de base. Je me demande comment cela fonctionne-t-il dans les coulisses? Si je suis en cours d'exécution d'une application, par exemple, sur un périphérique avec iOS 7 et ma base SDK est iOS 6, alors comment se fait-il que l'application a l'ancien "look et sensation"? Est-ce que Xcode compilait l'ancien SDK et l'inclure dans mon application ou une nouvelle version d'iOS est livrée avec des bibliothèques / sdks plus anciennes?
En d'autres termes, le temps d'exécution savait-il que cette application est compilée avec la base de la base inférieure SDK et quelque part dans le code de Uikit Il fait: p> ou l'application elle-même incluait-elle l'ancienne bibliothèque et le charger? p> Merci P> P>
7 Réponses :
BASE SDK est le SDK que vous souhaitez utiliser pour construire l'application. Utilisez "Cible de déploiement" pour spécifier le système d'exploitation minimum que vous souhaitez que votre application s'exécute. P>
Si vous voulez connaître la version iOS, Consultez cette question . < / p>
Désolé, cela ne résout pas la question.
Vous devez définir votre cible sur iOS 5.0 (via les paramètres de votre objectif de votre projet) pour vous assurer qu'aucune des méthodes iOS6 n'est utilisée (sinon une erreur de compilation vous empêchera de le construire).
Afin de supporter Nouvelles fonctionnalités et vérifiez si iOS6 est disponible sur l'appareil que vous avez deux manières: p>
Pendant la compilation (vous pouvez donc toujours construire votre application avec des cibles inférieures et plus récentes ensemble) Utilisez la macro p>
Aucun de cela ne répond à la question.
Les applications iOS sont Presque toutes les modifications apportées aux versions iOS sont additives et donc un
La construction d'applications utilisant la version inférieure fonctionne toujours sur les iOS plus élevés
Version. P>
blockQuote>
Cependant, nous devons prendre soin de ce point: p>
Comme les cadres évoluent par diverses sorties, les API sont introduites ou
Les dépréciations et les comportements des API existants peuvent parfois changer.
Apple fait tout effort pour minimiser les changements pouvant causer
Incompatibilités, dans certains cas, fournissant des comportements alternatifs basés sur des comportements alternatifs
sur la version-cadre. Dans de rares cas, votre code doit déterminer
la version-cadre et ajuster en conséquence p>
blockQuote>
Pour comprendre plus, lisez Ceci a> p>
Une autre citation pertinente de votre lien: "En tant que mécanisme de compatibilité arriéré, Apple Frameworks vérifie parfois la version du SDK Une application est construite et, s'il s'agit d'un SDK plus ancien, modifiez le comportement de la compatibilité. Cela se fait dans les cas où Apple prédit ou découvre des problèmes de compatibilité. "
Tout en mettant à jour les cadres Apple lui-même, Apple prend soin de la prise en charge de plusieurs versions iOS; Cependant, vous devez suivre des contrôles de base, qui sont expliqués ici p>
Votre projet est construit contre le SDK actuel. Si vous avez une cible de déploiement plus ancienne, votre base de code est compilée contre cela. Donc, si vous construisez contre 7,0, mais si vous avez une cible de déploiement de 6,0, les déprécations spécifiques de l'IOS 7 ne seront pas déclenchées. Tout sera compilé contre la cible de déploiement spécifiée la plus ancienne.
Cela mettra toutefois la pression sur vous en tant que développeur pour vous assurer que vous n'utilisez pas de code spécifique iOS 7. Le compilateur supposera toujours que vous voulez également permettre aux nouveaux utilisateurs d'exécuter votre application également et que toutes les méthodes les plus récentes sont disponibles pour vous et vos dernières version utilisateurs. Vous pouvez soit tester votre base de code par rapport au SDK plus ancien avec des appareils plus anciens ou des simulateurs pour vous assurer qu'il fonctionne bien, ou utilisez une application comme Déployermate qui testera des méthodes que vous utilisez qui pourrait potentiellement causer des problèmes. p>
Si vous envisagez d'utiliser l'une des dernières méthodes, vous devrez les envelopper dans le compilateur si la déclaration (comme Peter Fidemraizer a répondu) ou normal si des instructions vérifient la version dans le cadre de la fondation. P>
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { // Load resources for iOS 6.1 or earlier } else { // Load resources for iOS 7 or later }
BASE SDK signifie, le SDK que votre application va être construit. Les SDK ont des cadres, etc. qui sont différenciés comme la version des changements de SDK. Par exemple; p>
Disons que votre SDK de base actuelle dans votre Xcode est IOS 6: p>
Vous pouvez avoir les cadres et les foirs que IOS 6 SDK vous a fourni. p> li>
Votre application sera utilisable dans n'importe quel SDK iOS que vous spécifiez comme "minimum iOS SDK". Le périphérique IOS minimum vous donne quelques restrictions sur les composants à utiliser. Sois conscient de ça. P> li>
Votre application sera utilisée dans IOS 7 également, tout comme elle fonctionne dans iOS 5 ou iOS 6. Parce que les versions IOS ont une compatibilité ascendante. Cela signifie que IOS 7 dirigera les applications qui fonctionnent également dans IOS 6. P> LI> ul>
Disons que votre SDK de base actuelle est iOS 6 et vous voulez le faire iOS 7 P>
Votre application sera construite avec un tout nouveau SDK, donc si le nouveau SDK a Quelques gros changements, vous verrez les différences immédiatement lorsque Vous exécutez l'application. Par exemple, dans iOS 7 SDK, vous pouvez utiliser la barre d'état (20 px) en tant que composant d'affichage aussi. Qui peut ruiner votre hiérarchie de vue. P> li>
Vous devez tester votre application à nouveau pour vérifier que votre code est compatible avec iOS 7 P> LI>
Si vous souhaitez utiliser de nouveaux cadres ou fonctionnalités IOS 7, vous êtes correctement, vous pouvez les utiliser maintenant :) P> LI> ul>
En bref, base iOS SDK est sur quelle version iOS votre application est compilée et construite. Courir sur un iOS X? l'appareil est un concept différent. p>
J'espère que cela aide p>
Apple jamais changements strong> / supprime strong> / renorme forte> classes ou méthodes. Ils ne font qu'ajouter de nouveaux. C'est un point très important. Si c'est le cas, vous pouvez créer et déployer votre application. Étant donné que ces classes et méthodes ne seront jamais supprimées des versions plus récentes du cadre, votre application va bien fonctionner. P>
D'autre part, vous pouvez créer des applications et les déployer aux systèmes, ce qui ne supporte pas réellement le SDK actuel. Par exemple, vous pouvez utiliser Autolayout ( L'application s'effondrera sur des systèmes avant 10,7. P>
S'ils ne veulent plus que vous l'utilisiez plus, ils le marquent comme déprécié . p>
Au moment de la compilation, le compilateur vérifie si toutes les classes et les signatures de méthodes sont disponibles dans le SDK, votre création de votre application. p>
NslayoutConstraint Code> est disponible depuis 10.7) et déployez-le pour Mac OS X 10.6. Le compilateur ne dira pas un mot. p>
Donc, vous demandez essentiellement "comment était-ce conçu?" Et "pourquoi était-ce conçu de telle manière?". Je ne suis pas sûr pour la première question, mais pour le second, il y a un peu de développeurs à Apple qui peut répondre.