Targets / Configurations / Schemes
MrT
Membre
Bonjour à tous!
Je me rends compte que je sous-utilise XCode et les fonctionnalités qu'il offre et je me penche actuellement sur les notions de Targets, Configurations et Schemes. L'idée derrière tout ça serait de faciliter le plus possible les différents cas de distribution de mes builds (activer ou non certaines options comme "Strip Debug Symbols During Copy" pour mes builds Test Flight etc.).
J'ai déjà fait quelques recherches mais j'aimerais être sur de comprendre les différences entre 1 target, 1 configuration et 1 scheme et ce qui lie ces entités entre elles (1 scheme a 1 configuration ? etc.).
Merci d'avance pour vos réponses /thumbsup.gif' class='bbc_emoticon' alt=' ' />
MrT
Je me rends compte que je sous-utilise XCode et les fonctionnalités qu'il offre et je me penche actuellement sur les notions de Targets, Configurations et Schemes. L'idée derrière tout ça serait de faciliter le plus possible les différents cas de distribution de mes builds (activer ou non certaines options comme "Strip Debug Symbols During Copy" pour mes builds Test Flight etc.).
J'ai déjà fait quelques recherches mais j'aimerais être sur de comprendre les différences entre 1 target, 1 configuration et 1 scheme et ce qui lie ces entités entre elles (1 scheme a 1 configuration ? etc.).
Merci d'avance pour vos réponses /thumbsup.gif' class='bbc_emoticon' alt=' ' />
MrT
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour chaque projet tu peux avoir plusieurs targets qui sont le produit de ton projet. Aujourd'hui c'est principalement utilisé pour ton application et son bundle de test unitaire. Sur iOS il n'y a pas grand chose à faire de plus. Sur OS X on peut ajouter des outils secondaire comme autre target (par exemple une ligne de commande pour contrôler ton application). Quand il y a plusieurs target sur un projet généralement on va créer une autre target qui est un agrégat des précédentes pour tout builder.
Avant, jusqu'à Xcode 3, on pouvait avoir plusieurs configuration (Release, Debug, OptionA, OptionB) qui permettait d'avoir pour une même target plusieurs scénario de compilation (le plus intéressant étant de pouvoir modifier entre chaque config les -D pour la compilation conditionnelle). Aujourd'hui sur Xcode 4 on a plus que Release et Debug, je n'ai pas trouvé comment en avoir d'autres.
Les schéma c'est le dernier arrivé, un peut bizarre comme truc, ça permet en fait de configurer les scénario de compilation pour choisir la build config et des options d'execution, d'archivage, etc. Le soucis de ce truc c'est qu'on n'est restreint aux scénario proposés par Apple (Build, Run, Test, Profile, Analyze et Archive). On ne peut pas créer un Build for bidule, l'intérêt est donc très limité.
De ce que tu décris, c'est clairement les configurations que tu devrai toucher, et ensuite ajouter un nouveau schéma qui vient utiliser cette configuration. Mais toujours sur la même target (ne duplique pas les target pour une même application sinon tu va devenir fou à devoir rajouter les fichier pour chaque cible). Mais comme je disais plus haut, je n'ai pas retrouvé l'option permettant de rajouter des configuration. Si quelqu'un sait comment je suis preneur.
Si tu veux gérer d'autres configurations, ou baser tes configurations sur des fichiers xcconfig de configuration, etc, sélectionne le projet dans le "Project Navigator" à gauche, puis dans l'écran qui s'affiche au centre, sélectionne ton projet (et non une des target).
Dans l'onglet "Info" tu vas alors pouvoir gérer les différentes configurations de ton projet, ainsi que les diverses localisations qu'il gère (et même indiquer la configuration à utiliser par défaut si tu compiles ce projet avec xcodebuild en ligne de commande sans préciser de config spécifique)
Moi je décrirais ça comme ça :
Un target a des réglages (Build Settings) qui peuvent être différents en Debug et en Release par exemple, mais a aussi une liste de fichiers qu'il va compiler. Par exemple ton target de tests unitaires va compiler les fichiers métier de ton application ainsi que les sources de tes fichiers unitaire,s mais le target de ton application ne va pas compiler les fichier de tests unitaires, il n'a pas besoin de les include dans l'application finale. Aussi, si tu voulais générer par exemple 2 versions de ton application, disons une version "Lite" et une version "Pro", tu pourrais imaginer avoir un target "Lite" et un target "Pro", chaque target incluant certains fichiers et pas d'autre, et la target Pro pouvant définir la directive de compilation "PRO=1" te permettant de tester dans ton code "#ifdef PRO" ... "#endif" pour inclure certain bouts de code uniquement dans la version PRO, etc
Ah bah il était tellement sous mes yeux que je ne l'ai pas vu !
Perso je trouve ce truc utile quand tu fais de la compilation conditionnelle (essentiellement sous Mac) et que tu as besoin de plus de détail que du simple Release / Debug.
La seule fois où j'ai créé une config perso c'était en Xcode 3 pour me faire une config spéciale "AppStore" différente de ma config "Release" utilisée pour les livraisons OTA, pour permettre de choisir si je devais taper sur le serveur de preprod ou de prod.
Sauf qu'au final au passage à Xcode4, et avec la possibilité offerte par les Scheme d'automatiquement sélectionner une config différente qd on "Run" et quand on "Archive", je n'en ai plus eu l'utilité et suis revenu au Debug et Release, en ayant configuré mon scheme correctement, car il se trouve que ça me convenait mieux. Mais j'aurais pu garder aussi cette configuration "AppStore" dédiée si j'avais préféré aussi !
Au final, bien sûr dans certains cas il se peut que ces 2 configurations ne suffisent pas c'est pourquoi tu peux en créer d'autres. C'est juste que pour mon cas en pratique j'ai toujours fini par me contenter des 2 par défaut /wink.png' class='bbc_emoticon' alt=';)' />
Dans mon cas j'ai choisi de garder la même Target, de créer une configuration "Ad hoc" (pour mes builds TestFlight) et de créer un schéma "Ad hoc" (qui utilise la configuration "Ad hoc").
Ma configuration "Ad hoc" set par exemple "Strip Debug Symbols During Copy" à NO (à la différence de Release). Grâce au scheme je peux très rapidement archiver l'application (avec la configuration "Ad hoc" donc) et l'uploader sur TestFlight.
Encore merci pour ces explications qui m'aident et m'aideront beaucoup /cool.gif' class='bbc_emoticon' alt='8--)' />
MrT