File Provider Extension, uygulamaların yerleşik Dosyalar uygulaması aracılığıyla harici kaynaklardaki dosyalara erişim sağlamasına olanak tanıyan bir iOS mekanizmasıdır. Apple Developer Documentation, 2024'e göre, File Provider Extension bulut depolama, sunucular ve özel dosya sistemlerindeki dosyaların Files.app içinde doğrudan görüntülenmesini sağlar — bunları yerel olarak içe aktarmaya gerek kalmadan. Kullanıcı, fiziksel konumlarından bağımsız olarak dosyalarla çalışmak için birleşik bir arayüz elde eder.
Önemli Noktalar
File Provider Extension, iOS ve macOS'ta bir uygulama uzantısıdır ve bir uygulamanın sistem Dosyalar uygulaması aracılığıyla harici kaynaklardaki dosyalara erişim sağlamasına olanak tanır. iOS 11'de tanıtılmış ve Document Provider mekanizmasının yerini alarak senkronizasyon, arama ve etiket desteği eklemiştir.
File Provider Extension'ın temel görevi, harici depolama (bulut sunucu, kurumsal NAS, FTP) ile Files.app arasında bir köprü görevi görmektir. Kullanıcı, veriler aslında uzak bir sunucuda bulunsa bile dosyaları ve klasörleri yerel olarak depolanmış gibi görür. Uzantı arka planda çalışır ve içeriği gerektiğinde senkronize eder.
WWDC 2024'e göre Apple, FileProvider API'sini aktif olarak geliştirmektedir: artımlı senkronizasyon desteği eklendi, büyük dizinler için performans iyileştirildi ve toplu işlemler artık kullanılabilir. Bu, File Provider Extension'ı harici dosyaları Apple ekosistemine entegre etmek için tercih edilen yöntem haline getirir.
Mimari File Provider Extension iki bileşenden oluşur: ana uzantı (dosya sağlayıcı türü) ve kimlik doğrulama ve yapılandırma için isteğe bağlı bir UI uzantısı. Ana uzantı, NSFileProviderExtension protokolünü uygular ve Files.app'ten gelen tüm istekleri işler.
import FileProvider
class CloudFileProvider: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
guard let item = storage
.item(for: identifier) else {
throw NSError(domain: NSFileProviderErrorDomain,
code: NSFileProviderError.noSuchItem.rawValue)
}
return item
}
override func urlForItem(with identifier: NSFileProviderItemIdentifier) -> URL {
return fileCoordinator.urlForItem(with: identifier)
}
}
Bir kullanıcı Files.app'i açtığında ve sağlayıcınızı seçtiğinde, sistem uzantıyı bir arka plan sürecinde başlatır. Uzantının kullanıcı arayüzü yoktur — dosya okuma, yazma, yeniden adlandırma ve silme isteklerini işleyen başsız bir süreçtir. Tüm işlemler NSFileProviderManager aracılığıyla eşzamansız olarak gerçekleştirilir.
Önemli nüks: File Provider Extension ayrı bir süreçte yaşar ve bellek düşük olduğunda sistem tarafından sonlandırılabilir. Bu nedenle sağlayıcı, tanımlayıcıları ve senkronizasyon önbelleğini kalıcı depolamaya kaydederek yeniden başlatmanın ardından durumu geri yükleyebilmelidir.
NSFileProviderItem, sağlayıcı hiyerarşisindeki tek bir dosyayı veya klasörü tanımlayan bir protokoldür. Her öğenin benzersiz bir tanımlayıcısı, adı, türü (dosya veya klasör), oluşturma ve değişiklik tarihleri, boyutu ve bayrakları (çevrimdışı kullanılabilir, salt okunur) vardır.
| Özellik | Tür | Açıklama |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Sağlayıcı sistemindeki öğenin benzersiz kimliği |
| parentItemIdentifier | NSFileProviderItemIdentifier | Üst klasörün kimliği (kök — .rootContainer) |
| filename | String | Uzantılı dosya adı |
| typeIdentifier | String (UTType) | İçerik türünü belirlemek için Tek Tip Tanımlayıcı |
| capabilities | NSFileProviderItemCapabilities | Bayraklar: silme, yeniden adlandırma, etiket ekleme |
Protokol ayrıca NSFileProviderItemProtocol aracılığıyla genişletilmiş yetenekleri de destekler: etiketler (renkli etiketler), simgeler, sürümleme ve özel eylemler. Büyük dosyalar için NSFileProviderService aracılığıyla sürdürülebilir aktarım desteği uygulanır.
WWDC 2023'e göre Apple, tüm nesne yerine yalnızca değiştirilen özellikleri güncellemek için closure'ların (NSFileProviderItemFields) kullanılmasını önermektedir. Bu, toplu güncellemeler sırasında senkronizasyonu önemli ölçüde hızlandırır — örneğin, yalnızca bir dosya grubunun boyutu değiştiğinde.
NSFileProviderManager, uzantının yaşam döngüsünü yönetmek için merkezi sınıftır. Sisteme değişiklikleri bildirmek, işbirliği çatışmalarını yönetmek ve indirmeleri yönetmek için yöntemler sağlar. Yönetici, aktif aktarımları otomatik olarak izler ve kullanıcı tarafından görülebilen dosyalara öncelik verir.
class SyncManager {
let providerManager = NSFileProviderManager.default
func signalUpdate(for item: NSFileProviderItemIdentifier) {
providerManager.signalEnumerator(
for: item.parentItemIdentifier
) { error in
if let error = error {
Logger.sync.error(
"Failed to signal: \(error.localizedDescription)"
)
}
}
}
func uploadItem(at url: URL, itemId: NSFileProviderItemIdentifier) {
providerManager.registerURLBasedItem(
with: itemId,
url: url
)
}
}
Senkronizasyon motoru, geliştiricinin bağımsız olarak uyguladığı mantıktır. Apple, yerleşik bir senkronizasyon mekanizması sağlamaz — yalnızca sisteme değişiklikleri bildirmek için API sağlar. Sağlayıcı, dosyaları sunucudan nasıl indireceğine, yerel olarak nasıl önbelleğe alacağına ve düzenleme çatışmalarını nasıl çözeceğine kendisi karar verir.
Çatışmalar: sistem, NSFileProviderSyncAnchor aracılığıyla sürüm çatışması tespitini destekler. Bir dosya aynı anda yerel ve uzak olarak değiştirildiğinde, sağlayıcı son senkronize edilen sürümü belirlemek için senkronizasyon çapasını kullanır ve son yazan kazanır stratejisini kullanarak veya çakışan bir kopya oluşturarak çatışmayı çözer.
File Provider Extension, katı bir iOS sandbox'ı içinde çalışır. Uzantının ana uygulamanın dosya sistemine doğrudan erişimi yoktur ve tersine, uygulama sağlayıcının dosyalarını doğrudan okuyamaz. Tüm veri alışverişi Files.app sistem API'leri aracılığıyla gerçekleşir.
Kullanıcı dosyalarına erişim yalnızca açık etkileşim yoluyla mümkündür: kullanıcı bir uygulamada Files.app'ten bir dosya açar ve sistem, izole bir kapsayıcıda dosyanın geçici bir kopyasını oluşturur. Alıcı uygulama, sağlayıcının deposundaki orijinalle değil, bu kopyayla çalışır.
Apple Security Guide, 2024'e göre sağlayıcı, iletim sırasında veri şifrelemesi (TLS 1.3) uygulamalı ve önbelleğe alınmış dosyalar için isteğe bağlı olarak disk şifrelemesi ekleyebilir. Kullanıcı kimlik doğrulaması, güvenli kimlik bilgisi girişi için uzantı sandbox'ının dışında çalışan ayrı bir FileProviderUI bileşeni aracılığıyla gerçekleştirilir.
Temel sınırlama: uzantı, rastgele kod çalıştıramaz — yalnızca NSFileProviderManager aracılığıyla istekleri işler. Dosya işlemlerinin ötesindeki herhangi bir mantık, ana uygulamada uygulanmalı ve uygulama grupları veya XPC hizmetleri aracılığıyla çağrılmalıdır.
Sıkça Sorulan Sorular
File Provider Extension, harici dosya depolamayı Dosyalar uygulamasıyla entegre etmek için bir uygulama uzantısıdır. Bulut hizmetlerinden, FTP'den, NAS'tan ve diğer kaynaklardan dosyaları yerel olarak kopyalamadan görüntülemeye olanak tanır.
File Provider (iOS 11+), Document Provider'ın yerini alarak arka plan senkronizasyonu, Spotlight arama desteği, etiketler ve geliştirilmiş performans eklemiştir. Document Provider, iOS 11 ile kullanımdan kaldırılmış ve iOS 14'te kaldırılmıştır.
Senkronizasyon, geliştirici tarafından NSFileProviderManager aracılığıyla uygulanır. Uzantı, signalEnumerator aracılığıyla sisteme değişiklikleri bildirir ve sistem güncellenmiş öğe listesini ister. Sürüm çatışmaları NSFileProviderSyncAnchor aracılığıyla çözülür.
Evet, File Provider Extension ana uygulama çalışmadan bağımsız bir süreç olarak çalışabilir. iOS'un Files.app talebi üzerine başlattığı başsız bir uzantıdır. Ancak, kimlik doğrulama ve ilk kurulum genellikle ana uygulama aracılığıyla gerçekleştirilir.
Uzantı, Xcode'da File Provider yeteneği ve com.apple.developer.file-provider yetkilendirmesini gerektirir. Ağ erişimi için Network yeteneği eklenir. Diğer tüm haklar iOS sandbox'ı tarafından sıkı bir şekilde sınırlandırılmıştır.
Ö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