Base de données Realm Mobile pour iOS

Ce que vous allez créer

introduction

Dans ce didacticiel, je vais vous montrer comment utiliser une solution de base de données intégrée, puissante et élégante, pour vos applications iOS: Realm Mobile Database. Une alternative à Apple Core Data ou SQLite avec le mappage objet-relationnel (ORM), Realm Mobile Database offre aux développeurs un moyen plus simple et plus naturel de stocker et d'interroger des données..

Qu'est-ce que la base de données Realm Mobile?

Considéré comme une véritable base de données d’objets, Realm se distingue des autres bibliothèques similaires en traitant les objets de données comme objets vivants-les objets signifiants sont automatiquement mis à jour. Ils réagissent aux changements et sont faciles à conserver. Mieux encore, vous n'avez pas la courbe d'apprentissage abrupte que vous auriez avec les scripts Core Data ou SQLite. Au lieu de cela, vous pouvez travailler de manière réellement orientée objet. La base de données Realm Mobile est également à code source ouvert depuis 2016 et est disponible gratuitement pour les développeurs..

En plus de Realm Mobile Database, la société propose également Realm Mobile Platform, son PAAS phare, pour compléter Realm Mobile Database avec une solution côté serveur..

La plate-forme mobile Realm étend ce noyau avec la synchronisation des données en temps réel et la gestion des événements côté serveur, toutes connectées de manière transparente aux applications. Les développeurs utilisent la plate-forme pour créer des applications dotées de fonctionnalités puissantes telles que la messagerie, la collaboration et les fonctionnalités hors connexion. La plateforme est également idéale pour mobiliser les API existantes, facilitant ainsi la création d'applications extrêmement réactives et engageantes connectées aux systèmes et services existants.. (domaine.io)

Realm Mobile Platform fonctionne donc côté serveur de la même manière transparente que la base de données Realm Mobile, fournissant une synchronisation automatique des données et la gestion des événements entre le client et le serveur, tout en minimisant les complexités inhérentes à la synchronisation des données. Realm Mobile Platform dépasse le cadre de ce tutoriel, mais j'y reviendrai dans un prochain article..

Pourquoi la base de données mobile Realm?

En plus de sauver les développeurs des maux de tête et de la courbe d'apprentissage abrupte de Core Data, Realm Mobile Database offre des avantages distinctifs immédiatement.

Performance et sécurité du fil

En termes de performances, il a été prouvé que Realm Mobile Database exécutait les requêtes et synchronisait les objets bien plus rapidement que Core Data, et accéder aux données simultanément ne posait pas de problème. Autrement dit, plusieurs sources peuvent accéder au même objet sans avoir à gérer des verrous ni à s'inquiéter des incohérences dans les données..

Cryptage

Realm Mobile Database fournit ses propres services de cryptage pour protéger les bases de données sur disque à l'aide de AES-256 + SHA2 par le cryptage de 64 octets.

Ainsi, toutes les données stockées sur le disque sont cryptées et déchiffrées de manière transparente avec AES-256 selon les besoins, et vérifiées avec un HMAC SHA-2. La même clé de chiffrement doit être fournie chaque fois que vous obtenez une instance de royaume..

Multiplateforme

Contrairement à Core Data, la base de données Realm Mobile est véritablement multiplateforme et prend en charge iOS, Android, les applications Web JavaScript et Xamarin..

Nature Réactive

En raison de la manière dont fonctionnent les objets dynamiques, vous pouvez connecter vos éléments d'interface utilisateur aux modèles de données et votre interface utilisateur se mettra à jour de manière réactive lorsque les données changent! Aucun code de synchronisation compliqué ni logique de câblage ne sont nécessaires, contrairement à Core Data..

Couplés à la plate-forme mobile Realm et au serveur d'objets Realm, les développeurs tireront un avantage supplémentaire de la synchronisation de leurs données dans le cloud en définissant simplement l'URL de l'objet Realm..

Même en utilisant Realm Mobile Platform, vous n'avez pas à vous soucier des connexions interrompues, car Realm dispose de fonctionnalités intégrées hors ligne et met en file d'attente toutes les modifications de données à envoyer au serveur..

Les clients

Realm compte de nombreux clients distingués qui ont ouvertement adopté la base de données Realm Mobile, notamment Netflix et Starbucks..

Alternatives à la base de données mobile Realm

Bien entendu, Realm Mobile Database n'est pas la seule solution de stockage d'applications. J'ai déjà mentionné les propres données de base d'Apple, et bien qu'il soit intrinsèquement plus compliqué à apprendre, le fait qu'il appartienne à Apple signifie que ce sera la de facto solution de base de données pour de nombreux développeurs iOS, et continuera à avoir une grande communauté de développeurs et de matériel de support.

Firebase de Google est une solution un peu similaire à la base de données Realm Mobile. Cependant, il s'agit d'une solution combinée côté client et côté serveur. Firebase est également facile à utiliser et à démarrer gratuitement, mais les coûts évolueront au même rythme que votre utilisation. Un inconvénient de Firebase est que vous êtes étroitement liés à leur plate-forme, alors que vous êtes libre d'utiliser Realm back-end ou aucun back-end.!

Votre première application de royaume

Connaissance supposée

Ce tutoriel suppose que vous maîtrisiez bien Swift, mais que vous n’ayez pas besoin de connaissances de base ni de bases de données.. 

En plus de Realm, nous utiliserons les parties suivantes d'iOS:

  • UIKit: pour montrer nos données visuellement
  • CocoaPods: une bibliothèque de dépendances tierce qui sera utilisée pour installer la base de données Realm Mobile

Objectifs de ce tutoriel

À la fin de ce didacticiel, vous aurez développé une application simple à faire, écrite en Swift et utilisant Realm Mobile Database pour conserver les données localement. Vous aurez la possibilité de créer une application de tâches entièrement fonctionnelle, alimentée par le royaume, tout en apprenant les concepts suivants:

  1. configuration de la bibliothèque Realm sur un nouveau projet, via CocoaPods
  2. configuration du délégué d'application pour importer la bibliothèque de domaines
  3. création des objets de modèle 'objet en direct'
  4. création des contrôleurs de vue et du scénarimage dans l'interface utilisateur de l'application
  5. connexion du modèle de données aux contrôleurs de vue et aux vues

Vous pouvez télécharger le code source complet à partir du tutoriel GitHub repo.

Configurer le projet

Bon, commençons à créer notre application Realm: RealmDo. Nous allons créer un nouveau projet Xcode, alors n'hésitez plus et créez une application Master-Detail.

Ensuite, si vous n'avez pas installé CocoaPods sur votre machine, vous devez le faire maintenant. Alors sautez dans le terminal et tapez ce qui suit:

$ sudo gem installer des cocoapods

Vous devriez alors avoir la confirmation que les cocoapodes sont bien installés. Pendant que vous êtes toujours dans le terminal, accédez au projet Xcode que vous venez de créer et tapez ce qui suit pour initialiser un nouveau fichier podfile:

$ pod init

Vous devriez voir un nouveau fichier nommé Podfile situé dans le répertoire racine de votre projet. Ce fichier définit essentiellement les bibliothèques que nous souhaitons utiliser dans notre projet. Vous pouvez vous référer à la documentation officielle de CocoaPods pour plus d'informations sur le fonctionnement de Podfiles..

Ensuite, nous devons ajouter la bibliothèque cocoapod pour Realm. Ouvrez le fichier podfile dans un éditeur de texte, puis ajoutez les éléments suivants en dessous. # Pods pour RealmDo:

… Utilisez des cadres dynamiques use_frameworks! # Pods pour RealmDo pod 'RealmSwift' ciblés par 'RealmDoTests'… 

Enregistrez le fichier, quittez et tapez:
installation de pod

Une fois l'installation de la bibliothèque terminée, CocoaPods nous demandera de fermer notre projet Xcode et d'ouvrir l'espace de travail. Faites cela, et nous sommes prêts à procéder au codage. Nous allons commencer avec le AppDéléguer.

Configurer le délégué de l'application pour importer la bibliothèque de domaines

Dans notre AppDéléguer nous allons importer la bibliothèque Realm, ajoutez donc ce qui suit au AppDelegate.swift fichier:

import UIKit import RealmSwift @UIApplicationMain classe AppDelegate:… 

Laissez la classe telle quelle pour le moment afin que nous puissions nous concentrer sur l'objet modèle.

Modèles d'objets vivants

Définir des modèles dans Realm est extrêmement simple. vous venez de créer une classe de modèle logique. Dans notre projet, nous allons stocker des rappels, alors créons une classe appelée Rappel.swift, avec le code suivant:

import Classe RealmSwift Rappel: objet dynamic nom var = "" dynamique var fait = false 

Pour ce tutoriel, nous n’avons besoin que de cela. Rappel modèle, alors nous avons tous terminé! C'est aussi simple que cela, et instancier un modèle est tout aussi facile, comme nous le verrons plus tard. 

Configurer les contrôleurs de vue et le scénarimage

Nous concentrons maintenant notre attention sur les contrôleurs de vue, mais avant de passer à la MasterViewController.swift classe, ouvrons Tableau principal et ajoutez un bouton en haut à droite, appelé Ajouter, comme indiqué ci-dessous:

Le projet a été initialisé par Xcode avec la source de données et le délégué connectés au contrôleur de vue. Il suffit donc d’ajouter le bouton que nous venons de créer au contrôleur de vue en tant que IBOutlet. Maintenez et faites glisser le bouton vers le contrôleur de vue en mode de vue fractionnée pour générer le lien..

Initialisation du royaume

Passons maintenant au MasterViewController.swift fichier, nous déclarons les variables dont nous aurons besoin, qui devraient ressembler à ceci:

class MasterViewController: UITableViewController var realm: Realm! // (1) @IBOutlet faible var addButton: UIBarButtonItem! var rappelsListe: Résultats // (2) get return realm.objects (Reminder.self) écrasera func viewDidLoad () // (3) super.viewDidLoad () // Effectue toute configuration supplémentaire après le chargement de la vue, généralement à partir d'un nib . royaume = essayer! Royaume ()… 

Tout d’abord, sur la ligne (1), nous déclarons la variable de domaine à laquelle nous allons faire référence pour accéder à notre magasin de données. Ensuite, nous chargeons le paresseux rappels appel des objets de domaine pour obtenir une liste de tous les objets de rappel. Enfin, nous instancions la variable de royaume que nous avons déclarée au début. Rien de trop compliqué jusqu'à présent!

Configurer le délégué de vue et la source de données

Ensuite, nous mettons en place notre tableView méthodes déléguées et de source de données, comme suit:

remplacez func numberOfSections (dans tableView: UITableView) -> Int return 1 substituez func tableView (_ tableView: UITableView, section numberOfRowsInSection: Int) -> Int // (4) retournera rappelsList.count substituez func tableView (_ tableView : UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell let cell = tableView.dequeueReusableCell (avecIdentifier: "Cell", pour: indexPath), laissez item = rappelsList [indexPath.row] cell.textLabel! .Text =. Item = nom // (5) cell.textLabel! .TextColor = item.done == false? UIColor.black: cellule de retour UIColor.lightGray 

Sur la ligne (4), nous comptons le rappels liste d'objets, qui définira le nombre de lignes dans notre section tableView.

Ensuite, pour chaque cellule, on obtient le Rappel Propriété de l'objet en direct pour définir l'étiquette, ainsi que pour signaler si l'élément est marqué comme étant terminé ou non.

Écrire des modifications dans la base de données

Nous voulons que nos utilisateurs soient en mesure de basculer un élément de la manière terminée (et non terminée), ce que nous indiquons en modifiant la couleur de l'étiquette. Nous souhaitons également rendre la vue tabulaire modifiable (les utilisateurs pourront supprimer des cellules en balayant de droite à gauche), ce que nous accomplissons en ajoutant le code suivant:

redéfinit func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) let item = rememberersList [indexPath.row] try! self.realm.write (// (6) item.done =! item.done) // actualise les lignes tableView.reloadRows (à: [indexPath], avec: .automatic) redéfinit func tableView (_ tableView: UITableView , canEditRowAt indexPath: IndexPath) -> Bool return true écrase func tableView (_ tableView: UITableView, commit éditionStyle: UITableViewCellEditingStyle, pourRowAt indexPath: IndexPath) if ] essayer! self.realm.write (self.realm.delete (item) // (7)) tableView.deleteRows (à: [indexPath], avec: .automatic) 

En ligne (6), c’est la première fois que nous écrivons dans notre base de données, ce que vous faites simplement dans un self.realm.write bloc. Notez que tout ce que vous devez faire avec un objet d'instance est de définir sa valeur, rien de plus. Donc, dans ce cas, nous basculons la valeur done en faisant item.done =! item.done

Line (7) est notre deuxième exemple d’écriture dans notre base de données: nous supprimons un objet de la base de données en supprimant simplement l’objet instance..

Ajout de nouveaux objets

Nous faisons de grands progrès et nous avons presque fini! Nous pouvons maintenant charger, éditer et supprimer nos rappels, mais il nous manque une action importante: ajout d'un nouveau rappel. Pour implémenter cela, créez un nouveau @IBAction méthode, et fil de votre storyboard Ajouter bouton de la barre d'outils à la méthode. 

Nous allons construire un simple AlertViewController dans notre exemple, mais en tant qu'exercice distinct, essayez d'affiner l'application en la mettant à niveau vers un nouveau contrôleur de vue.. 

Pour l'instant, allez-y et ajoutez le code suivant:

@IBAction func addReminder (_ expéditeur: Any) let alertVC: UIAlertController = UIAlertController (titre: "Nouveau rappel", message: "Que voulez-vous rappeler?", PreferredStyle: .alert) alertVC.addTextField (UITextField) dans  let cancelAction = UIAlertAction.init (titre: "Annuler", style: .destructive, gestionnaire: nil) alertVC.addAction (cancelAction) // Fermeture de l’action d’alerte let addAction = UIAlertAction.init (title: "Ajouter", style:. par défaut) (UIAlertAction) -> Nul dans let textFieldReminder = (alertVC.textFields? .first)! comme UITextField let reminderItem = Reminder () // (8) reminderItem.name = textFieldReminder.text! reminderItem.done = false // Nous ajoutons le rappel à notre base de données try! self.realm.write (self.realm.add (reminderItem) // (9) self.tableView.insertRows (à: [IndexPath.init (ligne: self.remindersList.count-1, section: 0)], avec : .automatic)) alertVC.addAction (addAction) présent (alertVC, animé: true, complétion: nil) 

Sur line (8), nous créons une nouvelle instance de rappel et définissons ses propriétés. Ensuite, à la ligne (9), nous ajoutons le rappel via self.realm.add (item).

Test de l'application

Essayons donc l'application en la construisant et en l'exécutant dans Simulator. Allez-y, ajoutez deux rappels et définissez l'un d'entre eux en appuyant dessus. Si vous quittez votre application et la rouvrez, vos éléments devraient toujours être là..

Royaume des sourcilsser

Et c'est tout! Avec peu ou pas de courbe d'apprentissage et en contournant les complexités de Core Data, nous avons un back-end entièrement cuit sur le périphérique. C'est Base de données mobile de royaume. Vous pouvez également vérifier que les données se trouvent sur l'appareil en téléchargeant Realm Browser, une application macOS permettant d'afficher, de déboguer et d'éditer des objets de données Realm.. 

Téléchargez l’application depuis le Mac App Store et ouvrez la base de données Realm, située dans votre CoreSimulator / Devices / appID / data /… dossier. Le fichier que vous recherchez est db.realm.

En l'ouvrant, vous devriez pouvoir non seulement visualiser vos données, mais également les éditer et en ajouter de nouvelles. Allez-y et essayez-le!

Conclusion

Dans ce didacticiel, vous avez découvert la base de données Realm Mobile et pourquoi il s'agit d'un outil puissant pour les développeurs iOS. Nous avons également abordé brièvement son homologue serveur, Realm Mobile Platform, que nous couvrirons dans un didacticiel séparé..

Nous avons ensuite créé une application de rappel simple, optimisée par la base de données Realm Mobile. En quelques dizaines de lignes de code, nous avons pu:

  1. configurer un modèle d'objet actif pour le rappel
  2. connecter notre contrôleur de vue au modèle de données
  3. déclarer, instancier, charger, ajouter et supprimer de la base de données Realm

Enfin, vous avez vu comment utiliser le navigateur Realm pour déboguer et afficher vos données..

C’est une introduction très basique à la base de données Realm Mobile, mais vous pouvez vous en servir comme point de départ pour aborder des sujets plus avancés. Comme prochaines étapes, vous pourriez regarder:

  • Le modèle de données du royaume
  • Documentation pour Realm for Swift
  • Documentation pour le domaine pour Objective-C 
  • Référence de l'API Realm Mobile Database

Veillez à explorer certains des thèmes avancés de la documentation ci-dessus, tels que l'utilisation de relations de données, le test d'objets Realm, le threading et le chiffrement.. 

Et pendant que vous êtes ici, assurez-vous de consulter certains de nos autres articles sur le développement d'applications iOS.!