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..
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..
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.
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..
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..
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..
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..
Realm compte de nombreux clients distingués qui ont ouvertement adopté la base de données Realm Mobile, notamment Netflix et Starbucks..
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.!
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:
À 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:
Vous pouvez télécharger le code source complet à partir du tutoriel GitHub repo.
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
.
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.
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.
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..
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!
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.
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..
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)
.
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à..
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!
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:
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:
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.!