Modification de l'URL de base en fonction de la valeur de macro du préprocesseur

J'ai un projet avec quelques projets, un pour EA, Staged et Production.

Je veux être en mesure de définir mon URL de base en fonction de la configuration de construction que je cours.

#if defined PRODUCTION #define BASE_URL [NSURL URLWithSsortingng:@"https://example.production.com/"] #elif defined STAGED #define BASE_URL [NSURL URLWithSsortingng:@"http://example.staged.com/"] #else #define BASE_URL [NSURL URLWithSsortingng:@"https://example.ea.com/"] #endif 

Y at-il un moyen de définir des macros préprocesseur afin de définir les valeurs de PRODUCTION et STAGED, je suppose que c'est quelque part dans les parameters de construction de ma cible. Et serait-ce la meilleure façon de le faire?

Je stocke généralement mes URLs dans une class NSObject (nommée URLHub Aptly) avec des methods de class comme ça;

 +(NSSsortingng *)Login { NSSsortingng *url; if (developmentMode) { url = @"https://dev.mycoolwebservice/api/login"; } else { url = @"https://mycoolwebservice/api/login"; } return url; } 

Ensuite, partout où j'ai besoin d'utiliser cette URL, je peux saisir facilement;

 #import "URLHub.h" NSSsortingng *url = [URLHub Login]; 

Cette approche rend super simple la mise à jour des urls dans toute l'application, car ils sont tous stockés au même endroit.

Dans cet exemple, pour basculer vers les URL de développement, j'ai juste besoin de returnner un BOOL et tous les changements d'URL de l'application. 😉

Il y a quelques façons de réaliser la fonctionnalité, mais seulement une à ma connaissance qui fonctionne avec des schémas.

La première option, est en dehors de la scope des schémas, et travaille avec les macros préprocesseur des cibles – pour le développement, DEBUG est mis à 1, et relâchez, DEBUG est mis à 0. Vous pouvez append autant de macros que vous le souhaitez – faire alors, allez sur vos cibles "Build Settings", et searchz "Macros préprocesseur" – c'est à peu près juste là.

Pour travailler avec des schémas, vous devez append une variable d'environnement à votre schéma:

Edit Scheme -> Ajouter une variable d'environnement.

Pour accéder à la variable d'environnement, vous devez faire:

 [[[NSProcessInfo processInfo] environment] objectForKey:@"myKey"] 

Dans le paramètre de construction "Other C Flags", placez -DPRODUCTION et -DSTAGED dans les différentes configurations de construction. (Vous aurez besoin de créer ces configurations de construction supplémentaires, bien sûr.)