iCloud Drive è l'archiviazione di file cloud di Apple integrata in iOS, macOS e iPadOS per sincronizzare i documenti tra i dispositivi dell'utente. Secondo Apple, 2024, iCloud Drive utilizza CloudKit come backend per l'archiviazione dei file e la sincronizzazione automatica: le modifiche apportate su iPhone vengono immediatamente riflesse su Mac e iPad senza alcuna azione da parte dell'utente. Gli sviluppatori possono integrare iCloud Drive nelle applicazioni tramite NSDocumentPickerViewController e l'API Ubiquity.
Punti chiave
iCloud Drive è il servizio di file cloud di Apple che fornisce un archivio unificato di documenti per tutti i dispositivi dell'utente autorizzati con lo stesso Apple ID. Il servizio è stato lanciato nel 2014 insieme a iOS 8 e OS X Yosemite come sostituto di iCloud Documents.
iCloud Drive si differenzia da altri servizi di archiviazione cloud (Google Drive, Dropbox) per la sua profonda integrazione con il sistema operativo: i file appaiono direttamente in Finder su macOS e nell'app File su iOS, senza bisogno di installare un'app aggiuntiva. Il sistema sincronizza automaticamente il contenuto in background, alternando tra reti Wi-Fi e cellulari.
Secondo Apple Platform Overview, 2024, iCloud Drive supporta il versionamento dei file fino a 30 giorni, la condivisione di cartelle tramite iCloud Sharing e l'integrazione con la ricerca di sistema Spotlight. Gli sviluppatori accedono all'archiviazione tramite l'API NSFileCoordinator e i contenitori Ubiquity.
Ubiquity è un termine Apple che indica la capacità dei dati di essere “presenti ovunque.” Nel contesto di iCloud Drive, questo è un meccanismo che consente ai file di essere automaticamente sincronizzati su tutti i dispositivi dell'utente tramite il backend cloud CloudKit.
| Componente | Descrizione | Ruolo |
|---|---|---|
| Contenitore Ubiquity | Directory speciale dell'app | Archivia file per la sincronizzazione |
| CloudKit | Servizio backend Apple | Fornisce archiviazione e sincronizzazione |
| NSMetadataQuery | Query di sistema | Tiene traccia dello stato dei file Ubiquity |
| NSFileVersion | Gestione delle versioni | Risolve i conflitti di modifica |
Il contenitore Ubiquity è una directory all'interno del Sandbox dell'app contrassegnata per la sincronizzazione. I file inseriti in questa directory vengono automaticamente caricati su iCloud Drive e distribuiti ad altri dispositivi. L'accesso al contenitore viene configurato tramite Capabilities in Xcode.
Il sistema tiene traccia dello stato di ciascun file tramite NSMetadataQuery: un file può essere locale (scaricato sul dispositivo), remoto (solo nel cloud) o in fase di download. Lo sviluppatore può richiedere programmaticamente il download di un file o verificarne la disponibilità prima di aprirlo.
L'integrazione di iCloud Drive inizia aggiungendo la capacità iCloud in Xcode e abilitando il servizio iCloud Documents. Successivamente, l'app ottiene l'accesso al contenitore Ubiquity, una directory speciale il cui percorso viene restituito tramite FileManager.
import UIKit
class DocumentManager {
func ubiquityURL() -> URL? {
return FileManager.default
.url(forUbiquityContainer: nil)
}
func saveToICloud(data: Data, filename: String) {
guard let containerURL = ubiquityURL() else { return }
let fileURL = containerURL
.appendingPathComponent(filename)
do {
try data.write(to: fileURL)
Logger.storage.info(
"Saved \(filename) to iCloud Drive"
)
} catch {
Logger.storage.error(
"Save failed: \(error.localizedDescription)"
)
}
}
func listICloudFiles() {
let query = NSMetadataQuery()
query.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope]
query.start()
}
}
NSDocumentPickerViewController fornisce un'interfaccia utente di sistema per selezionare e importare file da iCloud Drive. L'utente vede un browser di file standard con supporto per ricerca, ordinamento e selezione multipla. Dopo la selezione del file, l'app riceve il suo URL e può lavorarci tramite NSFileCoordinator.
Regola importante: quando si lavora con file iCloud Drive, è necessario utilizzare NSFileCoordinator per la lettura e la scrittura. Ciò garantisce che il file non venga modificato da un altro processo (ad esempio, la sincronizzazione) durante l'operazione. Trascurare il coordinamento può portare al danneggiamento dei dati.
Conflitti di versione si verificano quando un file viene modificato su due dispositivi contemporaneamente prima del completamento della sincronizzazione. iOS rileva automaticamente tali situazioni tramite NSFileVersion e crea versioni in conflitto che l'utente o l'app devono risolvere.
func resolveConflicts(for fileURL: URL) {
let conflictVersions = NSFileVersion
.unresolvedConflictVersionsOfItem(at: fileURL) ?? []
for version in conflictVersions {
do {
let conflictData = try Data(contentsOf: version.url)
let resolved = mergeData(
original: try Data(contentsOf: fileURL),
conflict: conflictData
)
try resolved.write(to: fileURL)
version.remove()
} catch {
Logger.sync.error(
"Conflict resolution failed: \(error)"
)
}
}
}
NSFileVersion memorizza la cronologia delle modifiche del file fino a 30 giorni. Ogni versione contiene un URL, la data di creazione e l'identificatore del dispositivo che ha creato la versione. Il sistema contrassegna automaticamente le versioni come in conflitto quando due dispositivi inviano modifiche con lo stesso identificatore di base.
Strategie di risoluzione: l'app può unire automaticamente le modifiche (per i formati supportati), mostrare all'utente una scelta di versione o utilizzare una strategia “ultimo scrittore” (last-writer-wins). Apple raccomanda l'unione automatica per dati testuali e strutturati, e la visualizzazione delle versioni in conflitto per i formati binari.
L'archiviazione gratuita di iCloud è di 5 GB, distribuita tra tutti i servizi dell'utente: backup, foto, posta e iCloud Drive. I piani a pagamento partono da 50 GB e arrivano fino a 12 TB. Per le applicazioni con scambio intensivo di file, è fondamentale tenere conto di questi limiti.
Ottimizzazione dell'archiviazione: iOS fornisce un meccanismo di espulsione dei file—quando lo spazio locale si esaurisce, il sistema può rimuovere le copie cache dei file iCloud Drive, lasciando solo i metadati. Quando si tenta di aprire tale file, il sistema lo scarica automaticamente dal cloud. Lo sviluppatore può controllare questo processo tramite NSFileCoordinator e verificare lo stato del file tramite NSMetadataUbiquitousItemDownloadingStatusKey.
Secondo WWDC 2022, Apple raccomanda le seguenti pratiche per ottimizzare iCloud Drive: archiviare solo i documenti dell'utente nel contenitore Ubiquity, non la cache dell'app; utilizzare il download asincrono con indicazione di progresso; fornire all'utente informazioni sulla dimensione del file prima del download; implementare il supporto per la ripresa di file di grandi dimensioni.
Sfumatura importante: l'eliminazione di un file dal contenitore Ubiquity lo rimuove da tutti i dispositivi dell'utente. Per i file temporanei, utilizzare la directory locale Documents anziché il contenitore Ubiquity. Si noti inoltre che la sincronizzazione non è istantanea—il ritardo può variare da pochi secondi a minuti a seconda della dimensione del file e della rete.
Domande frequenti
iCloud Drive è l'archiviazione di file cloud di Apple che sincronizza i documenti tra iPhone, iPad, Mac e PC. È integrato in Finder e nell'app File, consentendo di lavorare con i documenti senza applicazioni aggiuntive.
La sincronizzazione funziona tramite CloudKit: i file dal contenitore Ubiquity dell'app vengono automaticamente caricati sul cloud e distribuiti agli altri dispositivi dell'utente. Il sistema utilizza NSMetadataQuery per il tracciamento e NSFileCoordinator per l'accesso sicuro.
Aggiungere la capacità iCloud in Xcode, abilitare il servizio iCloud Documents e utilizzare FileManager.url(forUbiquityContainer:) per ottenere il percorso della directory sincronizzata. Utilizzare NSDocumentPickerViewController per la selezione dei file.
iOS crea versioni in conflitto tramite NSFileVersion. Lo sviluppatore può unire automaticamente le modifiche o mostrare all'utente una scelta. Il sistema memorizza le versioni fino a 30 giorni e contrassegna automaticamente i conflitti quando si verificano modifiche simultanee da dispositivi diversi.
L'archiviazione gratuita è di 5 GB su tutti i servizi iCloud. Piani a pagamento: 50 GB, 200 GB, 2 TB, 6 TB e 12 TB. Per file di grandi dimensioni, implementare il supporto per la ripresa e verificare lo spazio disponibile prima della scrittura.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche