Quand une application s’installe sur un device à partir du Store, elle est placée dans son propre espace mémoire, totalement autonome. On appelle cela un « bac à sable ». Une application ne peut voir que son propre bac à sable, sans pouvoir lire ou écrire dans ceux de ces petits camarades. C’est une mesure de sécurité évitant qu’une application "malicieuse » ne puisse voler les données des autres bacs à sable.
Un bac à sable est composé de deux parties : le bundle et l’espace utilisateur.
Le bundle c’est l’ensemble des fichiers fournis avec l’application (le code exécutable, les icônes, les images, les données créés par le développeur, les fichiers de localisation (Français, Anglais, Zoulou, Klingon , etc…). Ces fichiers ne sont pas modifiables !
iOS ne permet que la lecture du bundle, pas sa modification. Quelque soit la façon de ta base de données a été construite, elle ne sera pas modifiable par l’application. Impossible de la modifier, impossible d’y rajouter des informations, impossible d’en supprimer une partie.
Si les exemples de Maxime fonctionnent, c’est parce que Realm (ou CoreData, UserDefault, ou autre type de fichiers) stockent leurs données dans l’espace utilisateur, la seconde partie du Bac à Sable.
Ce qu’il est possible de faire c’est générer une base de données avec une application, de lui donner un nom significatif, et copier le fichier dans le bundle de ta première application.
Je ne connais pas Realm, donc je vais t’expliquer ça de manière théorique.
Tu veux créer une application Maison3D comprenant une bibliothèque d’objets (chaise, table, frigo, tv, lit, etc…). Pour cela :
- Tu commences par créer une application Editeur3D pour créer des objets et les stocker dans une base de données InfosObjets.
- Tu récupères le fichier InfosObjets.quelqueChose sur le disque, pour le copier dans le bundle de Maison3D
- Tu écris des fonctions permettant de lire le contenu de la base de données InfosObjets pour les insérer dans Maison3D
- Tu compiles, Xcode fabrique alors un bundle contenant InfosObjets. Si tu distribue l’application sur le Store, InfosObjets sera présent à l’intérieur, avec les autres fichiers.
Si tu as besoin de gérer des informations persistantes, l’application devras créer une NOUVELLE base de données dans l’espace utilisateur. Il faudra faire attention à ne pas se tromper de base en lisant les informations. Je ne sais pas si Maxime a expliqué comment utiliser plusieurs bases de données dans la même application, l’une dans le Bundle et l’autre dans l’espace utilisateur.
Le terme « base de données » est un peu flou, sachant qu’on peut stocker les informations dans différents fichiers. Cela peut être du XML, du JSON, des Plists, des fichiers textes, du CoreData, du Realm ou encore des fichiers binaires. Tout dépend de la nature des données et des besoins spécifiques de l’application.