Récupérer des paramètres de build
Ceetix
Membre
Salut tout le monde,
Voilà , j'execute une requête avec une URL. Cette URL peut changer en fonction de ce que l'utilisateur fait dans le Settings.app.
Les URL sont toujours les mêmes.
J'aimerai savoir s'il y a un moyen de rentrer mon tableau d'URL dans les paramètre de build (ou une URL selon un scheme particulier) et que mon applicatif choisisse tout seul selon un type de scheme, quelle URL injecter dans ma requête.
Ainsi l'user n'aurait rien à faire et l'URL envoyé dépendrai juste du scheme choisi lors de la compilation. N'ayant pas trop joué avec tout ça je ne sais pas du tout si c'est possible ...
Merci /smile.png' class='bbc_emoticon' alt=':)' />
Voilà , j'execute une requête avec une URL. Cette URL peut changer en fonction de ce que l'utilisateur fait dans le Settings.app.
Les URL sont toujours les mêmes.
J'aimerai savoir s'il y a un moyen de rentrer mon tableau d'URL dans les paramètre de build (ou une URL selon un scheme particulier) et que mon applicatif choisisse tout seul selon un type de scheme, quelle URL injecter dans ma requête.
Ainsi l'user n'aurait rien à faire et l'URL envoyé dépendrai juste du scheme choisi lors de la compilation. N'ayant pas trop joué avec tout ça je ne sais pas du tout si c'est possible ...
Merci /smile.png' class='bbc_emoticon' alt=':)' />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu peux donner à ce flag des valeurs différentes selon les diverses configuration (par défaut il y a une configuration Debug et une Release, mais tu peux en créer d'autres et affecter des configurations spécifiques à tes schemes selon tes besoins (j'ai pas trop compris en vrai ce que tu recherchais si c'était en fonction des Build Settings ou des NSUserDefaults appliqués dans Settings.app ?)
Par exemple pour la configuration Debug tu pourrais définir le flag -DDEST_URL="http://monurl1" et pour la configuration Release définir le flag -DDEST_URL="http://monurl2". Ensuite bah dans ton code tu utilises DEST_URL comme si tu avais fait un #define DEST_URL "..." au début de ton code, par exemple NSURL* url = [NSURL URLWithString: @ DEST_URL];
Ca marche bien, mon flag est bien reconnu dans mon code. Par contre impossible de le logger.
Le compilateur aime pas. "Unexpected '@'; ou stray '@';
http://monurl1];[/font][font=helvetica, arial, sans-serif] [/font]il n'aime pas.
Faut la stringizer quand tu l'utilises dans ton code, en mettant un # devant DEST_URL pour qu'il l'encadre de guillemets. Et bien sûr toujours mettre le @ devant pour en faire une NSString :
[font=courier new,courier,monospace][NSURL URLWithString:@#DEST_URL];[/font] // sera transcrit à la précompilation en [NSURL URLWithString:@"http://monurl1"];
Je fais :
J'ai toujours stray @ et stray #
Evidemment si tu demandes de générer la sortie du preprocessor, par définition vu que le boulot du preprocessor c'est de dérouler les macros pour les remplacer par leur valeur, c'est normal que tu ne trouves pas DEST_URL dans cette sortie preprocesseur.
Mais tu vois quoi autour du code où tu as utilisé cette macro ? Elle a été transformée en quoi ? C'est ça la quesiton. Fais une recherche, dans le code généré par le préprocesseur, pour trouver un bout de code / nom de fonction qui est aux alentours de là où tu as utilisé ta macro DEST_URL, pour trouver rapidement la partie de code qui t'intéresse, et regarde en quoi le DEST_URL de ton code a été transformé par le préprocesseur quand il a transformé la macro.
Si tu as toujours le texte "DEST_URL" dans la sortie du préprocesseur par contre, c'est qu'il ne l'a pas considéré comme une macro, donc que tu as mal utilisé le flag -DDEST_URL (c'est "-D" suivi du nom de la macro suivi de "=" suivi de sa valeur. Vérifie que tu n'as pas mis "-DEST_URL=blabla mais bien -DDEST_URL=blabla par exemple)
Je vois juste pas vraiment l'intérêt réel de passer par les other C flags pour ce cas là . C'est un peu se compliquer pour rien non ? D'autant plus que pour la reprise de code par la suite, pour changer l'url on aura plus tendance à chercher dans le code que dans les C flags...
Mais sinon, éclairez moi...
@Ali Ok ok. Je résume. En C flag j'ai donc mis
Ensuite dans mon code j'ai fait :
Quand je lis le proprocessed outpu j'ai :
Il zappe les '/'. Si j'enlève mon http:// j'ai bien le reste de l'adresse. Par contre je n'ai pas de guillemets d'où le soucis à la compilation.
Edit : bon ça marche si je mets en flag :
Merci tout le monde /smile.png' class='bbc_emoticon' alt=':)' />
C'est interprété comme un commentaire 'C' par le preprocesseur, ce qui est discutable mais bon... Les preprocesseurs, c'est un peu la jungle, y'a pas vraiment de règles claires.
Une autre technique consiste à stringifier comme l'a dit Ali mais en passant par deux macros :
Bizarrement, ici cela ne fonctionne pas à cause du "//" qui est interprété comme un commentaire.
Du coup j'ai essayé le "PASTING" avec l'opérateur ##
Mais ça ne fonctionne pas non plus... Je laisse tomber.
et pour Release:
ou tu peux définir ça dans ton code comme suit:
Tu peux faire ceux ci pour initialiser ta variable :
Sinon j'en profite pour dire que ce genre de config c'est aussi parfois plus pratique de les écrire dans un fichier de config. Genre prévoir un fichier Debug.xcconfig et Release.xcconfig, chacun ayant la définition souhaitée pour la clé de config OTHER_C_FLAGS, et baser sa config Debug sur Debug.xcconfig et baser Release sur Release.xcconfig.
Pour créer un fichier de config c'est simple :
C'est plus compliqué à expliquer qu'à faire en fait ^^
Et ça permet d'avoir un fichier texte facilement éditable regroupant les clés majeures qu'on peut vouloir modifier souvent, ou isoler les clés comme ton OTHER_C_FLAGS et les settings qui n'impactent pas forcément directement la façon de compiler le projet mais plus les valeurs de constantes, etc. Ca permet aussi de mutualiser certaines clés entre plusieurs configs (d'autant que dans un fichier xcconfig on peut faire des #import d'autres fichiers xcconfig, et ça c'est pratique des fois !)