Voyage au centre d’iOS

XCConfig

Comment organiser son projet avec plusieurs environments ?

Dans tout les projets que sur lesquels j’ai travaillé, on avait différents environnements. On devait pouvoir changer de serveur, ajouter/retirer les analytics, changer les tokens des Frameworks en quelques secondes. Pour gérer tout ceci, sur xcode, on peut utiliser des fichiers xcconfig.

Créer sa configuration

Nous allons créer deux configurations : une pour la production et une autre pour la préproduction. La seconde servira dans notre exemple pour le développement.

  1. Allez dans File -> New -> File… (or tap ⌘+N)
  2. Selectionnez Configuration Settings File.
  3. Choisissez un répertoire ou vous mettrez vos fichiers de config. Habituellement, je les mets dans un dossier Config dans le dossier parent de mon projet.
  4. Ajoutez les deux fichiers : prod.xcconfig et preprod.xcconfig
  5. Remplissez maintenant le fichier avec différentes clés-valeurs. Dans notre exemple nous allons ajouter nos deux urls de serveur différentes:
  • SERVER_URL=preprod.api.myserver.com (in your preprod.xcconfig)
  • SERVER_URL=api.myserver.com (in your prod.xcconfig)

Image du XCConfigFile

Ajouter les fichiers dans le projet

Maintenant que nos deux environnements sont créé, il est temps de montrer à notre projet quel fichier utiliser.

  1. Allez dans la configuration de votre projet. Par défaut xCode a créé deux targets Debug et Release. Nous allons les utiliser tels quels mais vous pouvez en créer d’autre au besoin.
  2. Dans la lane de Debug, choisissez le fichier preprod.xcconfig et dans Release choisissez le fichier prod.xcconfig.

Configurer le projet

Changer la configuration des schemes

Notre projet est fin prêt ! Il ne nous reste plus qu’a créer deux schemes: myproject-prod et myproject-preprod. Ca nous permettra de build, archive, test dans la configuration de notre choix et le tout en un simple clic. Pour ma part j’aime bien avoir autant de scheme que de configuration. On aime souvent tester en production juste avant de mettre l’application sur le store. Pouvoir le faire de façon facile est un vrai gain de temps, un simple exemple est un bug reproductible qu’en prod ou simplement un tester qui souhaite tester avec une API qui n’existe qu’en preprod.

  1. Cliquez sur le scheme du projet, new scheme
  2. Nommez le myproject-preprod
  3. Cliquez de nouveau sur myproject-preprod, edit scheme
  4. Pour chaque type de build : build, run, test, profile, analyze et archive, mettez le build config de Debug
  5. Répétez cette opération avec myproject-prod et le build config de Release

Configurer les schemes

Ajouter les variables au fichier .plist

Okay, on a maintenant nos deux environnements. Maintenant, la question à 1 million de dollars : comment on y accède ? Facile ! Creer un lien de la variable dans le fichier plist !

  1. Ouvrez le fichier plist file
  2. Ajoutez une paire clé-valeur dans le fichier comme suit
<key>server_url</key>
<string>$(SERVER_URL)</string>

Et voilà ! Vous avez maintenant accès à votre serveur d’url via le fichier .plist

Accéder à vos données du fichier .plist

Suivez le guide :

  let plistDict = NSDictionary(contentsOfFile: Bundle.main.path(forResource: "Info", ofType: "plist")!)
  let serverUrl = dict["server_url"] as? String

Conclusion

Vous avez maintenant le pouvoir de changer d’environnements en moins d’une demi seconde. Vous pouvez créer autant de configurations que vous le souhaitez, pourquoi pas une config staging et dev ? Merci d’avoir lu jusqu’ici, j’espère que vous avez apprécié cet article. N’hésitez pas à me contacter pour toute question, suggestion.