In diesem Tutorial zeige ich Ihnen, wie Sie eine leistungsstarke und dennoch elegante On-Device-Datenbanklösung für Ihre iOS-Apps verwenden: Realm Mobile Database. Als Alternative zu Apple Core Data oder SQLite mit objektrelationalem Mapping (ORM) bietet Realm Mobile Database Entwicklern eine einfachere und natürlichere Methode zum Speichern und Abfragen von Daten.
Realm wird als echte Objektdatenbank in Rechnung gestellt und unterscheidet sich von anderen ähnlichen Bibliotheken, indem es Datenobjekte als behandelt Live-Objekte-Bedeutungsobjekte werden automatisch aktualisiert. Sie reagieren auf Änderungen und sind leicht zu persistieren. Noch besser ist, dass Sie nicht über die steile Lernkurve verfügen, die Sie mit Core Data oder SQLite-Skripting erreichen würden. Stattdessen können Sie wirklich objektorientiert arbeiten. Realm Mobile Database ist seit 2016 ebenfalls Open-Sourcing und steht Entwicklern kostenlos zur Verfügung.
Neben der Realm Mobile Database bietet das Unternehmen die Realm Mobile Platform an, sein Flaggschiff PAAS, um die Realm Mobile Database um eine serverseitige Lösung zu ergänzen.
Realm Mobile Platform erweitert diesen Kern um Echtzeit-Datensynchronisierung und Ereignisbehandlung auf der Serverseite, die alle nahtlos mit den Apps verbunden sind. Entwickler nutzen die Plattform, um Apps mit leistungsstarken Funktionen wie Messaging, Collaboration und Offline-First-Funktionen zu erstellen. Die Plattform ist auch ideal für die Mobilisierung vorhandener APIs, wodurch das Erstellen von reaktionsschnellen und ansprechenden Apps, die mit älteren Systemen und Diensten verbunden sind, vereinfacht wird. (Realm.io)
Die Realm Mobile-Plattform arbeitet daher auf der Serverseite auf die gleiche nahtlose Weise wie die Realm Mobile-Datenbank. Sie bietet automatische Datensynchronisierung und Ereignisbehandlung zwischen Client und Server und abstrahiert dabei die Komplexität, die bei der Datensynchronisation auftritt. Die Realm Mobile-Plattform geht über den Rahmen dieses Tutorials hinaus, aber ich werde in einem zukünftigen Beitrag darauf zurückkommen.
Realm Mobile Database bietet Entwickler nicht nur Kopfschmerzen und steile Lernkurven bei Core Data, sondern bietet auch markante Vorteile.
In Bezug auf die Leistung hat sich erwiesen, dass Realm Mobile Database Abfragen und Synchronisierungsobjekte erheblich schneller als Core Data ausführt und der gleichzeitige Zugriff auf die Daten kein Problem darstellt. Das heißt, mehrere Quellen können auf dasselbe Objekt zugreifen, ohne Sperren verwalten zu müssen oder sich um Dateninkonsistenzen kümmern zu müssen.
Realm Mobile Database bietet eigene Verschlüsselungsdienste zum Schutz von Datenbanken auf der Festplatte AES-256 + SHA2 durch 64-Byte-Verschlüsselung.
Dadurch werden alle auf der Festplatte gespeicherten Daten bei Bedarf transparent mit AES-256 verschlüsselt und entschlüsselt und mit einer SHA-2-HMAC überprüft. Der gleiche Verschlüsselungsschlüssel muss bei jedem Abruf einer Realm-Instanz bereitgestellt werden.
Im Gegensatz zu Core Data ist Realm Mobile Database wirklich plattformübergreifend und unterstützt iOS, Android, JavaScript-Web-Apps und Xamarin.
Aufgrund der Funktionsweise der Live-Objekte können Sie Ihre UI-Elemente mit den Datenmodellen verbinden, und Ihre UI wird bei Änderungen der Daten reaktiv aktualisiert! Es ist kein komplizierter Synchronisationscode oder keine Verdrahtungslogik erforderlich, wie dies bei Core Data der Fall wäre.
Durch die Kombination mit der Realm Mobile-Plattform und dem Realm Object Server erhalten Entwickler den zusätzlichen Vorteil der Synchronisierung ihrer Daten in die Cloud, indem sie einfach die Realm Object-URL festlegen.
Selbst mit der Realm Mobile Platform müssen Sie sich keine Sorgen um unterbrochene Verbindungen machen, da Realm über integrierte Offline-Funktionen verfügt und alle Datenänderungen in die Warteschlange gestellt werden, die an den Server gesendet werden sollen.
Realm verfügt über zahlreiche namhafte Kunden, die die Realm Mobile Database offen übernommen haben, darunter Netflix und Starbucks.
Natürlich ist Realm Mobile Database nicht die einzige App-Speicherlösung. Ich habe bereits Apples eigene Kerndaten erwähnt, und obwohl es von Natur aus komplizierter zu lernen ist, bedeutet es, dass es zu Apple gehört de facto Datenbank-Lösung für viele iOS-Entwickler und wird auch weiterhin eine große Gemeinschaft von Entwicklern und Support-Material haben.
Eine Lösung, die der Realm Mobile-Datenbank etwas ähnelt, ist Firebase von Google. Dies ist jedoch eine kombinierte Lösung auf Client- und Serverseite. Firebase ist ähnlich einfach zu verwenden und es ist kostenlos, mit den ersten Schritten zu beginnen, aber die Kosten steigen mit der Nutzung. Ein Nachteil von Firebase ist, dass Sie eng mit der Plattform verbunden sind. Mit Realm können Sie Ihr eigenes Back-End oder gar kein Back-End verwenden!
In diesem Lernprogramm wird vorausgesetzt, dass Sie über Swift-Kenntnisse verfügen, jedoch keine Kerndaten oder Vorkenntnisse in der Datenbank erforderlich sind.
Neben Realm werden wir die folgenden Teile von iOS verwenden:
Am Ende dieses Tutorials haben Sie eine einfache, in Swift geschriebene To-Do-Anwendung entwickelt, die die mobile Datenbank von Realm verwendet, um Daten lokal zu speichern. Sie können eine voll funktionsfähige, von Realm betriebene To-Do-App erstellen. Auf diesem Weg lernen Sie die folgenden Konzepte kennen:
Sie können den vollständigen Quellcode aus dem GitHub-Repo des Tutorials herunterladen.
Okay, lass uns anfangen, unsere Realm App zu erstellen: RealmDo. Wir erstellen ein neues Xcode-Projekt. Erstellen Sie also eine Master-Detail-Anwendung.
Wenn Sie CocoaPods nicht auf Ihrem Computer installiert haben, müssen Sie dies jetzt tun. Also ins Terminal springen und folgendes eingeben:
$ sudo gem installiert cocoapods
Sie sollten dann eine Bestätigung erhalten, dass Cocoapods tatsächlich installiert sind. Wenn Sie sich noch im Terminal befinden, navigieren Sie zu dem Xcode-Projekt, das Sie gerade erstellt haben, und geben Sie Folgendes ein, um eine neue Pod-Datei zu initialisieren:
$ pod init
Sie sollten eine neue Datei mit dem Namen sehen Poddatei befindet sich im Stammverzeichnis des Projekts. Diese Datei enthält im Wesentlichen die Bibliotheken, die wir in unserem Projekt verwenden möchten. Weitere Informationen zur Funktionsweise von Podfiles finden Sie in der offiziellen CocoaPods-Dokumentation.
Als Nächstes müssen wir die Cocoapod-Bibliothek für Realm hinzufügen. Öffnen Sie also die Pod-Datei in einem Texteditor und fügen Sie darunter folgendes hinzu # Pods für RealmDo
:
… Verwenden Sie dynamische Frameworks use_frameworks! # Pods für RealmDo pod "RealmSwift" zielen auf "RealmDoTests"…
Speichern Sie die Datei, beenden Sie und geben Sie Folgendes ein:pod installieren
Nachdem CocoaPods die Installation der Bibliothek abgeschlossen hat, werden wir aufgefordert, unser Xcode-Projekt zu schließen und den Arbeitsbereich zu öffnen. Tun Sie das und wir sind bereit, mit der Codierung fortzufahren. Wir beginnen mit dem AppDelegate
.
In unserer AppDelegate
Wir werden die Realm-Bibliothek importieren, fügen Sie also Folgendes hinzu AppDelegate.swift Datei:
import UIKit import RealmSwift @UIApplicationMain-Klasse AppDelegate:…
Belassen Sie die Klasse für den Moment, so dass wir uns auf das Modellobjekt konzentrieren können.
Das Definieren von Modellen in Realm ist kinderleicht. Sie erstellen einfach eine logische Modellklasse. In unserem Projekt werden Erinnerungen gespeichert, also erstellen wir eine Klasse namens Erinnerungswechsel, mit dem folgenden Code:
import RealmSwift-Klasse Erinnerung: Object dynamischer var name = "" dynamischer var done = false
Für dieses Tutorial benötigen wir nur dieses Erinnerung
Modell, also sind wir fertig! So einfach ist das Instantiieren eines Modells genauso einfach, wie wir später erfahren werden.
Jetzt konzentrieren wir uns auf die View Controller, aber bevor wir zum gehen MasterViewController.swift Klasse, lass uns aufmachen Hauptplatine und füge oben rechts eine Balkenschaltfläche hinzu Hinzufügen, Wie nachfolgend dargestellt:
Das Projekt wurde von Xcode mit der Datenquelle und dem mit dem View-Controller verbundenen Delegierten initialisiert. Wir müssen also nur die Schaltfläche, die wir gerade erstellt haben, dem View-Controller als hinzufügen IBOutlet
. Halten Sie und ziehen Sie im Split-View-Modus von der Schaltfläche zum View-Controller, um die Verknüpfung zu erstellen.
Nun geht es weiter zum MasterViewController.swift Datei deklarieren wir die Variablen, die wir brauchen werden, die ungefähr wie folgt aussehen sollten:
Klasse MasterViewController: UITableViewController var Realm: Realm! // (1) @IBOutlet schwaches var addButton: UIBarButtonItem! var ReminderList: Ergebnisse// (2) get return realm.objects (Reminder.self) Überschreiben Sie func viewDidLoad () // (3) super.viewDidLoad () // Führen Sie nach dem Laden der Ansicht weitere Einstellungen durch, normalerweise aus einer Feder . Reich = Versuch! Realm ()…
Zuerst deklarieren wir in Zeile (1) die Realm-Variable, auf die wir verweisen, um zu unserem Datastore zu gelangen. Dann faulenzen wir die ReminderList
Aufrufen der Bereichsobjekte für eine Liste aller Erinnerungsobjekte. Zum Schluss instanziieren wir die Realm-Variable, die wir zu Beginn deklariert haben. Nichts zu kompliziert bisher!
Als nächstes richten wir unsere ein Tabellenansicht
Delegieren und Datenquellenmethoden wie folgt:
func numberOfSections überschreiben (in tableView: UITableView) -> Int return 1 func tableView überschreiben (_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int // (4) return remindersList.count override func tableView (_ tableView) : UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell let cell = tableView.dequeueReusableCell (withIdentifier: "Cell" für: indexPath) (5) cell.textLabel! .TextColor = item.done == false? UIColor.black: UIColor.lightGray-Rückgabezelle
In Zeile (4) erhalten wir eine Zählung der ReminderList
Liste von Objekten, die die Anzahl der Zeilen in unserem Ein-Abschnitt festlegt Tabellenansicht
.
Dann erhalten wir für jede Zelle das Erinnerung
Eigenschaft eines Live-Objekts, um die Beschriftung festzulegen und zu kennzeichnen, ob das Element als erledigt markiert ist oder nicht.
Wir möchten, dass unsere Benutzer in der Lage sind, einen Artikel als erledigt (und nicht erledigt) umzuschalten, was wir durch Ändern der Etikettenfarbe anzeigen. Wir möchten auch die Tabellenansicht editierbar machen (Benutzer können Zellen durch Wischen von rechts nach links entfernen). Dies erreichen wir durch Hinzufügen des folgenden Codes:
func tableView überschreiben (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) let item = remindersList [indexPath.row] try! self.realm.write (// (6) item.done =! item.done) // Zeilen aktualisieren tableView.reloadRows (at: [indexPath], with: .automatic) überschreiben func tableView (_ tableView: UITableView , canEditRowAt indexPath: IndexPath) -> Bool return true überschreibt func tableView (_ tableView: UITableView, schreibt BearbeitungsStyle: UITableViewCellEditingStyle, forRowAt: indexPath) if (editorStyle == .delete) ] Versuchen! self.realm.write (self.realm.delete (item) // (7)) tableView.deleteRows (at: [indexPath], mit: .automatic)
In Zeile (6) schreiben wir zum ersten Mal in unsere Datenbank zurück, was Sie einfach in einem tun selbst.realm.write
Block. Beachten Sie, dass Sie mit einem Instanzobjekt nur seinen Wert festlegen müssen, nicht mehr. In diesem Fall schalten wir den Fertigwert also um item.done =! item.done
.
Zeile (7) ist unser zweites Beispiel für das Zurückschreiben in unsere Datenbank: Wir löschen ein Objekt aus der Datenbank, indem wir einfach das Instanzobjekt löschen.
Wir machen große Fortschritte und sind fast fertig! Wir können jetzt unsere Erinnerungen laden, bearbeiten und löschen, es fehlt jedoch eine wichtige Aktion: Hinzufügen einer neuen Erinnerung. Um dies zu implementieren, erstellen Sie ein neues @IBAction
Methode und verdrahten Sie Ihr Storyboard Hinzufügen Symbolleisten-Schaltfläche zur Methode.
Wir werden ein einfaches bauen AlertViewController
Versuchen Sie in unserem Beispiel, aber als separate Übung, die App zu verfeinern, indem Sie diese stattdessen auf einen neuen View-Controller aktualisieren.
Füllen Sie zunächst den folgenden Code aus:
@IBAction func addReminder (_ sender: Any) let alertVC: UIAlertController = UIAlertController (Titel: "New Reminder", Nachricht: "Was möchten Sie sich merken?", PreferredStyle: .alert) alertVC.addTextField (UITextField) let cancelAction = UIAlertAction.init (Titel: "Cancel", Stil: .destructive, Handler: Null) alertVC.addAction (cancelAction) // Schließen der Alert-Aktion let addAction = UIAlertAction.init (Titel: "Add", Stil:. default) (UIAlertAction) -> Void in let textFieldReminder = (alertVC.textFields? .first)! als UITextField let reminderItem = Reminder () // (8) reminderItem.name = textFieldReminder.text! reminderItem.done = false // Wir fügen die Erinnerung zu unserer Datenbank hinzu try! self.realm.write (self.realm.add (reminderItem) // (9) self.tableView.insertRows (um: [IndexPath.init (Zeile: self.remindersList.count-1, Abschnitt: 0)], mit : .automatic)) alertVC.addAction (addAction) vorhanden (alertVC, animiert: true, Completion: nil)
In Zeile (8) erstellen wir eine neue Erinnerungsinstanz und legen deren Eigenschaften fest. Dann fügen wir in Zeile (9) die Erinnerung über ein self.realm.add (item)
.
Probieren Sie also die App aus, indem Sie sie in Simulator erstellen und ausführen. Fügen Sie zwei Erinnerungen hinzu, und legen Sie eine davon als erledigt fest, indem Sie darauf tippen. Wenn Sie Ihre App beenden und wieder öffnen, sollten Ihre Artikel noch vorhanden sein.
Und das ist es! Mit wenig oder gar keiner Lernkurve und durch die Umgehung der Komplexität von Core Data haben wir ein vollständig gebackenes Back-End auf dem Gerät. Das ist Realm Mobile-Datenbank. Sie können auch überprüfen, ob sich die Daten auf dem Gerät befinden, indem Sie Realm Browser herunterladen, eine macOS-App, mit der Sie Realm-Datenobjekte anzeigen, debuggen und bearbeiten können.
Laden Sie die App aus dem Mac App Store herunter und öffnen Sie die Realm-Datenbank in Ihrer CoreSimulator / Geräte / AppID / Daten /… Mappe. Die Datei, nach der Sie suchen, ist db.realm.
Wenn Sie es öffnen, sollten Sie nicht nur Ihre Daten anzeigen, sondern auch bearbeiten und neue Daten hinzufügen können. Probieren Sie es aus!
In diesem Lernprogramm haben Sie die Realm Mobile-Datenbank kennen gelernt und erfahren, warum sie ein leistungsfähiges Werkzeug für iOS-Entwickler ist. Wir haben auch kurz auf das Server-Pendant Realm Mobile Platform eingegangen, das wir in einem separaten Tutorial behandeln werden.
Wir haben dann eine einfache Erinnerungs-App entwickelt, die auf Realm Mobile Database basiert. In nur wenigen Dutzend Codezeilen konnten wir:
Schließlich haben Sie gesehen, wie Sie mit dem Realm Browser Ihre Daten debuggen und anzeigen können.
Dies ist eine sehr einfache Einführung in die Realm Mobile-Datenbank. Sie können sie jedoch als Ausgangspunkt für fortgeschrittenere Themen verwenden. Als nächsten Schritt könnten Sie Folgendes betrachten:
Stellen Sie sicher, dass Sie einige der fortgeschrittenen Themen in der obigen Dokumentation kennenlernen, z. B. Arbeiten mit Datenbeziehungen, Testen von Realm-Objekten, Threading und Verschlüsselung.
Und während Sie hier sind, lesen Sie einige unserer anderen Beiträge zur Entwicklung von iOS-Apps!