Xcode : paramètres générales d’une application

mercredi 29 mai 2013

Apple nous met à disposition la possibilité très intéressante de pouvoir définir des paramètres générales à notre application par l’utilisateur.
Ces paramètres seront accessibles par l’utilisateur via les Réglages du device. Voici un exemple:
Réglages générales application

Pour créer une entrée dans les réglages générales de notre device pour notre application, il faut créer un fichier Root.plist qui contiendra les paramètres qu’on souhaites que l’utilisateur configure.
Pour se faire, il suffit de faire dans Xcode, File > New > New File.
Sous IOS, choisir Ressource et sélectionner Settings.bundle.
Il créera pour nous dans le projet les fichiers nécessaires:

Settings.bundle/
    Root.plist
    en.lproj/
        Root.strings

Ensuite, il suffit de modifier le fichier Root.plist par défaut en ajoutant/modifiant des champs qu’on veut voir apparaître dans les réglages.
Apple nous offre un certains nombres de champs pour générer le formulaire qu’on souhaite créer pour aider l’utilisateur à configurer les paramètres générales de l’application.

Pour accéder dans l’application aux valeurs de ces paramètres:

// Pour un booléen
BOOL OK = [[NSUserDefaults standardUserDefaults] boolForKey:@"Identifier"];
//Pour un NSString
NSString *shop = [[NSUserDefaults standardUserDefaults] stringForKey:@"Identifier"];
Pour modifier un paramètre de type Integer, par exemple :
[[NSUserDefaults standardUserDefaults] setInteger:monInt forKey:@"Identifier"];

Pour la documentation officielle, suivez le lien.

Pour ma part, j’ai utiliser la méthode synchronize de NSUserDefaults car notamment dans les events de l’application, par exemple quand l’application redevient active après avoir mis les paramètres dans réglages, les données n’étaient pas encore sauvées ou accessibles.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
[defaults stringForKey:@"Identifier"];

Attention: concernant le champs valeur par défaut dans le Root.plist n’assure pas qu’il y ait une valeur par défaut lors du premier lancement de l’application. En effet, il faut s’assurer lors du premier lancement de l’application qu’il y a une valeur dans le NSUSERDEFAULT et si ce n’est aps le cas insérer la valeur par défaut via programmation.

Par exemple dans didFinishLaunchingWithOptions ou dans une classe singleton qui se charge des paramètres du device.

url_webservice = [[NSUserDefaults standardUserDefaults] stringForKey:@"url_webservice"];
if(!url_webservice)
   url_webservice = @"http://ww.google.be/";

Tags: Root.plist , settings.bundle , Xcode