iCloud Drive е облачно файлово хранилище на Apple, вградено в iOS, macOS и iPadOS за синхронизиране на документи между устройствата на потребителя. Според данни на Apple, 2024, iCloud Drive използва CloudKit като backend за съхранение на файлове и автоматична синхронизация: промените, направени на iPhone, незабавно се отразяват на Mac и iPad без действия от страна на потребителя. Разработчиците могат да интегрират iCloud Drive в приложения чрез NSDocumentPickerViewController и Ubiquity API.
Основни
iCloud Drive е облачна файлова услуга на Apple, която предоставя унифицирано съхранение на документи за всички устройства на потребителя, упълномощени с един и същ Apple ID. Услугата стартира през 2014 г. заедно с iOS 8 и OS X Yosemite като замяна на iCloud Documents.
iCloud Drive се различава от други облачни хранилища (Google Drive, Dropbox) с дълбока интеграция с операционната система: файловете се показват директно във Finder на macOS и в приложението Файлове на iOS, без да е необходимо инсталиране на допълнително приложение. Системата автоматично синхронизира съдържанието на заден план, превключвайки между Wi-Fi и клетъчна мрежа.
Според Apple Platform Overview, 2024, iCloud Drive поддържа версиониране на файлове до 30 дни, споделяне на папки чрез iCloud Sharing и интеграция със системното търсене Spotlight. Разработчиците получават достъп до хранилището чрез API NSFileCoordinator и Ubiquity containers.
Ubiquity — термин на Apple, обозначаващ способността на данните да „бъдат навсякъде” (от английски ubiquitous). В контекста на iCloud Drive това е механизъм, който позволява на файловете автоматично да се синхронизират между всички устройства на потребителя чрез облачния backend CloudKit.
| Компонент | Описание | Роля |
|---|---|---|
| Ubiquity container | Специална директория на приложението | Съхранява файлове за синхронизация |
| CloudKit | Backend услуга на Apple | Осигурява съхранение и синхронизация |
| NSMetadataQuery | Системна заявка | Проследява състоянието на Ubiquity файлове |
| NSFileVersion | Управление на версии | Разрешава конфликти на промени |
Ubiquity container е директория вътре в Sandbox на приложението, маркирана за синхронизация. Файловете, поставени в тази директория, автоматично се качват в iCloud Drive и се разпространяват до други устройства. Достъпът до контейнера се конфигурира чрез Capabilities в Xcode.
Системата проследява състоянието на всеки файл чрез NSMetadataQuery: файлът може да бъде локален (изтеглен на устройството), отдалечен (само в облака) или в процес на изтегляне. Разработчикът може програмно да поиска изтегляне на файл или да провери неговата наличност преди отваряне.
Интеграцията на iCloud Drive започва с добавяне на capability iCloud в Xcode и активиране на услугата iCloud Documents. След това приложението получава достъп до Ubiquity container — специална директория, чийто път се връща чрез 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 предоставя системен UI за избор и импорт на файлове от iCloud Drive. Потребителят вижда стандартен файлов браузър с поддръжка на търсене, сортиране и множествен избор. След избор на файл, приложението получава неговия URL и може да работи с него чрез NSFileCoordinator.
Важно правило: при работа с iCloud Drive файлове трябва да се използва NSFileCoordinator за четене и писане. Това гарантира, че файлът няма да бъде променен от друг процес (напр. синхронизация) по време на операцията. Пренебрегването на координацията може да доведе до повреда на данни.
Конфликти на версии възникват, когато файл се променя на две устройства едновременно преди завършване на синхронизацията. iOS автоматично открива такива ситуации чрез NSFileVersion и създава конфликтни версии, които потребителят или приложението трябва да разрешат.
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 съхранява историята на промените на файла до 30 дни. Всяка версия съдържа URL, дата на създаване и идентификатор на устройството, създало версията. Системата автоматично маркира версиите като конфликтни, когато две устройства изпращат промени с един и същ базов идентификатор.
Стратегии за разрешаване: приложението може автоматично да слива промените (за поддържани формати), да показва на потребителя избор на версия или да използва стратегията „последният пишещ” (last-writer-wins). Apple препоръчва за текстови и структурирани данни автоматично сливане, а за двоични формати — показване на конфликтните версии на потребителя.
Безплатно хранилище iCloud е 5 GB, разпределени между всички услуги на потребителя: резервни копия, снимки, поща и iCloud Drive. Платените тарифи започват от 50 GB и достигат до 12 TB. За приложения с интензивен файлов обмен е критично да се вземат предвид тези лимити.
Оптимизация на хранилището: iOS предоставя механизъм за освобождаване на файлове (eviction) — когато локалното място свърши, системата може да премахне кеширани копия на iCloud Drive файлове, оставяйки само метаданни. При опит за отваряне на такъв файл системата автоматично го изтегля от облака. Разработчикът може да контролира този процес чрез NSFileCoordinator и да проверява състоянието на файла чрез NSMetadataUbiquitousItemDownloadingStatusKey.
Според WWDC 2022, Apple препоръчва следните практики за оптимизация на iCloud Drive: съхранявайте в Ubiquity container само потребителски документи, а не кеш на приложението; използвайте асинхронно изтегляне с индикатор за напредък; предоставяйте на потребителя информация за размера на файловете преди изтегляне; имплементирайте поддръжка за възобновяване за големи файлове.
Ключов нюанс: премахването на файл от Ubiquity container води до премахването му от всички устройства на потребителя. За временни файлове използвайте локалната директория Documents, а не Ubiquity container. Също така имайте предвид, че синхронизацията не е мигновена — забавянето може да бъде от няколко секунди до минути в зависимост от размера на файла и мрежата.
Често задавани въпроси
iCloud Drive е облачно файлово хранилище на Apple, което синхронизира документи между iPhone, iPad, Mac и PC. Интегрирано е във Finder и приложението Файлове, позволявайки работа с документи без допълнителни приложения.
Синхронизацията работи чрез CloudKit: файловете от Ubiquity container на приложението автоматично се качват в облака и се разпространяват до другите устройства на потребителя. Системата използва NSMetadataQuery за проследяване на състоянието и NSFileCoordinator за безопасен достъп.
Добавете capability iCloud в Xcode, активирайте услугата iCloud Documents и използвайте FileManager.url(forUbiquityContainer:) за получаване на пътя до синхронизираната директория. За избор на файлове използвайте NSDocumentPickerViewController.
iOS създава конфликтни версии чрез NSFileVersion. Разработчикът може автоматично да слее промените или да покаже избор на потребителя. Системата съхранява версии до 30 дни и автоматично маркира конфликти при едновременни промени от различни устройства.
Безплатно се предоставят 5 GB за всички iCloud услуги. Платени тарифи: 50 GB, 200 GB, 2 TB, 6 TB и 12 TB. За големи файлове имплементирайте поддръжка за възобновяване и проверявайте наличното място преди запис.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също