Az iCloud Drive egy Apple-felhőfájltár, amely iOS, macOS és iPadOS rendszerbe van építve a dokumentumok szinkronizálásához a felhasználó eszközei között. A Apple, 2024 adatai szerint az iCloud Drive a CloudKit-et használja backendként a fájlok tárolásához és automatikus szinkronizálásához: az iPhone-on végzett módosítások azonnal megjelennek a Mac-en és iPaden, a felhasználó beavatkozása nélkül. A fejlesztők az NSDocumentPickerViewController és az Ubiquity API segítségével integrálhatják az iCloud Drive-ot az alkalmazásokba.
Főbb tudnivalók
iCloud Drive egy Apple-felhőfájl-szolgáltatás, amely egységes dokumentumtárat biztosít a felhasználó összes, azonos Apple ID alatt hitelesített eszköze számára. A szolgáltatás 2014-ben indult az iOS 8 és OS X Yosemite társaságában az iCloud Documents helyettesítőjeként.
Az iCloud Drive abban különbözik más felhőtáraktól (Google Drive, Dropbox), hogy mélyen integrálódik az operációs rendszerbe: a fájlok közvetlenül megjelennek a Finderben macOS-en és a Fájlok alkalmazásban iOS-en, anélkül, hogy további alkalmazást kellene telepíteni. A rendszer automatikusan szinkronizálja a tartalmat a háttérben, váltva a Wi-Fi és a mobilhálózat között.
A Apple Platform Overview, 2024 szerint az iCloud Drive támogatja a fájlverziókezelést 30 napig, a mappák megosztását iCloud Sharing segítségével és a Spotlight rendszerkeresővel való integrációt. A fejlesztők az NSFileCoordinator API-n és Ubiquity container-eken keresztül férnek hozzá a tárhelyhez.
Ubiquity — az Apple kifejezése, amely az adatok „mindenhol jelen lévő” képességét jelöli (az angol ubiquitous szóból). Az iCloud Drive kontextusában ez egy olyan mechanizmus, amely lehetővé teszi a fájlok automatikus szinkronizálását a felhasználó összes eszköze között a CloudKit felhőbackend segítségével.
| Összetevő | Leírás | Szerep |
|---|---|---|
| Ubiquity container | Az alkalmazás speciális könyvtára | Tárolja a szinkronizálandó fájlokat |
| CloudKit | Apple backend szolgáltatás | Biztosítja a tárolást és szinkronizálást |
| NSMetadataQuery | Rendszer lekérdezés | Nyomon követi az Ubiquity fájlok állapotát |
| NSFileVersion | Verziókezelés | Feloldja a módosítási ütközéseket |
Ubiquity container az alkalmazás Sandbox-ján belüli, szinkronizálásra jelölt könyvtár. Az ebbe a könyvtárba helyezett fájlok automatikusan feltöltődnek az iCloud Drive-ba és elosztásra kerülnek más eszközökre. A konténerhez való hozzáférést a Capabilities segítségével konfigurálják az Xcode-ban.
A rendszer az egyes fájlok állapotát NSMetadataQuery segítségével követi nyomon: a fájl lehet helyi (az eszközre letöltött), távoli (csak a felhőben) vagy letöltés alatt álló. A fejlesztő programozottan kérheti a fájl letöltését, vagy ellenőrizheti annak elérhetőségét a megnyitás előtt.
Az iCloud Drive integrálása az iCloud capability hozzáadásával kezdődik az Xcode-ban és az iCloud Documents szolgáltatás bekapcsolásával. Ezután az alkalmazás hozzáférést kap az Ubiquity container-hez — egy speciális könyvtárhoz, amelynek elérési útját a FileManager adja vissza.
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 rendszer UI-t biztosít az iCloud Drive-ból történő fájlválasztáshoz és importáláshoz. A felhasználó egy szabványos fájlböngészőt lát keresési, rendezési és többszörös kiválasztási támogatással. A fájl kiválasztása után az alkalmazás megkapja annak URL-jét, és az NSFileCoordinator segítségével dolgozhat vele.
Fontos szabály: az iCloud Drive fájlokkal való munka során az NSFileCoordinator-t kell használni olvasáshoz és íráshoz. Ez garantálja, hogy a fájlt a művelet során nem módosítja egy másik folyamat (pl. szinkronizálás). A koordináció elhanyagolása adatsérüléshez vezethet.
Verzióütközések akkor keletkeznek, amikor egy fájlt egyidejűleg két eszközön módosítanak a szinkronizálás befejezése előtt. Az iOS automatikusan észleli az ilyen helyzeteket az NSFileVersion segítségével, és ütköző verziókat hoz létre, amelyeket a felhasználónak vagy az alkalmazásnak kell feloldania.
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)"
)
}
}
}
Az NSFileVersion a fájl módosítási előzményeit tárolja akár 30 napig. Minden verzió tartalmazza az URL-t, a létrehozás dátumát és a verziót létrehozó eszköz azonosítóját. A rendszer automatikusan ütközőként jelöli meg a verziókat, amikor két eszköz azonos alapazonosítóval küld módosításokat.
Feloldási stratégiák: az alkalmazás automatikusan egyesítheti a módosításokat (a támogatott formátumok esetében), megjelenítheti a felhasználónak a verzióválasztást, vagy alkalmazhatja a „utolsó író” (last-writer-wins) stratégiát. Az Apple szöveges és strukturált adatokhoz az automatikus egyesítést, bináris formátumokhoz pedig az ütköző verziók felhasználónak történő megjelenítését ajánlja.
Ingyenes tárhely az iCloud-ban 5 GB, amely a felhasználó összes szolgáltatása között oszlik meg: biztonsági mentések, fényképek, e-mail és iCloud Drive. A fizetős csomagok 50 GB-tól kezdődnek és 12 TB-ig terjednek. Az intenzív fájlcserével rendelkező alkalmazások számára kritikus ezeknek a korlátoknak a figyelembevétele.
Tárhelyoptimalizálás: az iOS fájlfelszabadítási mechanizmust (eviction) biztosít — amikor a helyi tárhely elfogy, a rendszer eltávolíthatja az iCloud Drive fájlok gyorsítótárazott másolatait, csak a metaadatokat hagyva meg. Egy ilyen fájl megnyitásakor a rendszer automatikusan letölti azt a felhőből. A fejlesztő az NSFileCoordinator segítségével vezérelheti ezt a folyamatot, és az NSMetadataUbiquitousItemDownloadingStatusKey segítségével ellenőrizheti a fájl állapotát.
A WWDC 2022 szerint az Apple a következő gyakorlatokat ajánlja az iCloud Drive optimalizálásához: az Ubiquity container-ben csak felhasználói dokumentumokat tároljon, ne az alkalmazás gyorsítótárát; használjon aszinkron letöltést folyamatjelzővel; adjon tájékoztatást a felhasználónak a fájlméretről a letöltés előtt; implementálja a nagy fájlok folytatásos letöltésének támogatását.
Kulcsfontosságú árnyalat: egy fájl eltávolítása az Ubiquity container-ből annak eltávolításához vezet a felhasználó összes eszközéről. Ideiglenes fájlokhoz használja a helyi Documents könyvtárat, ne az Ubiquity container-t. Vegye figyelembe azt is, hogy a szinkronizálás nem azonnali — a késés néhány másodperctől percekig terjedhet a fájlmérettől és a hálózattól függően.
Gyakran ismételt kérdések
iCloud Drive az Apple felhőfájltára, amely szinkronizálja a dokumentumokat iPhone, iPad, Mac és PC között. Integrálva van a Finderbe és a Fájlok alkalmazásba, lehetővé téve a dokumentumokkal való munkát további alkalmazások nélkül.
A szinkronizálás a CloudKit-en keresztül működik: az alkalmazás Ubiquity container-éből származó fájlok automatikusan feltöltődnek a felhőbe és elosztásra kerülnek a felhasználó más eszközeire. A rendszer az NSMetadataQuery-t használja az állapot követésére és az NSFileCoordinator-t a biztonságos hozzáféréshez.
Adja hozzá az iCloud capability-t az Xcode-ban, kapcsolja be az iCloud Documents szolgáltatást, és használja a FileManager.url(forUbiquityContainer:) metódust a szinkronizált könyvtár elérési útjának lekéréséhez. Fájlok kiválasztásához használja az NSDocumentPickerViewController-t.
Az iOS ütköző verziókat hoz létre az NSFileVersion segítségével. A fejlesztő automatikusan egyesítheti a módosításokat, vagy megjelenítheti a választást a felhasználónak. A rendszer 30 napig tárolja a verziókat, és automatikusan jelöli az ütközéseket, amikor különböző eszközökről egyidejűleg történnek módosítások.
Ingyenesen 5 GB áll rendelkezésre az összes iCloud szolgáltatáshoz. Fizetős csomagok: 50 GB, 200 GB, 2 TB, 6 TB és 12 TB. Nagy fájlok esetén implementálja a folytatásos letöltés támogatását, és ellenőrizze a rendelkezésre álló helyet írás előtt.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is