Quelle est la signification du SDK de base, de la cible de déploiement iOS, de la cible et du projet dans xcode

162

Disons que j'ai défini le SDK de base sur 7, qu'est-ce que cela signifie? Cela pourrait signifier que l'application fonctionnerait sur iOS 7. Mais c'est à cela que sert la cible de déploiement iOS.

Aussi pourquoi dois-je spécifier ces 3 valeurs à la fois dans le projet et dans la cible. Cela n'a pas de sens. Pourquoi spécifier deux fois la même chose?

user4951
la source
Il y a une bonne réponse concise à cela sur une autre question plus récente: stackoverflow.com/a/41278576/498949
Chris Rae

Réponses:

80

Le SDK de base est ce sur quoi vous construisez votre application (c'est-à-dire les fichiers et frameworks d'inclusion et de bibliothèque). Comme vous le dites, cela n'affecte pas la cible de déploiement, sauf que base sdk> = cible de déploiement.

Vous spécifiez les paramètres de construction sur 2 niveaux car chaque projet peut avoir plusieurs cibles et vous pouvez ne pas souhaiter les mêmes paramètres pour toutes les cibles. Les paramètres au niveau du projet remplacent les paramètres par défaut et les paramètres au niveau de la cible remplacent les paramètres au niveau du projet.

Par exemple, j'ai des projets avec des cibles OSX et iOS et certains sont ARC et certains sont MRR. Je devrais avoir différents projets pour chacun si je ne pouvais pas spécifier les paramètres de construction avec le niveau de granularité autorisé par Xcode.

cheval de Troie
la source
197

Dans iOS 7 TechTalk , session Architecting Modern Apps, Part 2, ils expliquent cela clairement

entrez la description de l'image ici

Bonne lecture Salut! Je suis disponible!

Ainsi, une application moderne peut utiliser iOS 9 comme SDK cible et iOS 7 comme cible de déploiement. Cela signifie que vous pouvez exécuter sur iOS 7, iOS 8 et iOS 9, et que vous avez à votre disposition tous les appels iOS 9 lorsque vous utilisez réellement iOS 9.

Vous pouvez en savoir plus dans mon post SDK et cible de déploiement

onmyway133
la source
20
Bonne référence .. et cette partie est enterrée vers 25h17 dans cette vidéo de 50 min.
Daniel
2
Agréable! Mais que se passe-t-il si vous définissez le SDK de base = 7.0 et que vous essayez d'installer dans iOS 8.0? Devons-nous télécharger le dernier XCode pour prendre en charge le dernier SDK de base tout le temps?
GoRoS
2
@chichilatte non, vous n'en avez pas besoin. L'application prend toujours en charge iOS 12, iOS 13, ... mais elle n'aura pas de nouvelles fonctionnalités d'iOS 12, iOS 13 .... Pour utiliser la nouvelle fonctionnalité d'iOS 12, vous devez compiler avec le SDK iOS 12 et utiliser API d'iOS 12.
onmyway133
3
Merci, cela a du sens. Je pense que le commentaire de @ Kunal-Balani ci-dessus est faux.
chichilatte
2
@ Kunal-Balani, les autres commentateurs ont raison. Vous n'êtes pas obligé de recompiler votre application si une version plus récente du système d'exploitation est disponible que celle sur laquelle vous vous êtes basé, à moins qu'elle n'ait supprimé la prise en charge de ce que votre application utilise actuellement . Un système d'exploitation plus récent ne signifie pas soudainement que votre application construite avec l'ancien SDK cesse de fonctionner. Si tel était le cas, personne ne ferait jamais de mise à niveau, car cela signifierait que toutes les applications dont ils disposent actuellement cesseraient de fonctionner jusqu'à ce que de nouvelles versions sortent, ce qui n'est tout simplement pas vrai.
Mark A. Donohoe
67

Le SDK de base est le SDK auquel vous associez. La cible de déploiement est la version iOS minimale requise dont votre application a besoin pour s'exécuter. Vous pouvez créer une application avec SDK 7 qui s'exécute sous iOS 6. Mais alors vous devez faire attention à ne pas utiliser de fonction ou de méthode qui n'est pas disponible sur iOS 6. Si vous le faites, votre application plantera sous iOS 6 dès que cette fonction est utilisée.

Consultez la documentation Apple pour plus de détails: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html

V1ru8
la source