File Provider Extension — iOS mexanizmidir ki, proqramlara daxili Fayllar proqramı vasitəsilə xarici mənbələrdən fayllara giriş təmin etməyə imkan verir. Apple Developer Documentation, 2024-ə əsasən, File Provider Extension bulud anbarlarından, serverlərdən və xüsusi fayl sistemlərindən faylları birbaşa Files.app-də göstərməyə imkan verir — onları lokal olaraq idxal etmədən. İstifadəçi fiziki yerləşməsindən asılı olmayaraq fayllarla işləmək üçün vahid interfeys əldə edir.
Əsas məqamlar
File Provider Extension iOS və macOS-da proqram genişlənməsidir ki, proqrama xarici mənbələrdən fayllara sistem Fayllar proqramı vasitəsilə giriş təmin etməyə imkan verir. O, iOS 11-də ortaya çıxdı və Document Provider mexanizmini əvəz edərək sinxronizasiya, axtarış və etiketlər üçün dəstək əlavə etdi.
File Provider Extension-in əsas vəzifəsi xarici anbar (bulud serveri, korporativ NAS, FTP) ilə Files.app arasında körpü rolunu oynamaqdır. İstifadəçi faylları və qovluqları sanki lokal olaraq saxlanılmış kimi görür, halbuki məlumatlar uzaq serverdə yerləşə bilər. Genişlənmə fon rejimində işləyir, məzmunu lazım olduqca sinxronlaşdırır.
WWDC 2024-ə əsasən, Apple FileProvider API-ni fəal şəkildə inkişaf etdirir: artımlı sinxronizasiya dəstəyi, böyük qovluqlar üçün təkmilləşdirilmiş performans və qrup əməliyyatları imkanı əlavə edilib. Bu, File Provider Extension-i Apple ekosistemində xarici faylları inteqrasiya etmək üçün üstünlük verilən üsula çevirir.
Arxitektura: File Provider Extension iki komponentdən ibarətdir: əsas genişlənmə (fayl təchizatçısı növü) və autentifikasiya və konfiqurasiya üçün isteğe bağlı UI genişlənməsi. Əsas genişlənmə NSFileProviderExtension protokolunu tətbiq edir və Files.app-dən gələn bütün sorğuları emal edir.
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)
}
}
İstifadəçi Files.app-i açıb sizin təchizatçınızı seçdikdə, sistem genişlənməni fon prosesində işə salır. Genişlənmənin UI-i yoxdur — bu, faylların oxunması, yazılması, adının dəyişdirilməsi və silinməsi sorğularını emal edən headless prosesdir. Bütün əməliyyatlar NSFileProviderManager vasitəsilə asinxron şəkildə yerinə yetirilir.
Vacib qeyd: File Provider Extension ayrı bir prosesdə işləyir və yaddaş çatışmazlığı zamanı sistem tərəfindən dayandırıla bilər. Buna görə təchizatçı yenidən başlatmadan sonra vəziyyəti bərpa edə bilməli, identifikatorları və sinxronizasiya keşini daimi yaddaşda saxlamalıdır.
NSFileProviderItem təchizatçı iyerarxiyasında ayrıca fayl və ya qovluğu təsvir edən protokoldur. Hər bir elementin unikal identifikatoru, adı, növü (fayl və ya qovluq), yaradılma və dəyişdirilmə tarixləri, ölçüsü və bayraqları (oflayn əlçatan, yalnız oxumaq üçün) var.
| Xüsusiyyət | Tip | Açıqlama |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | Təchizatçı sistemində elementin unikal ID-si |
| parentItemIdentifier | NSFileProviderItemIdentifier | Ana qovluğun ID-si (kök — .rootContainer) |
| filename | String | Genişlənmə ilə fayl adı |
| typeIdentifier | String (UTType) | Məzmun növünü müəyyən etmək üçün Uniform Type Identifier |
| capabilities | NSFileProviderItemCapabilities | Bayraqlar: silmə, ad dəyişdirmə, etiket əlavə etmə |
Protokol həmçinin NSFileProviderItemProtocol vasitəsilə genişləndirilmiş imkanları dəstəkləyir: etiketlər (rəngli işarələr), nişanlar, versiyalaşdırma və xüsusi hərəkətlər. Böyük fayllar üçün NSFileProviderService vasitəsilə davam etdirilə bilən transferlər (resumable transfers) dəstəklənir.
WWDC 2023-ə əsasən, Apple bütün obyekti deyil, yalnız dəyişmiş xüsusiyyətləri yeniləmək üçün bağlanmalardan (NSFileProviderItemFields) istifadə etməyi tövsiyə edir. Bu, toplu yeniləmələrdə sinxronizasiyanı əhəmiyyətli dərəcədə sürətləndirir — məsələn, yalnız fayl qrupunun ölçüsü dəyişdikdə.
NSFileProviderManager — genişlənmənin həyat dövrünü idarə etmək üçün mərkəzi sinifdir. O, sistemə dəyişikliklər barədə siqnal vermək, əməkdaşlıq konfliktlərini emal etmək və yükləmələri idarə etmək üçün metodlar təqdim edir. Menecer aktiv transferləri avtomatik izləyir və istifadəçiyə görünən fayllara üstünlük 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
)
}
}
Sinxronizasiya mühərriki — bu, tərtibatçının özünün həyata keçirdiyi məntiqdir. Apple daxili sinxronizasiya mexanizmi təqdim etmir — yalnız dəyişikliklər barədə sistemə məlumat vermək üçün API təqdim edir. Təchizatçı serverdən faylları necə yükləyəcəyinə, onları lokal olaraq keşləyəcəyinə və redaktə konfliktlərini həll edəcəyinə özü qərar verir.
Konfliktlər: sistem NSFileProviderSyncAnchor vasitəsilə versiya konfliktlərinin aşkarlanmasını dəstəkləyir. Fayl eyni anda həm lokal, həm də uzaqda dəyişdirildikdə, təchizatı sinxronizasiya ankerindən son sinxronlaşdırılmış versiyanı müəyyən etmək və konflikti „son yazan qazanır" strategiyası ilə və ya konflikt nüsxəsi yaratmaqla həll etmək üçün istifadə edir.
File Provider Extension iOS-un ciddi sandbox (karantin) mühitində işləyir. Genişlənmənin host-proqramın fayl sisteminə birbaşa girişi yoxdur və əksinə — proqram təchizatçının fayllarını birbaşa oxuya bilməz. Bütün məlumat mübadiləsi Files.app-in sistem API-ləri vasitəsilə aparılır.
İstifadəçi fayllarına giriş yalnız açıq qarşılıqlı əlaqə ilə mümkündür: istifadəçi Files.app-dən bir proqramda fayl açır və sistem təcrid olunmuş konteynerdə faylın müvəqqəti nüsxəsini yaradır. Qəbul edən proqram bu nüsxə ilə işləyir, təchizatçı anbarındakı orijinal ilə deyil.
Apple Security Guide, 2024-ə əsasən, təchizatçı məlumat ötürülməsi zamanı şifrələməni (TLS 1.3) tətbiq etməlidir və keşlənmiş fayllar üçün diskdə şifrələmə əlavə edə bilər. İstifadəçi autentifikasiyası FileProviderUI-nin ayrıca UI komponenti vasitəsilə həyata keçirilir ki, bu da etimad məlumatlarının təhlükəsiz daxil edilməsi üçün genişlənmə sandboxından kənarda işə salınır.
Əsas məhdudiyyət: genişlənmə ixtiyari kod işlədə bilməz — o, yalnız NSFileProviderManager vasitəsilə sorğuları emal edir. Fayl əməliyyatları çərçivəsindən kənara çıxan hər hansı məntiq əsas proqramda tətbiq edilməli və app groups və ya XPC services vasitəsilə çağırılmalıdır.
Tez-tez verilən suallar
File Provider Extension xarici fayl anbarlarını Fayllar proqramı ilə inteqrasiya etmək üçün proqram genişlənməsidir. O, bulud xidmətlərindən, FTP, NAS və digər mənbələrdən faylları lokal surətini çıxarmadan göstərməyə imkan verir.
File Provider (iOS 11+) Document Provider-i əvəz edərək fon sinxronizasiyası, Spotlight vasitəsilə axtarış dəstəyi, etiketlər və təkmilləşdirilmiş performans əlavə etdi. Document Provider iOS 11-dən etibarən köhnəlmiş hesab olunur və iOS 14-də silinmişdir.
Sinxronizasiya tərtibatçı tərəfindən NSFileProviderManager vasitəsilə həyata keçirilir. Genişlənmə signalEnumerator vasitəsilə sistemə dəyişikliklər barədə siqnal göndərir, sistem isə yenilənmiş elementlər siyahısını tələb edir. Versiya konfliktləri NSFileProviderSyncAnchor vasitəsilə həll edilir.
Bəli, File Provider Extension əsas proqram işə salınmadan müstəqil proses kimi işləyə bilər. Bu, iOS-un Files.app sorğusu ilə işə saldığı headless genişlənmədir. Lakin autentifikasiya və ilkin konfiqurasiya adətən əsas proqram vasitəsilə həyata keçirilir.
Genişlənmə Xcode-da capability File Provider və com.apple.developer.file-provider entitlement tələb edir. Şəbəkəyə giriş üçün Network capability əlavə edilir. Bütün digər hüquqlar iOS sandboxı ilə ciddi şəkildə məhdudlaşdırılır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun