Bygge en handleliste Application Med CloudKit: Introduction

Building en handleliste Application Med CloudKit: Introduksjon
21
Del
13
Del

Denne Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie kalt Bygge en handleliste Application Med CloudKit.Building en handleliste Application Med CloudKit. Legge Records

I 2012 introduserte Apple iCloud sammen iOS 5. På Samtidig kunngjorde selskapet at utviklerne ville ha tilgang til iCloud gjennom en rekke APIer. Frem til nå har utviklerne hadde tre alternativer:

nøkkelverdien lagring

dokumentlagring

Kjerne data integrasjon
< p> Disse APIer er ikke perfekt skjønt. En stor brist er deres mangel på åpenhet. Kjernen data integrasjon i særdeleshet har ført til frustrasjon og forvirring blant selv de mest erfarne utviklere. Når noe gikk galt, utviklerne hadde ingen anelse om hva eller hvem den skyldige var. Det kan være et problem i deres kode eller i Apples.

CloudKit

Under fjorårets WWDC lanserte Apple CloudKit, en helt ny ramme som direkte samhandler med Apples iCloud-servere. Rammeverket kan sammenlignes med en rekke PaaS (Platform as a Service) løsninger, som for eksempel Parse. Som Parse, gir Apple en fleksibel API og et dashbord som gir utviklere en titt inn data som er lagret på Apples iCloud-servere.

Det jeg liker mest om CloudKit er Apples egen satsing på rammen. Ifølge selskapet er iCloud Drive og iCloud Photo Library bygget på toppen av CloudKit. Dette viser at CloudKit rammeverk og infrastruktur er robust og pålitelig.

Som utvikler er viktig dette tegn på tillit og engasjement. I det siste, Apple tidvis sluppet APIer som ble plaget av bugs eller mangler viktige funksjoner bare fordi selskapet ikke var å spise sin egen hundemat. Dette er ikke sant for CloudKit. Og det er lovende.

Bør du bruke CloudKit

Key-verdi lagring og dokumentlagring har deres bruk og Apple understreker at CloudKit ikke erstatte eller avvikle eksisterende iCloud APIer. Det samme gjelder for kjernedata. CloudKit tilbyr ikke lokal lagring, for eksempel. Dette betyr at et program som kjører på en enhet uten en nettverkstilkobling er ganske mye ubrukelig hvis det utelukkende er avhengig av CloudKit.

Apple understreker også at feilhåndtering er avgjørende når du arbeider med CloudKit. Hvis en lagreoperasjonen mislykkes, for eksempel, og brukeren blir ikke varslet, så kan hun ikke engang vet at hennes data ikke ble lagret-og tapte.

CloudKit er en flott løsning for lagring strukturert så vel som ikke-strukturerte data i skyen. Hvis du trenger en løsning for å få tilgang til data på flere enheter, så CloudKit er absolutt et alternativ du bør vurdere.

Under årets WWDC, gjorde Apple det få utviklere hadde forventet eller håpet på. Det kunngjorde en web-tjeneste for CloudKit. Dette betyr at CloudKit kan brukes på nesten alle plattformer, inkludert Android og Windows Phone.

Apples priser er ganske konkurransedyktig også. Komme i gang med CloudKit er gratis og den er fri for de fleste bruksområder. Igjen er CloudKit absolutt verdt å vurdere om du har tenkt å lagre data i skyen.

CloudKit Concepts

Developers sliter med kjernedata er ofte ukjent med byggesteinene i rammeverket. Hvis du ikke tar deg tid til å lære om og forstå kjernedata stabelen, så du vil uunngåelig støte på problemer. Det samme gjelder for CloudKit.

Før vi begynner å arbeide på et utvalg program som bruker CloudKit, ønsker jeg å bruke noen minutter på å introdusere deg til en rekke sentrale begreper i den CloudKit rammeverk og infrastruktur. La oss starte med containere, databaser og sandkasse.

Personvern og Containment

Apple gjør det veldig klart at personvern er en viktig del av CloudKit. Det første du må vite er at hver applikasjon har sin egen container i iCloud. Dette konseptet er veldig lik hvordan iOS-applikasjoner har hver sin sandkasse. Det er imidlertid mulig å dele en beholder med andre applikasjoner, så lenge disse programmene er forbundet med den samme utvikler konto. Som du kan forestille deg, åpner dette opp en rekke interessante muligheter for utviklere.

En CloudKit container inneholder flere databaser. Hver container har én offentlig database som kan brukes til å lagre data som er tilgjengelig for alle brukere av søknaden din. I tillegg til den offentlige databasen inneholder en beholder også en privat database for hver bruker av søknaden din. Brukerens private database brukes til å lagre data som er spesifikke for den aktuelle brukeren. Data segregering og innkapsling er en nøkkelkomponent i CloudKit og iCloud infrastruktur.

Selv om et program beholder kan inneholde mange databaser, fra en utviklers perspektiv en container rommer bare to databaser, offentlig database og private database over brukeren som er logget på sin iCloud-konto. Jeg skal snakke mer om iCloud-kontoer litt senere.

Records og Record Zones

Databasene av et programs Container Store poster. Dette er ikke meget forskjellig fra en tradisjonell database. Ved første øyekast postene som er lagret i en CloudKit database synes å være noe mer enn wrappers for en ordbok med nøkkelverdipar. De kan se ut som glorifiserte ordbøker, men det er bare en del av historien.

Hver post har også en rekord type og en rekke metadatafelt. En rekord metadata holder styr på når posten ble opprettet som bruker opprettet posten, når posten ble sist oppdatert, og som oppdateres posten.

CKRecord klassen representerer en slik rekord, og det er en ganske kraftig klasse . Verdiene du kan lagre i en post er ikke begrenset til eiendommen listetyper. Du kan lagre strenger, tall, datoer og blobs av data i en post, men CKRecord klassen behandler også posisjonsdata, CLLocation, som en førsteklasses datatype.

Du kan også lagre mengder av støtte datatyper i en post. Med andre ord, matriser av strenger eller tall er ikke noe problem for en CKRecord eksempel.

Records er organisert i rekord soner. En rekord sonegruppene relatert poster. Offentlig og privat database hver har en standard posten sone, men det er mulig å lage egne rekord soner hvis nødvendig. Rekord soner er et avansert tema som vi ikke vil diskutere i mye detalj i denne serien.

Relasjoner

Forholdet mellom postene forvaltes av forekomster av CKReference klassen. La oss se på et eksempel for å bedre forstå hvordan akkurat relasjoner arbeid. Søknaden vil vi skape i denne serien vil håndtere en rekke handlelister. Hver liste kan ha null eller flere elementer i den. Dette betyr at hvert element må ha en referanse til listen det tilhører.

Det er viktig å forstå at varen holder en referanse til listen. Selv om det er mulig å lage en rekke CKReference forekomster for de elementer av en liste, er det mer praktisk-og anbefalt å holde fremmednøkkel med varen, ikke listen. Dette er også hva Apple anbefaler.

Måten CloudKit forvalter relasjoner er ganske grunnleggende, men det gir en mulighet til å automatisk slette en rekord barn når mor posten slettes. Vi vil ta en nærmere titt på relasjoner litt senere i denne serien.

Eiendeler

Jeg har også lyst til å nevne CKAsset klassen. Selv om det er mulig å lagre blobs av data i en post, ustrukturerte data, for eksempel bilder, lyd og video, bør lagres som CKAsset tilfeller. En CKAsset eksempel er alltid forbundet med en rekord, og det samsvarer med en fil på disken. Vi vil ikke jobbe med CKAsset klasse i denne serien.

Autentisering

Jeg er sikker på at du er enig i at CloudKit ser ganske attraktivt. Det er imidlertid en viktig detalj at vi ikke har diskutert ennå, autentisering. En bruker autentiserer seg gjennom sin iCloud-konto. Hvis en bruker ikke er logget på sin iCloud-konto, så de er ikke i stand til å skrive data til iCloud.

Selv om dette er sant for noen av iCloud-APIer, husk at programmer som utelukkende stole på CloudKit vil ikke være meget funksjonell i dette tilfellet. Alt brukeren kan gjøre er å få tilgang til data i offentlig database, hvis det tillates av utbygger.

Reading data

Hvis en bruker ikke er logget på sin iCloud-konto, kan de fortsatt lese data fra den offentlige databasen. Det sier seg selv at den private databasen er ikke tilgjengelig siden iCloud ikke vet hvem som bruker programmet.

Lese og skrive

Når du er logget inn, kan brukeren lese og skrive til offentlig og deres private database. Jeg har allerede nevnt at Apple tar personvern på alvor. Som et resultat av postene som er lagret i det private database er kun tilgjengelig for brukeren. Selv du, utvikleren, kan ikke se data brukeren har lagret i sitt private database. Dette er ulempen av Apple administrerende programmets backend, men det er en klar seier for brukeren.

Shopping List

Programmet vi er i ferd med å bygge vil administrere handlelister . Hver handleliste vil ha et navn og null eller flere elementer. Etter å ha bygget kjøpeprogramlisten, bør du føle deg ganske komfortabel med å bruke CloudKit rammeverket i et prosjekt på egen hånd.

Forutsetninger

For denne opplæringen, jeg skal bruke Xcode 7 og Swift 2. Hvis du bruker en eldre versjon av Xcode, så husk at du bruker en annen versjon av Swift programmeringsspråk. Dette betyr at du må oppdatere prosjektets kildekoden for å tilfredsstille kompilatoren. Endringene er stort sett mindre, men det er viktig å være klar over dette.

Fordi CloudKit er et avansert tema, jeg kommer til å anta at du er kjent med både Xcode og Swift programmeringsspråk. Hvis du er ny på iOS utvikling, så jeg anbefaler å lese en innledende tutorial først, eller ta en av våre kurs på Swift utvikling. Derek Jensen har skapt et kurs på Swift programmeringsspråk, samt et kurs om iOS utvikling med Swift. Pass på å sjekke dem ut hvis du er ny på iOS utvikling eller Swift språk.

Prosjektoppsett

Det er på tide å begynne å skrive noen kode. Lansere Xcode og opprette et nytt prosjekt basert på Enkel visning Application mal.

Gi prosjektet et navn og en organisasjon identifikator. Den resulterende bunt identifikator vil bli brukt til å opprette identifikator av programmets standard container. Som identifikator må være unik over utviklerkontoer som de deler én global namespace. Det er derfor viktig å følge Apples råd og bruke reverse domenenavn notasjon.

Aktivere iCloud

Det neste trinnet er å aktivere iCloud og CloudKit. Velg prosjektet i Prosjekt Navigator til venstre og velg målet for programmet fra listen over mål. Åpne kategorien Generelt og satt teamet til riktig team. For å unngå eventuelle problemer i neste trinn, må du kontrollere at utbygger kontoen har de nødvendige tillatelsene til å lage en App ID.

Deretter åpner du kategorien Capabilities på toppen og setter bryteren for iCloud til på. Xcode vil trenge litt tid på å lage en App ID på dine vegne. Det vil også legge de nødvendige rettigheter til App ID. Hvis dette ikke fungerer, så sørg for at klubben er riktig innstilt, og du har de nødvendige tillatelsene til å lage en App ID.

Aktivering CloudKit er så enkelt som å sjekke avkrysningsruten CloudKit. Som standard vil programmet bruke standard beholder for søknaden din. Denne beholderen opprettes automatisk for deg når du aktiverer CloudKit.

Hvis søknaden trenger tilgang til en annen beholder, eller det er behov for tilgang til flere containere, så sjekk avkrysningsruten Angi tilpassede containere og sjekke beholderne applikasjonen krever tilgang til.

Du har kanskje lagt merke til at Xcode har automatisk koblet målet mot CloudKit rammeverket. Dette betyr at du er klar til å begynne å bruke CloudKit i programmet.

bli våt på beina

I neste opplæringen av denne serien, vil vi legge til muligheten til å legge til, redigere og fjerne handlelister. For å fullføre denne opplæringen, men jeg vil gjerne få føttene våt ved å vise deg hvordan du kan samhandle med CloudKit API. Alt vi skal gjøre er å hente posten i dag undertegnet i bruker.

Åpne ViewController.swift og legge en import uttalelse øverst for å importere CloudKit rammeverket
. Import UIKitimport CloudKit

For å hente bruker posten, må vi først hente posten identifikator. La oss se hvordan dette fungerer. Jeg har opprettet en hjelper metode, fetchUserRecordID, til å inneholde logikken for å hente brukerens posten identifikator. Vi benytter denne metoden i visningen kontrollerens viewDidLoad metode.
Styre func viewDidLoad () {super.viewDidLoad () //Fetch Bruker Record ID fetchUserRecordID ()}

Gjennomføringen av fetchUserRecordID er litt mer interessant enn viewDidLoad. Vi først hente en referanse til programmets standard container ved å påberope defaultContainer på CKContainer klasse. Vi kaller fetchUserRecordIDWithCompletionHandler (_ :) på defaultContainer. Denne metoden kan brukes med en nedleggelse som sin eneste argument
privat func fetchUserRecordID () {//Fetch Standard Container la defaultContainer = CKContainer.defaultContainer () //Fetch User Record defaultContainer.fetchUserRecordIDWithCompletionHandler {(registreringsID, feil) - >.; Ugyldig inn hvis la responseError = error {print (responseError)} else if la userRecordID = registreringsID {dispatch_async (dispatch_get_main_queue () {() - > ugyldig i self.fetchUserRecord (userRecordID)})}}}

Nedleggelsen godtar to argumenter, en valgfri CKRecordID forekomst og en valgfri NSError eksempel. Hvis feilen er null, vi trygt pakke registreringsID.

Det er viktig å understreke at nedleggelsen vil bli kalt på en bakgrunn tråd. Dette betyr at du må være forsiktig når du oppdaterer brukergrensesnittet i programmet innenfra en nedleggelse påberopes av CloudKit. I fetchUserRecordID, for eksempel, jeg eksplisitt kaller fetchUserRecord (_ :) på hovedtråden.

I fetchUserRecord (_ :), vi henter brukeren rekord ved å fortelle CloudKit som registrerer vi er interessert i. Legg merke til at vi kaller fetchRecordWithID (_:. completionHandler :) på privateDatabase objekt, en egenskap av defaultContainer objektet

Metoden aksepterer en CKRecordID forekomst og en ferdigstillelse handler. Sistnevnte tar en valgfri CKRecord forekomst og en NSError eksempel. Hvis vi lykkes hentet brukeren rekord, vi skrive den til Xcode konsoll
private func fetchUserRecord (registreringsID: CKRecordID). {//Fetch Standard Container la defaultContainer = CKContainer.defaultContainer () //Fetch Private Database la privateDatabase = defaultContainer. privateCloudDatabase //Fetch User Record privateDatabase.fetchRecordWithID (registreringsID) {(record, feil) - > Ugyldig inn hvis la responseError = error {print (responseError)} else if la userRecord = rekord {print (userRecord)}}}

Dette burde ha gitt deg en smak av CloudKit rammeverket. Det er moderne API er intuitivt og lett å bruke. I neste opplæringen, vil vi grave dypere i mulighetene for CloudKit API.

Konklusjon

Du skal nå ha en riktig forståelse av de grunnleggende i CloudKit rammeverket. Resten av denne serien vil være fokusert på å bygge handleliste søknaden. I neste opplæringen, vil vi begynne med å legge muligheten til å legge til, redigere og fjerne handlelister.