File Provider Extension adalah mekanisme iOS yang memungkinkan aplikasi menyediakan akses ke file dari sumber eksternal melalui aplikasi Bawaan File. Menurut Apple Developer Documentation, 2024, File Provider Extension memungkinkan menampilkan file dari penyimpanan cloud, server, dan sistem file kustom langsung di Files.app — tanpa perlu mengimpornya secara lokal. Pengguna mendapatkan antarmuka terpadu untuk bekerja dengan file terlepas dari lokasi fisiknya.
Poin Penting
File Provider Extension adalah ekstensi aplikasi di iOS dan macOS yang memungkinkan aplikasi menyediakan akses ke file dari sumber eksternal melalui aplikasi sistem File. Muncul di iOS 11 dan menggantikan mekanisme Document Provider, menambahkan dukungan untuk sinkronisasi, pencarian, dan tag.
Tugas utama File Provider Extension adalah bertindak sebagai jembatan antara penyimpanan eksternal (server cloud, NAS perusahaan, FTP) dan Files.app. Pengguna melihat file dan folder seolah-olah disimpan secara lokal, meskipun data mungkin berada di server jarak jauh. Ekstensi bekerja di latar belakang, menyinkronkan konten sesuai kebutuhan.
Menurut WWDC 2024, Apple secara aktif mengembangkan FileProvider API: dukungan untuk sinkronisasi inkremental, peningkatan kinerja untuk direktori besar, dan kemampuan operasi grup telah ditambahkan. Ini menjadikan File Provider Extension cara yang lebih disukai untuk mengintegrasikan file eksternal ke dalam ekosistem Apple.
Arsitektur File Provider Extension terdiri dari dua komponen: ekstensi utama (tipe penyedia file) dan ekstensi UI opsional untuk autentikasi dan konfigurasi. Ekstensi utama mengimplementasikan protokol NSFileProviderExtension dan memproses semua permintaan dari Files.app.
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)
}
}
Ketika pengguna membuka Files.app dan memilih penyedia Anda, sistem menjalankan ekstensi di proses latar belakang. Ekstensi tidak memiliki antarmuka pengguna — ini adalah proses headless yang memproses permintaan baca, tulis, ganti nama, dan hapus file. Semua operasi dilakukan secara asinkron melalui NSFileProviderManager.
Catatan penting: File Provider Extension hidup dalam proses terpisah dan dapat dihentikan oleh sistem saat kekurangan memori. Oleh karena itu, penyedia harus dapat memulihkan status setelah restart, menyimpan pengidentifikasi dan cache sinkronisasi di penyimpanan persisten.
NSFileProviderItem adalah protokol yang mendeskripsikan file atau folder individual dalam hierarki penyedia. Setiap elemen memiliki pengidentifikasi unik, nama, tipe (file atau folder), tanggal pembuatan dan modifikasi, ukuran, dan flag (tersedia offline, hanya baca).
| Properti | Tipe | Deskripsi |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | ID unik elemen dalam sistem penyedia |
| parentItemIdentifier | NSFileProviderItemIdentifier | ID folder induk (root — .rootContainer) |
| filename | String | Nama file dengan ekstensi |
| typeIdentifier | String (UTType) | Uniform Type Identifier untuk menentukan tipe konten |
| capabilities | NSFileProviderItemCapabilities | Flag: hapus, ganti nama, tambah tag |
Protokol ini juga mendukung kemampuan lanjutan melalui NSFileProviderItemProtocol: tag (markah berwarna), ikon, versioning, dan tindakan khusus. Untuk file besar, dukungan untuk transfer yang dapat dilanjutkan (resumable transfers) diimplementasikan melalui NSFileProviderService.
Menurut WWDC 2023, Apple merekomendasikan penggunaan penutupan (NSFileProviderItemFields) untuk memperbarui hanya properti yang berubah, bukan seluruh objek. Ini secara signifikan mempercepat sinkronisasi pada pembaruan batch — misalnya, ketika hanya ukuran grup file yang berubah.
NSFileProviderManager — kelas pusat untuk mengelola siklus hidup ekstensi. Ini menyediakan metode untuk memberi sinyal perubahan ke sistem, menangani konflik kolaboratif, dan mengelola unduhan. Manajer secara otomatis melacak transfer aktif dan memprioritaskan file yang terlihat oleh pengguna.
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
)
}
}
Mesin sinkronisasi — ini adalah logika yang diimplementasikan oleh pengembang secara mandiri. Apple tidak menyediakan mekanisme sinkronisasi bawaan — hanya API untuk memberi tahu sistem tentang perubahan. Penyedia memutuskan sendiri cara mengunduh file dari server, menyimpannya di cache lokal, dan menyelesaikan konflik pengeditan.
Konflik: sistem mendukung deteksi konflik versi melalui NSFileProviderSyncAnchor. Ketika file diubah secara bersamaan secara lokal dan jarak jauh, penyedia menggunakan jangkar sinkronisasi untuk menentukan versi sinkronisasi terakhir dan menyelesaikan konflik dengan strategi „penulis terakhir menang” atau dengan membuat salinan konflik.
File Provider Extension bekerja di dalam sandbox (lingkungan terisolasi) iOS yang ketat. Ekstensi tidak memiliki akses langsung ke sistem file aplikasi host dan sebaliknya — aplikasi tidak dapat membaca file penyedia secara langsung. Semua pertukaran data berlangsung melalui API sistem Files.app.
Akses ke file pengguna hanya dimungkinkan melalui interaksi eksplisit: pengguna membuka file dari Files.app di aplikasi, dan sistem membuat salinan sementara file di wadah terisolasi. Aplikasi penerima bekerja dengan salinan ini, bukan dengan aslinya di penyimpanan penyedia.
Menurut Apple Security Guide, 2024, penyedia wajib mengimplementasikan enkripsi data selama transmisi (TLS 1.3) dan secara opsional dapat menambahkan enkripsi disk untuk file yang di-cache. Autentikasi pengguna dilakukan melalui komponen UI terpisah FileProviderUI, yang dijalankan di luar sandbox ekstensi untuk memasukkan kredensial dengan aman.
Batasan utama: ekstensi tidak dapat menjalankan kode sembarangan — hanya memproses permintaan melalui NSFileProviderManager. Logika apa pun yang melampaui operasi file harus diimplementasikan di aplikasi utama dan dipanggil melalui app groups atau XPC services.
Pertanyaan yang Sering Diajukan
File Provider Extension adalah ekstensi aplikasi untuk integrasi penyimpanan file eksternal dengan aplikasi File. Ini memungkinkan menampilkan file dari layanan cloud, FTP, NAS, dan sumber lain tanpa menyalinnya secara lokal.
File Provider (iOS 11+) menggantikan Document Provider, menambahkan sinkronisasi latar belakang, dukungan pencarian melalui Spotlight, tag, dan kinerja yang lebih baik. Document Provider dianggap usang sejak iOS 11 dan dihapus di iOS 14.
Sinkronisasi diimplementasikan oleh pengembang melalui NSFileProviderManager. Ekstensi memberi sinyal perubahan ke sistem melalui signalEnumerator, dan sistem meminta daftar elemen yang diperbarui. Konflik versi diselesaikan melalui NSFileProviderSyncAnchor.
Ya, File Provider Extension dapat bekerja sebagai proses mandiri tanpa aplikasi utama berjalan. Ini adalah ekstensi headless yang dijalankan iOS atas permintaan Files.app. Namun, autentikasi dan konfigurasi awal biasanya dilakukan melalui aplikasi utama.
Ekstensi memerlukan capability File Provider di Xcode dan entitlement com.apple.developer.file-provider. Untuk akses jaringan, ditambahkan capability Network. Semua hak lainnya dibatasi secara ketat oleh sandbox iOS.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga