Realm Mobile Database pentru iOS

Ce veți crea

Introducere

În acest tutorial, vă vom arăta cum să utilizați o soluție de bază de date puternică și elegantă pentru aplicațiile dvs. iOS: baza de date Mobile Realm. O alternativă la Apple Core Data sau SQLite cu mapare obiect-relațională (ORM), Realm Mobile Database oferă dezvoltatorilor o modalitate mai ușoară și mai naturală de stocare și de interogare a datelor.

Ce este baza de date Mobile Realm ?.?

Validat ca o bază de date obiect adevărat, Realm se diferențiază de alte biblioteci similare prin tratarea obiectelor de date ca obiecte vii-adică obiectele sunt actualizate automat. Ele reacționează sensibil la schimbări și sunt ușor de persistat. Chiar mai bine, nu aveți curba abruptă de învățare pe care ați avea-o cu Core Data sau scripting SQLite. În schimb, puteți lucra într-un mod cu adevărat orientat spre obiect. Realm Mobile Database a fost de asemenea deschisă începând din 2016 și este disponibil gratuit dezvoltatorilor.

În plus față de Realm Mobile Database, compania oferă și Realm Mobile Platform, modelul său PAAS care completează Realm Mobile Database cu o soluție de server-side.

Realm Mobile Platform, extinde acest nucleu cu sincronizarea datelor în timp real și manipularea evenimentelor pe partea de server, toate conectate perfect la aplicații. Dezvoltatorii folosesc platforma pentru a construi aplicații cu funcții puternice, cum ar fi mesaje, colaborare și capabilități offline. Platforma este, de asemenea, ideală pentru mobilizarea API-urilor existente, ceea ce ușurează crearea unor aplicații extrem de receptive și angajatoare conectate la sistemele și serviciile vechi. (Realm.io)

Platforma mobilă Realm lucrează pe partea serverului în același mod ca Realm Mobile Database, oferind sincronizarea automată a datelor și gestionarea evenimentelor între client și server și în procesul de abstractizare a complexităților care apar atunci când se ocupă de sincronizarea datelor. Realm Mobile Platform este dincolo de sfera de aplicare a acestui tutorial, dar voi reveni la ea într-un post viitor.

De ce baza de date Mobile Realm?

Dincolo de salvarea dezvoltatorilor durerea de cap și curba de învățare abruptă a datelor de bază, Realm Mobile Database furnizează avantaje distinctive chiar din cutie.

Performanță și siguranță pe filet

Performanța, Realm Mobile Database a dovedit că rulează interogări și sincronizează obiecte semnificativ mai rapid decât Core Data, iar accesarea datelor simultan nu este o problemă. Asta înseamnă că mai multe surse pot accesa același obiect fără a fi nevoie să gestioneze blocările sau să vă faceți griji cu privire la inconsecvențele de date.

Criptarea

Realm Mobile Database furnizează propriile servicii de criptare pentru protejarea bazelor de date pe discuri AES-256 + SHA-2 prin criptare de 64 de octeți.

Acest lucru face ca toate datele stocate pe disc să fie criptate în mod transparent și să fie decriptate cu AES-256 după cum este necesar și verificate cu un HMAC SHA-2. Aceeași cheie de criptare trebuie furnizată de fiecare dată când obțineți o instanță Realm.

Cross-Platform

Spre deosebire de datele de bază, Realm Mobile Database este cu adevărat cross-platform, sprijinind iOS, Android, aplicații web JavaScript și Xamarin.

Natură reactivă

Din cauza modului în care funcționează obiectele live, puteți să vă conectați elementele UI la modelele de date și interfața dvs. utilizator se va actualiza în mod reactiv, pe măsură ce se schimbă datele! Nu este nevoie de un cod de sincronizare complicat sau de o logică de cabluri, așa cum ați avea cu Core Data.

Atunci când este cuplată cu Realm Mobile Platform și Realm Object Server, dezvoltatorii vor câștiga beneficiul suplimentar de sincronizare a datelor lor către nor prin setarea pur și simplu a adresei URL a obiectului Realm.

Chiar și cu Realm Mobile Platform, nu trebuie să vă faceți griji cu privire la conexiunile întrerupte, deoarece Realm are built-in capabilități offline și va coadă orice modificări de date care vor fi trimise către server.

Clienți

Realm are numeroși clienți distinși care au adoptat în mod deschis bazele de date Realm Mobile, inclusiv Netflix și Starbucks.

Alternative la baza de date Mobile Realm

Bineînțeles, Realm Mobile Database nu este singura soluție de stocare a aplicațiilor. Am menționat deja propriul Core Data de la Apple și, în timp ce este în mod inerent mai complicat să înveți, faptul că aparține Apple înseamnă că va fi de facto soluție de bază de date pentru mulți dezvoltatori iOS și va continua să aibă o comunitate mare de dezvoltatori și materiale de suport.

O soluție care este oarecum similară cu Realm Mobile Database este Firebase-ul companiei Google, deși aceasta este o soluție combinată de client și de server. Firebase este la fel de ușor de utilizat și este gratuit pentru a începe, dar costurile vor scala în funcție de utilizarea ta. Un dezavantaj cu Firebase este că sunteți puternic cuplat la platforma lor, în timp ce cu Realm aveți libertatea de a vă folosi propriul back-end sau nu back-end la toate!

Primul tău aplicație

Cunoașterea presupusă

Acest tutorial presupune că aveți cunoștințe de lucru despre Swift, dar nu sunt necesare date de bază sau cunoștințe de bază despre baze de date. 

Pe lângă Realm, vom folosi următoarele părți ale iOS:

  • UIKit: să demonstrăm datele noastre vizual
  • CocoaPods: o bibliotecă de dependență a terților care va fi utilizată pentru a instala Realm Mobile Database

Obiectivele acestui tutorial

Până la sfârșitul acestui tutorial, veți fi dezvoltat o aplicație simplă de lucru scrisă în Swift și utilizând Realm Mobile Database pentru a păstra datele la nivel local. Veți crea o aplicație completă cu aplicații Realm, și pe parcurs veți învăța următoarele concepte:

  1. înființarea bibliotecii Realm pe un nou proiect, prin intermediul CocoaPods
  2. configurarea App Delegate pentru a importa Biblioteca Realm
  3. crearea obiectelor modelului "live-object"
  4. crearea controlorilor de vizualizare și a tabloului de bord în interfața de utilizare a aplicației
  5. conectarea modelului de date la controlerele de vizualizare și la vizualizări

Puteți descărca codul sursă complet din reparația GitHub tutorial.

Configurați Proiectul

Bine, să începem să creăm aplicația Realm: RealmDo. Vom crea un nou proiect Xcode, așa că continuați și creați o aplicație Master-Detail.

Apoi, dacă nu ați instalat CocoaPods pe mașina dvs., va trebui să faceți acest lucru acum. Deci, sari în terminal și tastați următoarele:

$ sudo gem instala cocoapods

Ar trebui să obțineți o confirmare a faptului că cocoapod-urile sunt într-adevăr instalate. În timp ce sunteți încă în terminal, navigați la proiectul Xcode pe care tocmai l-ați creat și tastați următoarele, pentru a inițializa un nou Podfile:

$ pod init

Ar trebui să vedeți un nou fișier numit Podfile localizat în directorul rădăcină al proiectului dvs. Acest fișier definește în mod esențial bibliotecile pe care vrem să le folosim în proiectul nostru. Puteți consulta documentația oficială CocoaPods pentru mai multe informații despre modul în care funcționează Podfiles.

Apoi, trebuie să adăugăm biblioteca cocoapod pentru Realm, așa că deschideți Podfile-ul într-un editor de text și adăugați următoarele sub # Poduri pentru RealmDo:

... folosiți cadre dinamice use_frameworks! # Pods pentru RealmDo pod 'RealmSwift' țintă 'RealmDoTests' nu ... 

Salvați fișierul, ieșiți și tastați:
pod instalare

După ce CocoaPods termină instalarea bibliotecii, ne va cere să închidem proiectul Xcode și să deschidem spațiul de lucru. Faceți asta și suntem gata să continuăm codificarea. Vom începe cu AppDelegate.

Configurați delegarea aplicației pentru a importa Biblioteca Realmului

În a noastră AppDelegate vom importa biblioteca Realm, deci adăugați următoarele la AppDelegate.swift fişier:

import Import UIKit RealmSwift @UIApplicationMain class AppDelegate: ... 

Lăsați clasa așa cum este pentru moment, pentru a ne putea concentra atenția asupra obiectului modelului.

Modele de obiecte live

Definirea modelelor din Realm este simplă; tocmai ați creat o clasă de model logic. În proiectul nostru, vom să stocăm mementouri, așa că să creăm o clasă numită Reminder.swift, cu următorul cod:

importați Clasa RealmSwift Memento: Obiect dynamic var name = "" dinamic var done = false 

Pentru acest tutorial, avem nevoie doar de acest lucru Aducere aminte model, așa că am terminat cu toții! Este atât de simplu și instanțierea unui model este la fel de ușor, așa cum vom afla mai târziu. 

Configurați Controlerele de vizualizare și Storyboard

Acum ne concentrăm atenția asupra controlorilor de vizualizare, dar înainte de a merge la MasterViewController.swift să ne deschidem Main.storyboard și adăugați un buton de bare în partea dreaptă sus, numit Adăuga, așa cum se arată mai jos:

Proiectul a fost inițializat de Xcode cu sursa de date și delegat cablat la controlerul de vizualizare, deci tot ce trebuie să facem este să adăugăm butonul pe care tocmai l-am creat la controlerul de vizualizare ca IBOutlet. Țineți și trageți de la buton la controlerul de vizualizare în modul de vizualizare divizată, pentru a genera legătura.

Inițializarea domeniului

Acum, mergeți la MasterViewController.swift fișier, vom declara variabilele de care avem nevoie, care ar trebui să arate cam așa:

clasa MasterViewController: UITableViewController var realm: Realm! // (1) @IBOutlet slab var addButton: UIBarButtonItem! var remindersList: Rezultate // (2) get return realm.objects (Reminder.self) override func vizualizareDidLoad () // (3) super.viewDidLoad () // Efectuați orice setare suplimentară după încărcarea vizualizării, de obicei dintr- . tărâm = încercați! Realm () ... 

Mai întâi, pe linia (1), declarăm variabila Realm pe care ne referim pentru a ajunge la datastorele noastre. Apoi, încărcăm leneșul remindersList apelarea obiectelor Realm pentru o listă cu toate obiectele Reminder. În cele din urmă, instanțiăm variabila Realm pe care am declarat-o la început. Nimic prea complicat până acum!

Configurați funcția View Delegate și Datasource

Apoi, ne-am înființat tableView delegate și metode de luare a datelor, după cum urmează:

suprascrie func numOffSections (in tableView: UITableView) -> int return 1 suprascrie func tableView (_tableView: UITableView, numberOfRowsInSection sectiune: Int) -> int // (return remindersList.count override function tableView : UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell lasa cell = tableView.dequeueReusableCell (cuIdentifier: "Cell", pentru: indexPath) lasa item = remindersList [indexPath.row] cell.textLabel! .Text = item.name // (5) celula.textLabel! .TextColor = element.done == false? UICcolor negru: UICcolor.lightGray retur cell 

Pe linia (4), primim un număr de remindersList lista de obiecte, care va stabili numărarea numărului de rânduri din secțiunea noastră unică tableView.

Apoi, pentru fiecare celulă, obținem Aducere aminte proprietății obiectului viu pentru a seta eticheta, precum și pentru a marca dacă elementul este marcat ca făcut sau nu.

Scrierea modificărilor la baza de date

Vrem ca utilizatorii noștri să poată schimba un articol așa cum este făcut (și nu făcut), pe care îl indicăm schimbând culoarea etichetei. De asemenea, dorim să facem editarea tabelului (utilizatorii vor putea elimina celulele prin deplasarea de la dreapta la stânga), pe care le realizăm prin adăugarea următorului cod:

suprascrie func tableView (_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) lăsați item = remindersList [indexPath.row] încercați! auto.realm.write (// (6) item.done =! item.done) // actualizați rândurile tableView.reloadRows (la: [indexPath], cu: .automatic) override func tableView (_tableView: , canEditRowAt indexPath: IndexPath) -> Bool return true suprascrie func tableView (_tableView: UITableView, comite editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) if (editingStyle ==delete) let item = remindersList [indexPath.row ] încerca! auto.realm.write (auto.realm.delete (item) // (7)) tableView.deleteRows (la: [indexPath], cu: .automatic) 

Pe linia (6), aceasta este prima dată când scriem înapoi în baza noastră de date, pe care pur și simplu o faceți într-o self.realm.write bloc. Rețineți că tot ce trebuie să faceți cu un obiect de instanță este setat la valoarea acestuia, nimic mai mult. Deci, în acest caz, vom comuta valoarea făcută item.done =! item.done

Linia (7) este al doilea exemplu de scriere în baza noastră de date: ștergem un obiect din baza de date prin ștergerea pur și simplu a obiectului de instanță.

Adăugarea de obiecte noi

Facem progrese mari și, de fapt, aproape că am terminat! Acum putem încărca, edita și șterge mementourile, dar lipsește o acțiune importantă: adăugând un memento nou. Pentru a implementa acest lucru, creați un nou @IBAction metodă, și sârmă până în scenă Adăuga bara de instrumente pentru metoda. 

Vom construi un simplu AlertViewController în exemplul nostru, ci ca un exercițiu separat, încercați să perfecționați aplicația prin actualizarea acesteia într-un nou controler de vizualizare. 

Pentru moment, continuați și adăugați următorul cod:

@IBAction func addReminder (_ expeditor: Oricare) letarrtVC: UIAlertController = UIAlertController (titlu: "Reminder nou", mesaj: "Ce vreți să vă amintiți?"  a renunța la cancelAction = UIAlertAction.init (titlu: "Anulare", stil: .destructive, handler: nil) alertVC.addAction (cancelAction) // Alertă acțiune închidere permite addAction = UIAlertAction.init (titlu: "Adăugare", stil:. implicit) (UIAlertAction) -> Void in let textFieldReminder = (alertVC.textFields? .first)! ca UITextField lăsați reminderItem = Reminder () // (8) reminderItem.name = textFieldReminder.text! reminderItem.done = false // Adăugăm memento la baza noastră de date încercați! auto.realm.write (auto.realm.add (reminderItem) // (9) self.tableView.insertRows (la: [IndexPath.init (rând: self.remindersList.count-1, secțiunea: 0)], cu : .automatic)) alertVC.addAction (addAction) prezent (alertVC, animat: true, completare: nil) 

Pe linia (8), creăm o nouă instanță de memento și îi setăm proprietățile. Apoi, pe linia (9) adăugăm memento prin self.realm.add (element).

Testarea aplicației

Deci, să încercăm aplicația, construindu-o și executând-o în Simulator. Mergeți mai departe și adăugați două mementouri și setați unul dintre ele așa cum ați făcut prin atingerea acestuia. Dacă închideți aplicația și o deschideți din nou, elementele ar trebui să fie încă acolo.

Realmul Browser

Si asta e! Cu puțin până la nici o curbă de învățare și prin ignorarea oricăror complexități ale datelor de bază, avem un back-end complet copiat pe dispozitiv. Aceasta este Realm Mobile Database. De asemenea, puteți verifica dacă datele se află pe dispozitiv descărcând Realm Browser, o aplicație macOS care permite vizualizarea, depanarea și editarea obiectelor de date Realm. 

Descărcați aplicația de la Mac App Store și deschideți baza de date Realm, care este localizată în aplicația dvs. CoreSimulator / Dispozitive / CodAplicație / date / ... pliant. Fișierul pe care îl cauți este db.realm.

Deschizând-o, nu trebuie doar să vă vizualizați datele, ci și să editați și să adăugați date noi. Mergeți și încercați!

Concluzie

În acest tutorial, ați învățat despre Realm Mobile Database și de ce este un instrument puternic pentru dezvoltatorul iOS. De asemenea, am atins pe scurt omologul său de server, Realm Mobile Platform, pe care îl vom acoperi într-un tutorial separat.

Am construit apoi o aplicație simplă de mementouri care este alimentată de Realm Mobile Database. În doar câteva zeci de linii de cod, am reușit:

  1. configurați un model live-object pentru Reminder
  2. conectați controlerul de vizualizare la modelul de date
  3. declarați, instanțiați, încărcați, adăugați și ștergeți din baza de date Realm

În sfârșit, ați văzut cum să utilizați Realm Browser pentru a depana și vizualiza datele.

Aceasta este o introducere foarte importantă în baza de date Realm Mobile, dar puteți să o utilizați ca punct de pornire pentru pornirea unor teme mai avansate. Ca pași următori, puteți să vă uitați la:

  • Modelul de date din regiune
  • Documentația pentru Realm for Swift
  • Documentație pentru regiune pentru Obiectiv-C 
  • Realm Reference Mobile API Reference

Asigurați-vă că ați explorat unele dintre temele avansate din documentația de mai sus, cum ar fi lucrul cu relațiile de date, testarea obiectelor Realm, filetarea și criptarea. 

Și în timp ce sunteți aici, asigurați-vă că ați verificat câteva dintre celelalte postări ale noastre privind dezvoltarea aplicațiilor iOS!

Cod