Att hålla applikationsdata synkroniserad över enheter är en komplex och skrämmande uppgift. Lyckligtvis är det precis därför Apple byggde iCloud. I denna Tuts + Premium-serie kommer du att lära dig hur iCloud fungerar och hur dina applikationer kan dela data på flera enheter sömlöst.
En av de främsta funktionerna i iOS 5 har varit iCloud. Även om iCloud delar ett antal likheter med Apples MobileMe-tjänst, är iCloud mycket mer än MobileMe någonsin var. Apple har, liksom många andra företag, insett att molnet är en oumbärlig del av mobilutrymmet. Några skeptiker ser iCloud som Apples andra försök att bygga en synkroniseringstjänst, men iCloud är ett mer ambitiöst företag med enorm potential.
Detta är den första artikeln i en serie om iCloud Storage. Innan du dyker i iCloud Storage, vill jag ta en minut för att ge en snabb överblick över vad du kan förvänta dig från den här serien.
Denna tuturial kommer inte ha några kodprover i den. Mitt mål för denna handledning är att få dig bekant med iCloud på en konceptuell nivå och att visa hur iCloud kan hjälpa dig som utvecklare.
I den andra delen av denna serie visar jag hur du aktiverar iCloud Storage för en applikation. Vi kommer också att bygga vår första iCloud-aktiverade applikation genom att använda iCloud Key Value Storage.
De sista två delarna kommer att fokusera på iCloud Document Storage. Del tre kommer att fokusera på den nya UIDocument-klassen och kommer att diskutera hur du använder det kan göra ditt liv enklare. Del fyra kommer att fokusera på UIManagedDocument, en konkret underklass av UIDocument integrerad med Core Data. Tack vare den nära integrationen av Core Data och iCloud ser du att din ansökan kan gynna enormt från att anta både Core Data och iCloud i dina applikationer!
För konsumenten är iCloud en gratis tjänst som lagrar användarens data i molnet, med data som musik, foton, e-post, kalendrar, kontakter etc. De data som lagras på iCloud är tillgängliga för alla enheter som ställs in med användarens iCloud-konto (t.ex. Macbooks, iPhones, iPads). Medan MobileMe alltid har haft en ganska hög prislapp, gjorde Apple iCloud fri från början. Det finns anledning till att Apple fattade detta beslut. För att iCloud ska bli en framgång är det viktigt att det används av så många som möjligt. Apple har stora planer för iCloud, och när tiden går, bör den bli en ännu viktigare komponent i operativsystemen iOS och OS X.
Den komponent som är mest användbar för utvecklare är vad Apple hänvisar till som iCloud Storage. Detta är den del av iCloud som är utformad för applikationsdata.
Tillsammans med iCloud har Apple introducerat en samling API som gör det möjligt för utvecklare att anta iCloud Storage i sina egna applikationer. Apple betonar att deras egna applikationer, till exempel iWorks applikationsprogram, använder samma API för gränssnitt till iCloud. ICloud API är enkelt, lätt att använda och överraskande flexibelt. Det är uppenbart att Apple har lagt en massa tankar, ansträngningar och resurser till skapandet av iCloud när det gäller integration av tredje part.
Att hålla applikationsdata synkroniserad över enheter är ingen enkel uppgift (fråga bara Apple, Dropbox eller Google!). Det behöver inte bara en tillförlitlig back-end-infrastruktur, men en av de mest skrämmande utmaningarna är att utföra datasynkroniseringen själv. Många scenarier kan leda till dataförlust eller korruption. Konflikthantering är i synnerhet en av de mest utmanande aspekterna av datasynkronisering. Ju mer komplexa datamodellen är, desto mer sofistikerade konfliktalgoritmen måste vara att hantera alla kantfall.
Istället för att skapa en separat iCloud-ram har Apple förbättrat vissa av sina befintliga ramar med iCloud API. NSFileManager
är ett bra exempel på en klass som har fått betydande API-stöd för iCloud-integration.
En av de mer framträdande fördelarna med iCloud är dess sömlösa integration med iOS. Varje iOS-enhet har en iCloud-demon som körs i bakgrunden. Den här demonen övervakar ändringar i iCloud även om din applikation inte körs.
En annan iCloud-optimering är synkronisering mellan peer-to-peer. Precis som Dropbox, kommer iCloud att synkronisera ändringar över det lokala nätverket om det upptäcker att en enhet med samma iCloud-konto ligger på samma lokala nätverk.
Sist men inte minst är iCloud designad av ett företag med många års erfarenhet av att leverera och hantera data i molnet. Den lätthet med vilka utvecklare kan anta iCloud i sina applikationer visar att Apple har implementerat en pålitlig lösning som kommer att gynna tusentals utvecklare. För de allra flesta applikationer är det inte längre värt att utveckla en anpassad datasynkroniseringslösning.
Om du funderar på att anta iCloud i din ansökan föreslår jag att du tar dig tid att få en bra förståelse för iClouds inre arbete och vara medveten om dess begränsningar. ICloud-aktiverade program har en iCloud-sandlåda, som sandboxen som en applikation har på iOS. Sandboxing har ett antal tydliga säkerhetsfördelar. Säkerheten kommer dock till en kostnad. Nackdelen med iCloud-sandlådan är att det är besvärligt att få tillgång till programmets data från andra installerade applikationer.
Utvecklare som är ny på iCloud kanske tror att det är en svart låda med Apple som bestämmer vad som händer med dina data och hur det hanteras. Detta är dock inte sant. När ett dokument ändras på enhet A, skiftas ändringarna till iCloud. iCloud meddelar då ytterligare enheter, säger enheter B och C, av dessa ändringar. Det är upp till din ansökan att bestämma hur det kommer att reagera när förändringar görs. Detsamma gäller för konfliktlösning. Som jag nämnde tidigare är konflikthantering en av de mest utmanande aspekterna av datasynkronisering. iCloud meddelar dig när förändringar har skett och om konflikter har uppstått. Det är upp till dig att genomföra en konflikthalgoritm för att hantera eventuella konflikter som kan uppstå.
Det är också värt att nämna att Core Data är nära integrerad med iCloud. Sedan introduktionen på Mac-plattformen för många år sedan har Core Data blivit en oerhört kraftfull ram. Dess integration med iCloud gör det ännu mer tilltalande. Konflikthantering, till exempel hanteras graciöst av Core Data tack vare dess snäva integration med iCloud.
Det finns två sätt att använda iCloud Storage i en applikation, (1) iCloud Key Value Storage och (2) iCloud Document Storage. Båda är riktade till specifika användningsfall.
ICloud Key Value Storage delar många likheter med NSUserDefaults och det fungerar på ett liknande sätt. Med ICloud Key-Value Storage kan din ansökan lagra nyckelvärdespar, precis som du kan med NSUserDefaults eller ett enkelt NSDictionary. Skillnaden är att dessa nyckelvärdespar finns lokalt (på enheten) och i iCloud. Vid specifika intervall synkroniseras de lokala nyckelvärdesparen med iCloud.
Att hålla användarinställningar synkroniserade över enheter är ett möjligt användningsfall för iCloud Key Value Storage. Den passar perfekt för applikationer som hanterar en begränsad mängd data. Med andra ord, applikationer som inte är data tunga och endast lagrar små mängder information passar bäst för Key Value Storage.
ICloud Key Value Storage har ett antal begränsningar. Den första begränsningen är att endast egenskapslista datatyper (NSString, NSNumber, NSDate, NSData, etc.) kan lagras. Anpassade modellobjekt måste serieiseras innan de kan lagras med hjälp av iCloud Key Value Storage.
En andra begränsning är relaterad till den mängd diskutrymme som tilldelas Key Value Storage. Varje applikation kan lagra 1MB eller 1 024 nyckelvärdespar. Som jag nämnde tidigare är Key-Value Storage inte ett alternativ för datintensiva applikationer.
Den stora fördelen med Key-Value Storage är användarvänlighet. Det är extremt enkelt att ställa in och använda i din ansökan, vilket kräver en mycket begränsad utvecklingstid.
Som namnet antyder riktar denna typ av lagring till dokumentbaserade applikationer. iCloud Document Storage kan användas för att lagra filer och kan också hantera paket.
En av fördelarna med iCloud Document Storage-modellen är att det tillgängliga utrymmet för din ansökan begränsas endast av användarens iCloud-konto.
Dessa två typer av iCloud Storage är mycket olika, och det borde inte vara svårt att bestämma vilken typ som passar bäst för din applikation.
Konfigurera en applikation för användning med iCloud är enkel och kräver bara två steg. I den andra delen av denna serie kommer jag att prata mer om installationsprocessen närmare genom att gå igenom processen steg för steg. I denna artikel kommer jag att ge en kort beskrivning av varje steg.
En applikation är inte som standard konfigurerad för att använda iCloud. För att aktivera iCloud loggar du in på provisioneringsportalen med ditt utvecklarkonto och aktiverar iCloud för din ansökan i app ID-portalen. Det är allt du behöver göra för att tillhandahålla iCloud för användning i din ansökan.
Nästa steg är att skapa rättigheterna för din ansökan. Varje ansökan som vill använda iCloud måste undertecknas med iCloud-specifika rättigheter. Rättigheterna definierar vilka ansökningar som har tillgång till din ansökans data och dessa rättigheter ger därför ett säkerhetslager för användarens data.
Om du är förvirrad av några av de iCloud-koncept som jag diskuterade, kanske du vill hålla koll på nästa del av denna Tuts + Premium-serie. Nästa gång kommer jag att gå igenom processen med att installera en iCloud-aktiverad applikation, och vi kommer att bygga en applikation som antar iCloud Key Value Storage för att hålla användarens data synkroniserad över flera enheter. Håll dig igång!