File Provider Extension, bulut hizmetlerinin ve uygulamaların dosyalarını sistem Files uygulamasında görüntülemesine olanak tanıyan bir iOS mekanizmasıdır. Kullanıcı, harici belgeleri yerel belgelerle birlikte birleşik bir arayüzde görür ve ek yazılım yüklemeye gerek kalmadan bunları açabilir, taşıyabilir ve düzenleyebilir. Apple Developer Documentation (2025)'ye göre NSFileProviderManager, artımlı senkronizasyon sağlar ve dosya sürümlerini cihazdaki kendi önbelleği aracılığıyla yönetir.
Önemli Noktalar
File Provider Extension, Files uygulamasına yeni belge kaynakları ekleyen bir uygulama uzantısıdır. Bir bulut hizmeti — Google Drive, Dropbox, OneDrive veya kurumsal depolama — ayrı bir uygulama açmadan doğrudan sistem arayüzünde dosya yapısını görüntüleyebilir.
Kullanıcılar, uzak dosyalarla cihazda kayıtlı dosyalarla tamamen aynı şekilde çalışır: klasör içeriklerine göz atma, belgeleri sürükleyip bırakma, bunları uyumlu herhangi bir uygulamada açma ve değişiklikleri buluta geri kaydetme.WWDC 2025'e göre File Provider Extension, 1000'e kadar eşzamanlı senkronizasyon işlemini destekler ve dinamik öncelik yönetimi aracılığıyla ağ hızına uyum sağlar.
Uzantı arka planda çalışır — iOS, senkronizasyon gerektiğinde onu başlatır ve kaynaklar yetersiz olduğunda zorla sonlandırabilir. Tüm işlemler idempotent olmalı ve bir kontrol noktasından devam etmeyi desteklemelidir.
File Provider Extension üç katmanlı bir mimariye sahiptir: Files.app sistem süreci, sağlayıcı uzantısı ve uzak sunucu. Sistem, uzantıdan veri talep eder, uzantı talepleri bulut hizmeti API çağrılarına dönüştürür ve sonuçları NSFileProviderItem aracılığıyla döndürür.
Her güncellemede tam dosya yapısını yüklemek yerine, uzantı yalnızca değiştirilen öğeleri aktarır. NSFileProviderManager, artımlı güncellemeler göndermek için yöntemler sağlar — “dosya A eklendi”, “dosya B değiştirildi”, “klasör C silindi”. Bu, trafiği önemli ölçüde azaltır ve değişikliklerin görüntülenmesini hızlandırır.
Apple Mühendisliği'ne göre, artımlı senkronizasyon, tam yeniden yüklemeye kıyasla veri aktarım hacmini %60–80 oranında azaltır. Senkronizasyon durumunu işaretlemek ve yinelenen talepleri en aza indirmek için NSFileProviderSyncAnchor kullanılması önerilir.
File Provider Extension, çevrimdışı erişim için dosyaları yerel olarak önbelleğe alabilir. Bir dosya açıldığında, sistem uzantıya bir talep gönderir ve uzantı, içeriği sunucudan indirmeye veya önceden önbelleğe alınmış bir sürümü döndürmeye karar verir. NSFileProviderItem, isDownloaded ve isUploaded alanları aracılığıyla önbellek düzeyini belirtir.
Apple, dosya boyutuna göre önbellek politikalarının yapılandırılmasını önerir: görseller ve belgeler için — tam önbelleğe alma, videolar için — yalnızca önizlemeler, arşivler için — kullanıcı talebi üzerine.
NSFileProviderManager, uzantının sistemle etkileşime girdiği merkezi sınıftır. Sisteme değişiklikleri bildirmek, yeni öğeler oluşturmak, indirmeleri yönetmek ve hataları işlemek için yöntemler sağlar. Her NSFileProviderManager örneği belirli bir alana bağlıdır.
signalEnumerator(for:) — klasör içeriğinin değiştiğini ve yeniden okunması gerektiğini sisteme bildirir. reimportItem(_:) — sunucu tarafında yapılan bir değişiklikten sonra belirtilen öğeyi yeniden içe aktarır. registerURLSessionTask:forItemWithIdentifier: — ilerleme takibi için bir arka plan indirmesini belirli bir dosyayla ilişkilendirir.
Önemli sınırlama: NSFileProviderManager yalnızca uzantı süreci içinde çalışır. Ana uygulama, dosya yapısını yönetmek için yöntemlerini doğrudan çağıramaz — senkronizasyon uzantı veya sistem tarafından başlatılmalıdır.
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
Arka planda dosya indirmeleri için NSFileProviderManager, arka plan yapılandırmasıyla URLSession kullanır. Uzantı bir indirme görevi oluşturur ve bunu yöneticiye kaydeder, yönetici de onu ilgili öğeyle ilişkilendirir. Sistem, kullanıcı etkinliğine bağlı olarak indirme ilerlemesini ve önceliklerini otomatik olarak izler.
Bir File Provider Extension oluşturmak, Xcode'da File Provider Extension şablonuyla yeni bir hedef eklemekle başlar. Xcode, otomatik olarak NSFileProviderExtension'den miras alan bir sınıf ve öğelerle çalışmak için minimum bir yöntem seti oluşturur.
Dosya yapısındaki her öğe — bir dosya veya klasör — NSFileProviderItem protokolünü uygular. Protokol, zorunlu alanları tanımlar: itemIdentifier, parentItemIdentifier, filename, typeIdentifier ve capabilities. Ek olarak, boyut, değişiklik tarihi ve indirme bayraklarını belirtebilirsiniz.
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
enumerator(for:) yöntemi, NSFileProviderEnumerator uygulayan bir nesne döndürür ve bu nesne, sistem talebi üzerine klasör içeriğini sağlar. iOS, kök klasör, alt klasörler ve bir çalışma seti için numaralama talep edebilir — ikincisi, son veya favori dosyaları görüntülemek için kullanılır.
Apple, aynı anda binlerce öğeyi yüklememek için NSFileProviderPage aracılığıyla sayfalama ile eşzamansız numaralama yöntemlerinin kullanılmasını önerir. Performans için 50–100 öğelik sayfalar idealdir.
NSFileProviderDomain, tek bir uzantı içinde farklı hesapları ayırma mekanizmasıdır. Bir kullanıcı bir uygulamada birden fazla hesabı yetkilendirdiyse — kişisel ve kurumsal Google Drive — her hesap ayrı bir alan oluşturur ve Files uygulamasında ayrı bir kaynak olarak görünür.
Her alanın benzersiz bir tanımlayıcısı, görünen adı ve durumu vardır. Kullanıcılar, diğer hesapları etkilemeden alanları geçici olarak devre dışı bırakabilir veya silebilir. Sistem, her aktif alan için ayrı bir uzantı süreci başlatır ve hesaplar arasında veri yalıtımı sağlar.
Apple'a göre, uzantı başına 10'dan fazla alan oluşturulmaması önerilir — aşırı sayı, Files uygulamasının başlatılmasını yavaşlatır ve bellek tüketimini artırır. Çok sayıda hesabı olan hizmetler için, uzantı içinde profil değiştirme ile tek bir alanda toplamak daha uygundur.
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
Sıkça Sorulan Sorular
Herhangi bir hizmet kendi uzantısını uygulayabilir. Destekleyen hizmetler arasında — Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive ve Nextcloud bulunur. Uzantı, herhangi bir REST veya WebDAV deposu için evrenseldir.
Uzantı, yerel dosya değişiklikleri hakkında sistemden bildirimler alır ve bunları NSFileProviderManager aracılığıyla sunucuya gönderir. Sunucudan ters senkronizasyon için, NSFileProviderSyncAnchor kullanılır — son güncellemenin bir işareti.
Evet, dosyalar yerel olarak önbelleğe alınmışsa. NSFileProviderItem, indirilen dosyaları isDownloaded bayrağıyla işaretler. Çevrimdışı modda yapılan değişiklikler, bağlantı yeniden kurulduğunda otomatik olarak senkronize edilir.
Doğrudan bir sınırlama yoktur — boyut, sunucunun kapasitesine göre belirlenir. Apple, 100 MB'a kadar olan dosyaların otomatik olarak önbelleğe alınmasını ve daha büyük dosyalar için ilerleme çubuğuyla akışlı indirme kullanılmasını önerir.
UIDocumentPickerViewController, kalıcı bir pencere aracılığıyla tek seferlik dosya seçimi sağlar. File Provider Extension, arka planda senkronizasyon ve uzun vadeli erişimle Files uygulamasına kalıcı bir belge kaynağı yerleştirir.
Ö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