Vous déboguez un problème Core Data dans votre app iOS ou macOS. Les données semblent incorrectes dans l'interface, et vous devez voir ce qui est réellement stocké dans le fichier SQLite sous-jacent. L'éditeur de modèle Core Data de Xcode affiche votre schéma, mais il ne vous permet pas de parcourir les données réellement persistées. Vous partez donc à la chasse — trouvez le conteneur de l'app, localisez le fichier .sqlite, ouvrez le Terminal, et commencez à exécuter des requêtes brutes contre des tables nommées ZUSER et ZPOST, où chaque colonne est préfixée d'un Z et où rien ne correspond intuitivement aux noms de vos entités.
Les fichiers SQLite de Core Data sont difficiles à inspecter
Core Data utilise SQLite comme stockage persistant par défaut, mais y ajoute ses propres conventions. Les noms d'entités reçoivent un préfixe Z dans le nom de la table. Les attributs reçoivent des noms de colonnes préfixés par Z. Les relations sont stockées sous forme de clés étrangères entières dans des colonnes que vous ne reconnaîtrez pas forcément immédiatement. Il y a une table Z_METADATA et une table Z_PRIMARYKEY que Core Data gère en interne.
Rien de tout cela n'est documenté d'une manière qui facilite l'inspection manuelle. Vous finissez par exécuter des requêtes comme SELECT * FROM ZUSER; et essayer de faire correspondre les colonnes préfixées par Z avec votre modèle d'objets géré. Dans le Terminal, sans coloration syntaxique ni grille visuelle, c'est fastidieux.
Xcode n'aide pas non plus. Il n'y a pas de navigateur SQLite intégré. L'outil Instruments peut profiler les opérations Core Data, mais il ne montrera pas les données réelles des lignes. Il vous faut un outil séparé.
Parcourez les fichiers SQLite de Core Data avec Tome
Tome ouvre les fichiers SQLite de Core Data comme n'importe quelle autre base de données. Naviguez jusqu'au conteneur de votre app, trouvez le fichier .sqlite, et ouvrez-le dans Tome. Chaque table préfixée par Z apparaît dans la barre latérale. Cliquez sur l'une d'elles pour voir toutes ses lignes et leurs valeurs dans une grille défilante.
Voyez les données réelles
Quand votre app affiche une valeur erronée, ouvrez le fichier SQLite dans Tome et vérifiez les données réellement stockées. La valeur est-elle incorrecte dans la base de données, ou s'agit-il d'un bug d'affichage/récupération ? Avoir un accès visuel aux données brutes répond à cette question en quelques secondes.
Inspectez les relations et les métadonnées
Parcourez la table Z_PRIMARYKEY pour voir comment Core Data suit les types d'entités et les clés primaires. Vérifiez les colonnes de clés étrangères pour confirmer que les relations sont correctement stockées. Inspectez Z_METADATA pour voir le hash de version du modèle.
Exécutez des requêtes de diagnostic
Utilisez l'éditeur de requêtes SQL de Tome pour écrire des jointures entre les tables préfixées par Z de Core Data, filtrer des enregistrements spécifiques, ou vérifier l'existence de lignes orphelines pouvant indiquer un problème de migration. La coloration syntaxique et l'auto-complétion facilitent la tâche par rapport à l'exécution de requêtes brutes dans le Terminal.
Sûr à inspecter, facile à trouver
Pour le Simulateur, le fichier SQLite de votre app se trouve tout au fond de ~/Library/Developer/CoreSimulator/. Pour une app macOS, vérifiez ~/Library/Containers/ ou ~/Library/Application Support/. Une fois le fichier localisé, glissez-le sur l'icône du dock de Tome et commencez à le parcourir.