Mantenere sincronizzati i dati delle applicazioni tra i dispositivi è un compito complesso e scoraggiante. Fortunatamente, questo è esattamente il motivo per cui Apple ha creato iCloud. In questa serie di Tuts + Premium, imparerai come funziona iCloud e come le tue applicazioni possono condividere i dati in modo trasparente su più dispositivi.
Una delle funzionalità più pubblicizzate di iOS 5 è stata iCloud. Anche se iCloud condivide una serie di somiglianze con il servizio MobileMe di Apple, iCloud è molto più di quanto lo sia MobileMe. Come molte altre aziende, Apple ha capito che il cloud è una componente indispensabile dello spazio mobile. Alcuni scettici considerano iCloud come il secondo tentativo di Apple di creare un servizio di sincronizzazione, ma iCloud è un'impresa più ambiziosa con un enorme potenziale.
Questo è il primo articolo di una serie su iCloud Storage. Prima di immergerti in iCloud Storage, vorrei dedicare un minuto a dare una rapida panoramica di cosa puoi aspettarti da questa serie.
Questo tutorial non contiene esempi di codice. Il mio obiettivo per questo tutorial è quello di familiarizzare con iCloud a livello concettuale e di dimostrare come iCloud può aiutarti come sviluppatore.
Nella seconda parte di questa serie, ti mostrerò come abilitare iCloud Storage per un'applicazione. Creeremo anche la nostra prima applicazione abilitata per iCloud utilizzando iCloud Key-Value Storage.
Le ultime due puntate si concentreranno su iCloud Document Storage. La terza parte si concentrerà sulla nuova classe UIDocument e discuterà su come usarla può semplificarti la vita. La quarta parte si concentrerà su UIManagedDocument, una sottoclasse concreta di UIDocument integrata con Core Data. Grazie alla stretta integrazione di Core Data e iCloud, vedrai che la tua applicazione può trarre enormi benefici dall'adozione di Core Data e iCloud nelle tue applicazioni!
Per il consumatore, iCloud è un servizio gratuito che memorizza i dati dell'utente nel cloud, con dati come musica, foto, e-mail, calendari, contatti, ecc. I dati memorizzati su iCloud sono disponibili per qualsiasi dispositivo configurato con l'account iCloud dell'utente (ad es. Macbook, iPhone, iPad). Mentre MobileMe ha sempre avuto un prezzo abbastanza alto, Apple ha reso iCloud gratuito fin dall'inizio. C'è una ragione per cui Apple ha preso questa decisione. Perché iCloud sia un successo, è vitale che venga utilizzato da quante più persone possibile. Apple ha grandi progetti per iCloud e con il passare del tempo dovrebbe diventare un componente ancora più importante dei sistemi operativi iOS e OS X.
Il componente più utile per gli sviluppatori è quello che Apple definisce Storage iCloud. Questa è la parte di iCloud progettata per i dati dell'applicazione.
Insieme a iCloud, Apple ha introdotto una raccolta di API che consente agli sviluppatori di adottare lo storage iCloud nelle proprie applicazioni. Apple sottolinea che le proprie applicazioni, come la suite di applicazioni iWork, utilizzano le stesse API per interfacciarsi con iCloud. L'API iCloud è semplice, facile da usare e sorprendentemente flessibile. È chiaro che Apple ha investito molto pensiero, sforzo e risorse nella creazione di iCloud per quanto riguarda l'integrazione di terze parti.
Mantenere sincronizzati i dati delle applicazioni su tutti i dispositivi non è un'impresa facile (basta chiedere ad Apple, Dropbox o Google!). Non solo richiede un'infrastruttura back-end affidabile, ma una delle sfide più impegnative è l'esecuzione della sincronizzazione dei dati stessa. Numerosi scenari possono portare alla perdita o alla corruzione dei dati. La gestione dei conflitti, in particolare, è uno degli aspetti più impegnativi della sincronizzazione dei dati. Più complesso è il modello di dati, più sofisticato deve essere l'algoritmo di conflitto per gestire tutti i casi limite.
Invece di creare un framework iCloud separato, Apple ha migliorato alcuni dei suoi framework esistenti con le API iCloud. NSFileManager
è un ottimo esempio di una classe che ha ottenuto un supporto API significativo per l'integrazione con iCloud.
Uno dei vantaggi più importanti di iCloud è la sua perfetta integrazione con iOS. Ogni dispositivo iOS ha un demone iCloud in esecuzione in background. Questo daemon controlla le modifiche in iCloud anche se l'applicazione non è in esecuzione.
Un'altra ottimizzazione di iCloud è la sincronizzazione peer-to-peer. Proprio come Dropbox, iCloud sincronizzerà le modifiche sulla rete locale se rileva che un dispositivo con lo stesso account iCloud si trova sulla stessa rete locale.
Ultimo, ma non meno importante, iCloud è stato progettato da un'azienda con molti anni di esperienza nella fornitura e gestione dei dati nel cloud. La facilità con cui gli sviluppatori possono adottare iCloud nelle loro applicazioni dimostra che Apple ha implementato una soluzione affidabile a beneficio di migliaia di sviluppatori. Per la maggior parte delle applicazioni, non sarà più utile sviluppare una soluzione di sincronizzazione dei dati personalizzata.
Se stai pensando di adottare iCloud nella tua applicazione, ti suggerisco di dedicare del tempo ad acquisire una buona comprensione del funzionamento interno di iCloud e di essere consapevole dei suoi limiti. Le applicazioni abilitate iCloud hanno una sandbox iCloud simile alla sandbox di un'applicazione su iOS. Il sandboxing ha una serie di chiari vantaggi per la sicurezza. Tuttavia, la sicurezza ha un costo. Lo svantaggio della sandbox iCloud è che l'accesso ai dati delle applicazioni da altre applicazioni installate è macchinoso.
Gli sviluppatori nuovi di iCloud potrebbero pensare che sia una scatola nera con Apple che decide cosa succede ai tuoi dati e come viene gestito. Questo non è vero, comunque. Ogni volta che un documento cambia sul dispositivo A, le modifiche vengono trasferite su iCloud. iCloud notifica quindi qualsiasi dispositivo aggiuntivo, ad esempio i dispositivi B e C, di queste modifiche. Spetta alla tua applicazione decidere come reagirà quando vengono apportate modifiche. Lo stesso vale per la risoluzione dei conflitti. Come accennato in precedenza, la gestione dei conflitti è uno degli aspetti più impegnativi della sincronizzazione dei dati. iCloud ti informerà quando sono avvenute modifiche e se sono sorti conflitti. Spetta a te implementare un algoritmo di conflitto per gestire eventuali conflitti che potrebbero sorgere.
Vale anche la pena ricordare che i Core Data sono strettamente integrati con iCloud. Dalla sua introduzione sulla piattaforma Mac molti anni fa, Core Data è diventato un framework incredibilmente potente. La sua integrazione con iCloud lo rende ancora più accattivante. La gestione dei conflitti, ad esempio, è gestita con garbo da Core Data grazie alla sua stretta integrazione con iCloud.
Esistono due modi per utilizzare iCloud Storage in un'applicazione, (1) iCloud Key-Value Storage e (2) iCloud Document Storage. Entrambi sono mirati a casi d'uso specifici.
Lo Storage con valori-chiave di iCloud condivide molte somiglianze con NSUserDefaults e funziona in modo simile. Con iCloud Key-Value Storage, l'applicazione può memorizzare coppie chiave-valore, proprio come è possibile con NSUserDefaults o un semplice NSDictionary. La differenza è che queste coppie chiave-valore esistono localmente (sul dispositivo) e in iCloud. A intervalli specifici, le coppie di valori-chiave locali sono sincronizzate con iCloud.
Mantenere le impostazioni utente sincronizzate su tutti i dispositivi è un possibile caso d'uso di iCloud Key-Value Storage. È perfettamente adatto per applicazioni che gestiscono una quantità limitata di dati. In altre parole, le applicazioni che non sono pesanti in termini di dati e che memorizzano solo piccole quantità di informazioni sono più adatte all'archiviazione a valore chiave.
Lo Storage con valori-chiave di iCloud presenta una serie di limitazioni. La prima limitazione è che possono essere memorizzati solo i tipi di dati dell'elenco di proprietà (NSString, NSNumber, NSDate, NSData, ecc.). Gli oggetti del modello personalizzato devono essere serializzati prima di poter essere archiviati usando iCloud Key-Value Storage.
Una seconda limitazione è correlata alla quantità di spazio su disco allocata all'archivio valori-chiave. Ogni applicazione può memorizzare 1 MB o 1.024 coppie chiave-valore. Come accennato in precedenza, lo Storage con valori-chiave non è un'opzione per le applicazioni ad alta intensità di dati.
Il principale vantaggio di Key-Value Storage è la facilità d'uso. È estremamente facile da configurare e utilizzare nell'applicazione, richiedendo un tempo di sviluppo molto limitato.
Come suggerisce il nome, questo tipo di archiviazione è destinato a applicazioni basate su documenti. iCloud Document Storage può essere utilizzato per archiviare i file e può anche gestire i pacchetti.
Uno dei vantaggi del modello iCloud Document Storage è che lo spazio disponibile per la tua applicazione è limitato solo dalla capacità dell'account iCloud dell'utente.
Questi due tipi di archiviazione iCloud sono molto diversi e non dovrebbe essere difficile decidere quale tipo sia il più appropriato per la tua applicazione.
La configurazione di un'applicazione da utilizzare con iCloud è semplice e richiede solo due passaggi. Nella seconda parte di questa serie, parlerò del processo di installazione in modo più dettagliato guidandovi passo per passo nel processo. In questo articolo, fornirò una breve descrizione di ogni passaggio.
Per impostazione predefinita, un'applicazione non è configurata per l'utilizzo di iCloud. Per abilitare iCloud, accedi al portale di provisioning con il tuo account sviluppatore e abilita iCloud per la tua applicazione nel portale App IDs. Questo è tutto ciò che devi fare per eseguire il provisioning di iCloud nell'applicazione.
Il passo successivo è la creazione delle autorizzazioni corrette per la tua applicazione. Ogni applicazione che vuole utilizzare iCloud deve essere firmata con diritti specifici di iCloud. Le autorizzazioni definiscono quali applicazioni hanno accesso ai dati della tua applicazione e queste autorizzazioni forniscono quindi un livello di sicurezza per i dati dell'utente.
Se sei confuso da alcuni dei concetti di iCloud che ho discusso, potresti voler tenere d'occhio la prossima puntata di questa serie di Tuts + Premium. La prossima volta ti illustrerò il processo di configurazione di un'applicazione abilitata per iCloud e creeremo un'applicazione che adotta iCaloud Key-Value Storage per mantenere sincronizzati i dati dell'utente su più dispositivi. Rimanete sintonizzati!