iCloud Drive je cloudové úložiště souborů od Apple, vestavěné do iOS, macOS a iPadOS pro synchronizaci dokumentů mezi zařízeními uživatele. Podle údajů Apple, 2024, iCloud Drive používá CloudKit jako backend pro ukládání souborů a automatickou synchronizaci: změny provedené na iPhonu se okamžitě projeví na Macu a iPadu bez akce uživatele. Vývojáři mohou integrovat iCloud Drive do aplikací prostřednictvím NSDocumentPickerViewController a Ubiquity API.
Hlavní
iCloud Drive je cloudová souborová služba Apple, která poskytuje jednotné úložiště dokumentů pro všechna zařízení uživatele autorizovaná pod stejným Apple ID. Služba byla spuštěna v roce 2014 spolu s iOS 8 a OS X Yosemite jako náhrada za iCloud Documents.
iCloud Drive se liší od jiných cloudových úložišť (Google Drive, Dropbox) hlubokou integrací s operačním systémem: soubory se zobrazují přímo ve Finderu na macOS a v aplikaci Soubory na iOS, bez nutnosti instalovat další aplikaci. Systém automaticky synchronizuje obsah na pozadí a přepíná mezi Wi-Fi a mobilní sítí.
Podle údajů Apple Platform Overview, 2024, iCloud Drive podporuje verzování souborů až 30 dní, sdílení složek přes iCloud Sharing a integraci se systémovým vyhledáváním Spotlight. Vývojáři získávají přístup k úložišti přes API NSFileCoordinator a Ubiquity containers.
Ubiquity — termín Apple označující schopnost dat „být všude” (z anglického ubiquitous). V kontextu iCloud Drive se jedná o mechanismus, který umožňuje souborům automaticky se synchronizovat mezi všemi zařízeními uživatele prostřednictvím cloudového backendu CloudKit.
| Komponenta | Popis | Role |
|---|---|---|
| Ubiquity container | Speciální adresář aplikace | Ukládá soubory k synchronizaci |
| CloudKit | Backendová služba Apple | Zajišťuje ukládání a synchronizaci |
| NSMetadataQuery | Systémový dotaz | Sleduje stav Ubiquity souborů |
| NSFileVersion | Správa verzí | Řeší konflikty změn |
Ubiquity container je adresář uvnitř Sandboxu aplikace označený pro synchronizaci. Soubory umístěné do tohoto adresáře jsou automaticky nahrávány do iCloud Drive a distribuovány na další zařízení. Přístup ke kontejneru se konfiguruje přes Capabilities v Xcode.
Systém sleduje stav každého souboru prostřednictvím NSMetadataQuery: soubor může být lokální (stažený do zařízení), vzdálený (pouze v cloudu) nebo stahovaný. Vývojář může programově požádat o stažení souboru nebo zkontrolovat jeho dostupnost před otevřením.
Integrace iCloud Drive začíná přidáním capability iCloud v Xcode a zapnutím služby iCloud Documents. Poté aplikace získá přístup k Ubiquity container — speciálnímu adresáři, jehož cestu vrací 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 poskytuje systémové UI pro výběr a import souborů z iCloud Drive. Uživatel vidí standardní prohlížeč souborů s podporou vyhledávání, řazení a vícenásobného výběru. Po výběru souboru aplikace obdrží jeho URL a může s ním pracovat přes NSFileCoordinator.
Důležité pravidlo: při práci se soubory iCloud Drive je nutné používat NSFileCoordinator pro čtení a zápis. To zaručuje, že soubor nebude změněn jiným procesem (např. synchronizací) během operace. Zanedbání koordinace může vést k poškození dat.
Konflikty verzí vznikají, když je soubor změněn na dvou zařízeních současně před dokončením synchronizace. iOS automaticky detekuje takové situace přes NSFileVersion a vytváří konfliktní verze, které musí uživatel nebo aplikace vyřešit.
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 uchovává historii změn souboru až 30 dní. Každá verze obsahuje URL, datum vytvoření a identifikátor zařízení, které verzi vytvořilo. Systém automaticky označuje verze jako konfliktní, když dvě zařízení odesílají změny se stejným základním identifikátorem.
Strategie řešení: aplikace může automaticky sloučit změny (pro podporované formáty), zobrazit uživateli výběr verze nebo použít strategii „poslední píšící” (last-writer-wins). Apple doporučuje pro textová a strukturovaná data automatické slučování a pro binární formáty — zobrazení konfliktních verzí uživateli.
Bezplatné úložiště iCloud činí 5 GB, rozdělených mezi všechny služby uživatele: zálohy, fotografie, pošta a iCloud Drive. Placené tarify začínají na 50 GB a dosahují až 12 TB. Pro aplikace s intenzivní výměnou souborů je kritické zohlednit tyto limity.
Optimalizace úložiště: iOS poskytuje mechanismus uvolňování souborů (eviction) — když dojde místní místo, systém může odstranit kešované kopie souborů iCloud Drive a ponechat pouze metadata. Při pokusu o otevření takového souboru systém automaticky stáhne soubor z cloudu. Vývojář může tento proces řídit přes NSFileCoordinator a kontrolovat stav souboru přes NSMetadataUbiquitousItemDownloadingStatusKey.
Podle údajů WWDC 2022 Apple doporučuje následující postupy pro optimalizaci iCloud Drive: v Ubiquity container uchovávejte pouze uživatelské dokumenty, ne keš aplikace; používejte asynchronní stahování s indikátorem průběhu; poskytněte uživateli informaci o velikosti souborů před stažením; implementujte podporu obnovení pro velké soubory.
Klíčový detail: odstranění souboru z Ubiquity container vede k jeho odstranění ze všech zařízení uživatele. Pro dočasné soubory používejte místní adresář Documents, ne Ubiquity container. Také mějte na paměti, že synchronizace není okamžitá — zpoždění může být od několika sekund do minut v závislosti na velikosti souboru a síti.
Často kladené otázky
iCloud Drive je cloudové úložiště souborů Apple, které synchronizuje dokumenty mezi iPhone, iPad, Mac a PC. Je integrováno do Finderu a aplikace Soubory, což umožňuje práci s dokumenty bez dalších aplikací.
Synchronizace funguje přes CloudKit: soubory z Ubiquity container aplikace se automaticky nahrávají do cloudu a distribuují na další zařízení uživatele. Systém používá NSMetadataQuery pro sledování stavu a NSFileCoordinator pro bezpečný přístup.
Přidejte iCloud capability v Xcode, zapněte službu iCloud Documents a použijte FileManager.url(forUbiquityContainer:) pro získání cesty k synchronizovanému adresáři. Pro výběr souborů použijte NSDocumentPickerViewController.
iOS vytváří konfliktní verze přes NSFileVersion. Vývojář může automaticky sloučit změny nebo zobrazit uživateli výběr. Systém uchovává verze až 30 dní a automaticky označuje konflikty při současných změnách z různých zařízení.
Zdarma je poskytováno 5 GB pro všechny iCloud služby. Placené tarify: 50 GB, 200 GB, 2 TB, 6 TB a 12 TB. Pro velké soubory implementujte podporu obnovení a před zápisem zkontrolujte dostupné místo.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také