iCloud Drive, kullanıcının cihazları arasında belgeleri senkronize etmek için iOS, macOS ve iPadOS'a entegre edilmiş Apple'ın bulut dosya depolama alanıdır. Apple, 2024'e göre, iCloud Drive dosyaları depolamak ve otomatik senkronizasyon için CloudKit'i arka uç olarak kullanır: iPhone'da yapılan değişiklikler, kullanıcının herhangi bir işlem yapmasına gerek kalmadan anında Mac ve iPad'e yansır. Geliştiriciler, iCloud Drive'ı NSDocumentPickerViewController ve Ubiquity API aracılığıyla uygulamalara entegre edebilir.
Önemli Noktalar
iCloud Drive, aynı Apple ID ile yetkilendirilmiş tüm kullanıcı cihazları için birleşik belge depolama sağlayan Apple'ın bulut dosya hizmetidir. Hizmet, 2014 yılında iOS 8 ve OS X Yosemite ile birlikte iCloud Documents'ın yerini almak üzere başlatılmıştır.
iCloud Drive, diğer bulut depolama hizmetlerinden (Google Drive, Dropbox) işletim sistemiyle derin entegrasyonuyla ayrılır: dosyalar, ek bir uygulama yüklemeye gerek kalmadan macOS'ta Finder'da ve iOS'ta Dosyalar uygulamasında doğrudan görünür. Sistem, Wi-Fi ve hücresel ağlar arasında geçiş yaparak arka planda içeriği otomatik olarak senkronize eder.
Apple Platform Overview, 2024'e göre, iCloud Drive 30 güne kadar dosya sürümlemeyi, iCloud Sharing aracılığıyla klasör paylaşımını ve Spotlight sistem aramasıyla entegrasyonu destekler. Geliştiriciler, NSFileCoordinator API'si ve Ubiquity kapsayıcıları aracılığıyla depolama alanına erişir.
Ubiquity, verilerin “her yerde bulunma” yeteneği anlamına gelen bir Apple terimidir. iCloud Drive bağlamında bu, dosyaların CloudKit bulut arka ucu aracılığıyla kullanıcının tüm cihazlarında otomatik olarak senkronize edilmesini sağlayan bir mekanizmadır.
| Bileşen | Açıklama | Rol |
|---|---|---|
| Ubiquity kapsayıcısı | Uygulamanın özel dizini | Senkronizasyon için dosyaları depolar |
| CloudKit | Apple arka uç hizmeti | Depolama ve senkronizasyon sağlar |
| NSMetadataQuery | Sistem sorgusu | Ubiquity dosya durumunu izler |
| NSFileVersion | Sürüm yönetimi | Değişiklik çakışmalarını çözer |
Ubiquity kapsayıcısı, senkronizasyon için işaretlenmiş uygulama Sandbox'ı içindeki bir dizindir. Bu dizine yerleştirilen dosyalar otomatik olarak iCloud Drive'a yüklenir ve diğer cihazlara dağıtılır. Kapsayıcıya erişim, Xcode'da Capabilities aracılığıyla yapılandırılır.
Sistem, her dosyanın durumunu NSMetadataQuery aracılığıyla izler: bir dosya yerel (cihaza indirilmiş), uzak (yalnızca bulutta) veya indiriliyor olabilir. Geliştirici, programlı olarak dosya indirmeyi talep edebilir veya açmadan önce kullanılabilirliğini kontrol edebilir.
iCloud Drive entegrasyonu, Xcode'da iCloud yeteneği eklenerek ve iCloud Documents hizmeti etkinleştirilerek başlar. Bundan sonra uygulama, yolu FileManager aracılığıyla döndürülen özel bir dizin olan Ubiquity kapsayıcısına erişim kazanır.
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, iCloud Drive'dan dosya seçmek ve içe aktarmak için bir sistem kullanıcı arayüzü sağlar. Kullanıcı, arama, sıralama ve çoklu seçim desteğiyle standart bir dosya tarayıcısı görür. Dosya seçiminden sonra uygulama URL'sini alır ve NSFileCoordinator aracılığıyla onunla çalışabilir.
Önemli kural: iCloud Drive dosyalarıyla çalışırken, okuma ve yazma için NSFileCoordinator kullanmalısınız. Bu, işlem sırasında dosyanın başka bir işlem (örneğin senkronizasyon) tarafından değiştirilmemesini sağlar. Koordinasyonu ihmal etmek veri bozulmasına yol açabilir.
Sürüm çakışmaları, senkronizasyon tamamlanmadan önce bir dosyanın iki cihazda aynı anda değiştirilmesi durumunda ortaya çıkar. iOS, bu tür durumları NSFileVersion aracılığıyla otomatik olarak algılar ve kullanıcı veya uygulamanın çözmesi gereken çakışan sürümler oluşturur.
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, dosya değişiklik geçmişini 30 güne kadar saklar. Her sürüm bir URL, oluşturma tarihi ve sürümü oluşturan cihazın tanımlayıcısını içerir. İki cihaz aynı temel tanımlayıcıyla değişiklik gönderdiğinde sistem, sürümleri otomatik olarak çakışan olarak işaretler.
Çözüm stratejileri: uygulama, değişiklikleri otomatik olarak birleştirebilir (desteklenen biçimler için), kullanıcıya sürüm seçeneği gösterebilir veya son yazan kazanır (last-writer-wins) stratejisini kullanabilir. Apple, metin ve yapılandırılmış veriler için otomatik birleştirmeyi, ikili biçimler için ise çakışan sürümleri kullanıcıya göstermeyi önerir.
iCloud'un ücretsiz depolama alanı 5 GB'dır ve tüm kullanıcı hizmetleri arasında dağıtılır: yedeklemeler, fotoğraflar, posta ve iCloud Drive. Ücretli planlar 50 GB'dan başlar ve 12 TB'a kadar çıkar. Yoğun dosya alışverişi olan uygulamalar için bu sınırları dikkate almak kritik öneme sahiptir.
Depolama optimizasyonu: iOS, bir dosya çıkarma mekanizması sağlar—yerel alan tükendiğinde, sistem iCloud Drive dosyalarının önbelleğe alınmış kopyalarını kaldırabilir ve yalnızca meta verileri bırakabilir. Böyle bir dosyayı açmaya çalıştığınızda, sistem onu otomatik olarak buluttan indirir. Geliştirici bu süreci NSFileCoordinator aracılığıyla kontrol edebilir ve NSMetadataUbiquitousItemDownloadingStatusKey aracılığıyla dosya durumunu kontrol edebilir.
WWDC 2022'ye göre Apple, iCloud Drive'ı optimize etmek için aşağıdaki uygulamaları önerir: Ubiquity kapsayıcısında yalnızca kullanıcı belgelerini saklayın, uygulama önbelleğini değil; ilerleme göstergesiyle eşzamansız indirme kullanın; indirmeden önce kullanıcıya dosya boyutu hakkında bilgi sağlayın; büyük dosyalar için sürdürme desteği uygulayın.
Önemli nüans: Ubiquity kapsayıcısından bir dosyayı silmek, onu kullanıcının tüm cihazlarından kaldırır. Geçici dosyalar için Ubiquity kapsayıcısı yerine yerel Documents dizinini kullanın. Ayrıca senkronizasyonun anlık olmadığını unutmayın—gecikme, dosya boyutuna ve ağa bağlı olarak birkaç saniyeden dakikaya kadar değişebilir.
Sıkça Sorulan Sorular
iCloud Drive, belgeleri iPhone, iPad, Mac ve PC arasında senkronize eden Apple'ın bulut dosya depolama alanıdır. Finder ve Dosyalar uygulamasına entegre edilmiştir ve ek uygulamalar olmadan belgelerle çalışmanıza olanak tanır.
Senkronizasyon CloudKit aracılığıyla çalışır: uygulamanın Ubiquity kapsayıcısındaki dosyalar otomatik olarak buluta yüklenir ve kullanıcının diğer cihazlarına dağıtılır. Sistem, durum izleme için NSMetadataQuery ve güvenli erişim için NSFileCoordinator kullanır.
Xcode'da iCloud yeteneğini ekleyin, iCloud Documents hizmetini etkinleştirin ve senkronize dizinin yolunu almak için FileManager.url(forUbiquityContainer:) kullanın. Dosya seçimi için NSDocumentPickerViewController kullanın.
iOS, NSFileVersion aracılığıyla çakışan sürümler oluşturur. Geliştirici, değişiklikleri otomatik olarak birleştirebilir veya kullanıcıya bir seçim gösterebilir. Sistem, sürümleri 30 güne kadar saklar ve farklı cihazlardan eşzamanlı değişiklikler olduğunda çakışmaları otomatik olarak işaretler.
Ücretsiz depolama, tüm iCloud hizmetlerinde 5 GB'dır. Ücretli planlar: 50 GB, 200 GB, 2 TB, 6 TB ve 12 TB. Büyük dosyalar için sürdürme desteği uygulayın ve yazmadan önce kullanılabilir alanı kontrol edin.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun