IceCream va ajuta sa sincronizati baza de date Realm cu CloudKit.

Functioneaza ca magia!

Caracteristici

  • Baza de date Taram

    • Off-line In primul rand
    • Siguranta firului
    • Programare reactiva
    • Optimizat pentru aplicatii mobile
    • Usor atunci cand migrati
  • Apple CloudKit

    • Autentificare automata
    • Silent Push
    • Gratuit cu limite (baza de date privata consuma cota iCloud a utilizatorului dvs.)
  • Actualizare Delta

  • Accesibilitate (Asistenta pentru functionarea pe termen lung

  • Manipularea puternica a erorilor

  • Sincronizati automat

  • Suport pentru mai multe modele de obiecte

  • Suport pentru baze de date publice / private

  • Sincronizarea datelor mari

  • Sincronizarea manuala este, de asemenea, acceptata

  • Asistenta relationala (To-One / To-Many)

  • Disponibil pe fiecare platforma Apple (iOS / macOS / tvOS / watchOS)

  • Sustineti listele de tipuri naturale ale taramului

  • Documentatie completa

Conditie prealabila

  1. Asigurati-va ca v-ati inscris la Programul pentru dezvoltatori Apple
  2. Porniti iCloud in Capabilitati si alegeti CloudKit
  3. Activati modurile de fundal si verificati preluarea fundalului si notificarea la distanta

Utilizare

Notiuni de baza

  1. Pregateste-ti Obiectele Taramului (de ex. Caine, Pisica …):
clasa Caine: Obiect {@objc dynamic var id = NSUUID (). uuidString @objc dynamic var name = “” @objc dynamic var age = 0 @objc dynamic var isDeleted = false static let AVATAR_KEY = “avatar” @objc dynamic var avatar : CreamAsset? @objc proprietar var varic: persoana? // relatiile unu la unu trebuie sa fie optionale clasa de suprascriere func primaryKey () -> Sir? {return “id”}}
  1. Faceti astfel de lucruri:
extensie Dog: CKRecordConvertible & CKRecordRecoverable {// Lasati-l necompletat este tot}

Este usor? Extensiile de protocol fac acest truc.

  1. Porniti motorul!
var syncEngine: SyncEngine? func application (_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {… syncEngine = SyncEngine (obiecte: [SyncObject (tip: Dog.self), SyncObject (tip: Cat.self), SyncObject (tip: Person.self)]) application.registerForRemoteNotifications () …}
  1. Ascultati notificarile la distanta

Exemplul de cod din AppDelegate va fi o buna referinta.

Asta este tot ce trebuie sa faci! De fiecare data cand scrieti pe Realm, SyncEngine va primi notificari si se va ocupa de lucrurile de sincronizare!

Pentru mai multe detalii, clonati proiectul pentru a vedea codul sursa.

Stergeri de obiecte

Da, va recomandam sa utilizati Soft Deletions . De aceea adaugam o proprietate isDeleted la protocolul CKRecordConvertible.

Cand doriti sa stergeti un obiect, trebuie doar sa setati proprietatea lui isDeleted la adevarat si restul lucrurilor sunt deja ingrijite.

De asemenea, nu trebuie sa va faceti griji cu privire la curatarea lucrurilor. De asemenea, a fost luat in considerare.

Ce zici de activul de sincronizare?

Din fericire, avem o solutie perfecta pentru sincronizarea activelor. Absolut, ai putea, de asemenea, sa iti stochezi imaginea sau tipul de resurse ca tip de date si totul functioneaza bine. Dar Realm are o limita de 16 MB de proprietate a datelor. Si CloudKit ne incurajeaza sa folosim CKAset in locurile in care datele pe care doriti sa le atribuiti unui camp au o dimensiune mai mare de cativa kilobiti. Deci, luand in considerare cele doua de mai sus, va recomandam sa utilizati proprietatea CreamAsset pentru a pastra datele. CreamAsset va stoca datele locale pe sistemul de fisiere si va salva doar caile de fisiere in Taram, totul automat. Si vom incheia lucrurile pentru a le incarca in CloudKit ca CKAsset.

Un exemplu de proiect este furnizat pentru a vedea utilizarea detaliata.

Relatii

IceCream a sustinut oficial relatia Realm (atat one-to-one, cat si one-to-many) de la versiunea 2.0.

Mai ales, pentru a sustine relatia cu multi, trebuie sa treceti tipul de element al Listei la parametrii metodei de initiere SyncObject. De exemplu:

syncEngine = SyncEngine (obiecte: [SyncObject (tip: Dog.self), SyncObject (tip: Cat.self), SyncObject (tip: Person.self, uListElementType: Cat.self) // daca modelul Person are o lista <Cat> proprietate])

Cerinte

Sugestii de depanare

Este adevarat ca depanarea CloudKit este dificila si plictisitoare. Dar am cateva sfaturi pentru voi cand va confruntati cu puzzle-uri:

  • Ar trebui sa stiti cum functioneaza Realm si CloudKit.
  • Folosind instrumente GUI, cum ar fi Realm Browser si CloudKit Dashboard.
  • Cand esti pierdut si nu iti amintesti unde esti, iti sugerez sa o iei de la capat. In tabloul de bord CloudKit, este furnizat butonul „Reset …”. De asemenea, puteti sterge baza de date locala reinstaland aplicatiile.
  • In mod implicit, IceCream tipareste doar unele jurnale pe consola dvs. in modul DEBUG. Cu toate acestea, il puteti dezactiva adaugand IceCream.shared.enableLogging = false daca va deranjeaza.
  • Pastreaza-ti calmul si continua!

Avertisment: daca doriti sa lansati aplicatia in App Store, nu uitati sa implementati setarile de mediu in productie. O puteti face cu usurinta in tabloul de bord CloudKit. Trebuie luate in considerare si permisiunile de scriere si citire.

Un alt sfat

Cum sa depanati CloudKit in modul de productie? Vezi aceasta postare.

Exemplu

Pentru a rula exemplul de proiect, clonati repo, apoi deschideti Exemplu / IceCream_Example.xcodeproj.

Ghid de instalare

Folosind Swift Package Manager, Carthage sau CocoaPods.

Manager de pachete Swift

Din Xcode 11, puteti utiliza Swift Package Manager pentru a adauga IceCream si dependentele sale la proiectul dvs.

Selectati Fisier> Pachete rapide> Adaugare dependenta pachet. Introduceti https://github.com/caiyue1993/IceCream.git in dialogul „Alegeti depozitul de pachete”. In pagina urmatoare, specificati regula de rezolvare a versiunii ca „Pana la urmatoarea majora”, cu „2.0.2” ca prima versiune. Dupa ce Xcode a verificat sursa si a rezolvat versiunea, puteti alege biblioteca „IceCream” si o puteti adauga la tinta aplicatiei.

Daca intampinati vreo problema sau aveti o intrebare cu privire la adaugarea pachetului la un proiect Xcode, va sugerez sa cititi articolul de ghid Adaugare de dependente de pachet la aplicatia dvs. de la Apple.

Cartagina

Carthage este un manager de dependenta descentralizat pentru aplicatiile Cocoa.

Pentru a integra IceCream in proiectul Xcode folosind Carthage, specificati-l in fisierul dvs. Cart:

github “caiyue1993 / IceCream”

Apoi, executati urmatoarea comanda pentru a construi cadrele:

In mod normal, veti obtine IceCrema , Taram si RealmSwift cadre. Trebuie sa va configurati manual proiectul Xcode pentru a adauga aceste 3 cadre.

In fila Setari generale vizate de aplicatia dvs. , in sectiunea Cadruri si biblioteci conectate , glisati si fixati fiecare cadru de utilizat din folderul Carthage / Build de pe disc.

In fila Setari faze de construire a aplicatiilor vizate , faceti clic pe pictograma „+” si alegeti „Faza noua script de rulare”. Creati un script Run cu urmatorul continut:

/ usr / local / bin / carthage copy-frameworks

si adaugati caile la cadrele pe care doriti sa le utilizati in „Fisiere de intrare” (luand de exemplu platforma iOS):

$ (SRCROOT) /Carthage/Build/iOS/IceCream.framework $ (SRCROOT) /Carthage/Build/iOS/Realm.framework $ (SRCROOT) /Carthage/Build/iOS/RealmSwift.framework

Pentru mai multe informatii despre modul de utilizare a Cartaginei, va rugam sa consultati pagina proiectului sau.

CocoaPods

IceCream este disponibil prin CocoaPods. Pentru ao instala, pur si simplu adaugati urmatoarea linie in Podfile:

Daca doriti sa construiti IceCream ca cadru static, este necesar CocoaPods 1.4.0+.

Fa-o mai bine

Aceasta este lista de sarcini pentru proiectul IceCream. Ne puteti alatura pentru a deveni colaborator.

  • Baza de date partajata CloudKit

Consultati fisierul CONTRIBUTING pentru instructiuni de contributie.

Demo live

Aplicatia mea Sprint (O aplicatie usoara de gestionare a sarcinilor) foloseste IceCream. Puteti sa-l descarcati si sa-l incercati pe mai multe dispozitive pentru a vedea aceasta magie.

Referinta

  • Sincronizarea datelor cu CloudKit (recomandat)
  • Cele mai bune practici CloudKit
  • Stapanirea notificarilor taramului

Colaboratori

Acest proiect exista datorita tuturor oamenilor care contribuie:

Sponsorizare

Open source este excelent, dar este nevoie de timp si eforturi pentru a mentine. As fi foarte apreciat si motivat daca ati putea sprijini financiar mentinerea IceCream. Puteti sponsoriza acest proiect prin modalitatile de mai jos:

  • Deveniti sponsorii mei GitHub, recomandat
  • Spune-mi pe Open Collective
  • Transferati-va donatiile direct prin PayPal

Si multumim tuturor sustinatorilor nostri pentru colectivul deschis:

Licenta

IceCream este disponibil sub licenta MIT. Consultati fisierul LICENTA pentru mai multe informatii.