Système de fichiers et paramètres
Introduction
L’accès au système de fichiers et aux paramètres est une partie quasi obligatoire dans toutes les applications mobiles. Dans ce chapitre, nous verrons comment accéder à ce système de fichiers par plateforme puis comment écrire et lire des paramètres.
Accès aux fichiers
Accéder au système de fichiers est différent selon le système d’exploitation. De ce fait, nous avons plusieurs approches pour accéder aux fichiers. Dans une première partie, nous verrons les spécificités de chaque plateforme, puis comment accéder aux fichiers avec les API natives. Enfin, nous verrons comment utiliser un code portable sur les trois plateformes.
1. iOS
a. Présentation
Le système de fichiers d’iOS est très orienté applications. Chaque application est dans un bac à sable et a uniquement accès à son propre dossier. À la désinstallation d’une application, ses dossiers sont automatiquement supprimés par le système d’exploitation. Autre spécificité d’iOS : les utilisateurs n’ont pas accès directement au système de fichiers.
b. Répertoires d’application
Avant d’écrire du code pour interagir avec le système de fichiers, il est important de comprendre comment iOS organise celui-ci. Chaque dossier à un rôle propre avec des fonctions différentes.
-
AppBundle : c’est le dossier où sont installées l’application et toutes ses ressources. Lors de son déploiement, l’application est signée. Si un fichier de ce dossier change, la signature ne correspond plus à celle de l’application et iOS bloque le lancement de celle-ci. Lors de la mise à jour de votre application par l’App Store, les fichiers de ce dossier sont mis à jour par le système d’exploitation. Seul l’accès en lecture est autorisé à ce dossier.
-
Documents : c’est le dossier destiné à être utilisé par l’utilisateur. Le dossier doit uniquement contenir des fichiers que vous voulez mettre à disposition d’un utilisateur. Il ne faut donc y mettre aucun fichier technique. Attention, son contenu est sauvegardé sur iTunes et iCloud.
-
Library : c’est le dossier idéal où créer les fichiers techniques comme la base de données et les préférences utilisateur. Ce dossier n’est pas exposé par iTunes à l’utilisateur. Le contenu de ce dossier est sauvegardé par iTunes. Si vous désinstallez/réinstallez...
Paramètres utilisateur
Comme pour le système de fichiers, le système de paramètres utilisateur est différent selon le système d’exploitation. De ce fait, nous avons plusieurs approches pour accéder aux fichiers. Dans une première partie, nous verrons les spécificités de chaque plateforme, puis comment accéder aux fichiers avec les API natives. Enfin, nous verrons comment utiliser un code portable sur les trois plateformes.
1. iOS
a. Présentation
Les préférences utilisateur sont gérées par la classe NSUsersDefaults. Elle utilise un système clé-valeur classique. Ces préférences sont sauvegardées automatiquement dans iTunes.
Elles doivent respecter un nombre restreint de types :
-
Numériques : Float, Double
-
Booléen : Boolean
-
Texte : String
-
URL : URL, NSUrl
Ces limitations peuvent vous amener à choisir le type de stockage par fichier pour manipuler des objets complexes.
b. Sauvegarde des préférences
// Récupération des paramètres par défaut de l'application
var preference = NSUserDefaults.StandardUserDefaults;
Écrire une valeur dans les préférences
// Écriture d'un booléen
preference.SetBool(true, "CLEF");
// Écriture d'un string
preference.SetString("chaîne de caractère", "CLEF");
// Écriture d'un double
preference.SetDouble(1.2,"CLEF");
// Écriture d'un float
preference.SetFloat(1.2f,"CLEF");
// Écriture d'une URL
preference.SetUrl(new Uri("http://www.google.fr","CLEF");
Sauvegarde des valeurs modifiées
preference.Synchronize();
Il ne faut pas oublier d’exécuter la méthode Synchronize afin de réellement faire les changements de préférences, sans quoi ils ne seront pas pris en compte.
c. Récupération des préférences
Lire une valeur dans les préférences
// Lecture d'un booléen
preference.BoolForKey("CLEF");
// Lecture d'un string
preference.StringForKey("CLEF");
// Lecture d'un double
preference.DoubleForKey("CLEF");
// Lecture d'un float ...
Conclusion
Dans ce chapitre, nous avons vu comment accéder aux fichiers et lire et écrire des préférences utilisateur de façon native ainsi que les alternatives multiplateformes en utilisant des plug-ins. Si vous avez besoin de stocker des données plus complexes ou volumineuses, il faut utiliser des mécaniques de sérialisation ou même une base de données locale.