Å holde applikasjonsdata synkronisert på tvers av enheter er en komplisert og skremmende oppgave. Heldigvis er det akkurat hvorfor Apple bygget iCloud. I denne Tuts + Premium-serien lærer du hvordan iCloud fungerer, og hvordan programmene dine kan sømløst dele data på flere enheter.
En av de mest spionerte funksjonene i iOS 5 har vært iCloud. Selv om iCloud deler en rekke likheter med Apples MobileMe-tjeneste, er iCloud mye mer enn MobileMe noensinne var. Som mange andre selskaper har Apple innsett at skyen er en uunnværlig del av mobilrommet. Noen skeptikere ser iCloud som Apples andre forsøk på å bygge en synkroniseringstjeneste, men iCloud er et mer ambisiøst foretak med enormt potensial.
Dette er den første artikkelen i en serie om iCloud Storage. Før du går inn i iCloud Storage, vil jeg gjerne ta et øyeblikk for å gi en rask oversikt over hva du kan forvente av denne serien.
Denne tuturialen vil ikke ha noen kodeprøver i den. Målet mitt for denne opplæringen er å gjøre deg kjent med iCloud på et konseptnivå og å demonstrere hvordan iCloud kan hjelpe deg som utvikler.
I den andre delen av denne serien vil jeg vise deg hvordan du aktiverer iCloud Storage for et program. Vi vil også bygge vår første iCloud-aktiverte applikasjon ved å bruke iCloud Key-Value Storage.
De siste to delene vil fokusere på iCloud Document Storage. Del tre vil fokusere på den nye UIDocument-klassen og vil diskutere hvordan bruk av den kan gjøre livet enklere. Del fire vil fokusere på UIManagedDocument, en konkret underklasse av UIDocument integrert med Core Data. Takket være den tette integrasjonen av Core Data og iCloud, ser du at søknaden din kan ha stor fordel ved å vedta både Core Data og iCloud i dine applikasjoner!
For forbrukeren er iCloud en gratis tjeneste som lagrer brukerens data i skyen, med data som musikk, bilder, e-post, kalendere, kontakter, etc. Dataene som er lagret på iCloud, er tilgjengelige for alle enheter som er konfigurert med brukerens iCloud-konto (for eksempel Macbooks, iPhones, iPads). Mens MobileMe alltid har hatt en ganske høy prislapp, gjorde Apple iCloud fri fra starten. Det er grunn til at Apple tok denne beslutningen. For at iCloud skal lykkes, er det viktig at det brukes av så mange som mulig. Apple har store planer for iCloud, og etter hvert som tiden går, bør den bli en enda viktigere komponent i operativsystemene iOS og OS X.
Komponenten som er mest nyttig for utviklere, er hva Apple refererer til som iCloud Storage. Dette er delen av iCloud som er utviklet for applikasjonsdata.
Sammen med iCloud har Apple introdusert en samling APIer som tillater utviklere å vedta iCloud Storage i sine egne applikasjoner. Apple legger vekt på at deres egne applikasjoner, som iWork-pakken med applikasjoner, benytter de samme APIene som grensesnitt med iCloud. ICloud API er enkel, enkel å bruke og overraskende fleksibel. Det er klart at Apple har lagt mye tanke, innsats og ressurser i etableringen av iCloud med hensyn til integrasjon fra tredjeparter.
Å holde søknadsdata synkronisert på tvers av enheter, er ingen enkel feat (bare spør Apple, Dropbox eller Google!). Ikke bare krever det en pålitelig back-end-infrastruktur, men en av de mest skremmende utfordringene er å utføre datasynkroniseringen selv. Tallrike scenarier kan føre til tap av data eller korrupsjon. Konflikthåndtering, spesielt, er en av de mest utfordrende aspektene ved datasynkronisering. Jo mer komplekse datamodellen, desto mer sofistikert konflikthalgoritmen må være å håndtere alle kantsaker.
I stedet for å skape et eget iCloud-rammeverk, har Apple forbedret noen av sine eksisterende rammer med iCloud-APIer. NSFileManagers
er et godt eksempel på en klasse som har fått betydelig API-støtte for iCloud-integrasjon.
En av de mer fremtredende fordelene med iCloud er sømløs integrasjon med iOS. Hver iOS-enhet har en iCloud-demon som kjører i bakgrunnen. Denne demonen overvåker endringer i iCloud selv om programmet ikke kjører.
En annen iCloud-optimalisering er peer-to-peer-synkronisering. I likhet med Dropbox vil iCloud synkronisere endringer over det lokale nettverket hvis det oppdager at en enhet med samme iCloud-konto er på samme lokale nettverk.
Sist, men ikke minst, ble iCloud designet av et selskap med mange års erfaring med å levere og administrere data i skyen. Enkelheten som utviklere kan vedta iCloud i deres applikasjoner, viser at Apple har implementert en pålitelig løsning som vil være til fordel for tusenvis av utviklere. For de aller fleste applikasjoner vil det ikke lenger være verdt å utvikle en tilpasset datasynkroniseringsløsning.
Hvis du tenker på å vedta iCloud i søknaden din, foreslår jeg at du tar deg tid til å få en god forståelse av iClouds indre arbeid og være klar over begrensningene. ICloud-aktiverte applikasjoner har en iCloud-sandkasse som i sandboken et program har på iOS. Sandboxing har en rekke klare sikkerhetsfordeler. Sikkerheten kommer imidlertid til en pris. Ulempen med iCloud-sandboksen er at tilgang til programmets data fra andre installerte applikasjoner er tungvint.
Utviklere som er ny i iCloud tror kanskje at det er en svart boks med Apple som bestemmer hva som skjer med dataene dine og hvordan det håndteres. Dette er imidlertid ikke sant. Når et dokument endres på enhet A, endres endringene til iCloud. iCloud underretter deretter eventuelle tilleggsenheter, sier enheter B og C, av disse endringene. Det er opp til din søknad å bestemme hvordan det vil reagere når endringer gjøres. Det samme gjelder for konfliktløsning. Som jeg nevnte tidligere, er konflikthåndtering en av de mest utfordrende aspektene ved datasynkronisering. iCloud vil varsle deg når endringer har skjedd, og om konflikter har oppstått. Det er opp til deg å implementere en konflikthalgoritme for å håndtere eventuelle konflikter som måtte oppstå.
Det er også verdt å nevne at Core Data er tett integrert med iCloud. Siden introduksjonen på Mac-plattformen for mange år siden, har Core Data blitt et utrolig kraftig rammeverk. Integrasjonen med iCloud gjør den enda mer tiltalende. Konflikthåndtering, for eksempel, håndteres graciøst av Core Data takket være dens tette integrasjon med iCloud.
Det er to måter du kan bruke iCloud Storage i et program, (1) iCloud Key Value Storage og (2) iCloud Document Storage. Begge er målrettet mot spesielle brukstilfeller.
ICloud Key-Value Storage deler mye likheter med NSUserDefaults, og den opererer på lignende måte. Med iCloud Key-Value Storage, kan søknaden din lagre nøkkelverdepar, akkurat som du kan med NSUserDefaults eller et enkelt NSDictionary. Forskjellen er at disse nøkkelverdighetsparene eksisterer lokalt (på enheten) og i iCloud. Ved bestemte intervaller synkroniseres de lokale nøkkelverdier-parene med iCloud.
Å holde brukerinnstillingene synkronisert på tvers av enheter er et mulig brukstilfelle for iCloud Key Value Storage. Den passer perfekt til applikasjoner som håndterer en begrenset mengde data. Med andre ord, applikasjoner som ikke er datatunge og bare lagrer små mengder informasjon, passer best til nøkkelverdi lagring.
ICloud Key-Value Storage har en rekke begrensninger. Den første begrensningen er at kun egenskapsliste datatyper (NSString, NSNumber, NSDate, NSData, etc.) kan lagres. Egendefinerte modellobjekter må serieiseres før de kan lagres ved hjelp av iCloud Key-Value Storage.
En annen begrensning er relatert til hvor mye diskplass som er tilordnet nøkkelverdi lagring. Hver applikasjon kan lagre 1MB eller 1024 nøkkelverdier. Som nevnt tidligere, er Key-Value Storage ikke et alternativ for dataintensive applikasjoner.
Den store fordelen med Key-Value Storage er brukervennlighet. Det er ekstremt enkelt å sette opp og bruke i søknaden din, og krever en svært begrenset utviklingstid.
Som navnet tilsier, er denne typen lagring rettet mot dokumentbaserte applikasjoner. iCloud Document Storage kan brukes til å lagre filer og kan også takle pakker.
En av fordelene med iCloud Document Storage-modellen er at plassen som er tilgjengelig for din søknad, kun er begrenset av kapasiteten til brukerens iCloud-konto.
Disse to typer iCloud Storage er svært forskjellige, og det bør ikke være vanskelig å bestemme hvilken type som passer best for din søknad.
Konfigurere en applikasjon for bruk med iCloud er enkel og krever bare to trinn. I den andre delen av denne serien vil jeg snakke om oppsettprosessen mer detaljert ved å gå gjennom prosessen trinnvis. I denne artikkelen vil jeg gi en kort beskrivelse av hvert trinn.
Et program er som standard ikke konfigurert til å bruke iCloud. For å aktivere iCloud logger du deg på provisjonsportalen med utviklerkontoen din og aktiverer iCloud for applikasjonen din i App ID-portalen. Det er alt du trenger å gjøre for å levere iCloud til bruk i søknaden din.
Det neste trinnet er å skape de riktige rettighetene til søknaden din. Alle applikasjoner som ønsker å benytte seg av iCloud må være signert med iCloud-spesifikke rettigheter. Rettighetene definerer hvilke applikasjoner som har tilgang til søknadens data, og disse rettighetene gir derfor et sikkerhetslag for brukerens data.
Hvis du er forvirret av noen av de iCloud-konseptene jeg diskuterte, vil du kanskje holde øye med neste del av denne Tuts + Premium-serien. Neste gang vil jeg gå gjennom prosessen med å sette opp et iCloud-aktivert program, og vi vil bygge et program som vedtar iCloud Key Value Storage for å holde brukerens data synkronisert på flere enheter. Følg med!