Sistem file dan dokumen dalam pengembangan seluler: apa itu, prinsip apa, dan cara kerjanya

Penulis: IT Sectr Diterbitkan: 2026-07-19 Waktu membaca: 12 mnt

Bekerja dengan sistem file adalah fondasi dari setiap aplikasi seluler. Setiap platform menawarkan model aksesnya sendiri: Sandbox di iOS mengisolasi aplikasi dalam wadah terpisah, sementara Scoped Storage di Android membatasi akses langsung ke penyimpanan bersama. Menurut Google Developer Documentation (2026), pengenalan Scoped Storage dengan Android 10 memerlukan peninjauan ulang total arsitektur penyimpanan data. Dalam panduan ini, kita akan membahas FileManager, MediaStore API, Storage Access Framework, dan DocumentProvider untuk kedua platform.

Poin Penting

  • Sandbox — lingkungan iOS terisolasi di mana setiap aplikasi hanya beroperasi di direktori sendiri tanpa akses ke data aplikasi lain.
  • Scoped Storage — model Android 10+ yang membatasi akses langsung ke penyimpanan eksternal melalui MediaStore API dan SAF.
  • FileManager — kelas utama iOS untuk operasi file: membuat, membaca, menyalin, memindahkan, dan menghapus.
  • Storage Access Framework — mekanisme sistem Android untuk memilih dokumen menggunakan Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — komponen Android untuk mempublikasikan file aplikasi ke sistem file bersama melalui SAF.

Apa itu sistem file di aplikasi seluler?

Sistem file di aplikasi seluler adalah kumpulan API, aturan keamanan, dan batasan yang menentukan cara data disimpan dan diakses di perangkat iOS dan Android. Tidak seperti sistem operasi desktop, platform seluler mengisolasi setiap aplikasi untuk melindungi data pengguna dari pembacaan tidak sah oleh program lain.

Perbedaan arsitektur antara iOS dan Android

iOS menggunakan model Sandbox, di mana setiap aplikasi berada dalam wadahnya sendiri dengan izin yang dibatasi secara ketat. Sebelum versi 10, Android menyediakan akses penuh ke penyimpanan eksternal, tetapi dengan diperkenalkannya Scoped Storage, pendekatannya menjadi lebih dekat dengan iOS. Perbedaan utamanya adalah iOS mengisolasi sistem file sepenuhnya, sementara Android menawarkan beberapa tingkat akses: direktori pribadi, MediaStore publik, dan akses sementara melalui SAF.

Jenis penyimpanan utama

Aplikasi seluler menggunakan tiga jenis penyimpanan data. Penyimpanan pribadi — direktori yang hanya dapat diakses oleh aplikasi untuk file internal dan cache. Penyimpanan bersama — file media melalui MediaStore (Android) atau Files App (iOS). Penyimpanan cloud — iCloud Drive dan Google Drive untuk sinkronisasi antar perangkat. Setiap jenis memiliki batasannya sendiri dalam hal ukuran, masa pakai file, dan kondisi akses.

Jenis penyimpananiOSAndroid
PribadiDocuments, Library, CachesgetFilesDir(), getCacheDir()
Media bersamaPHPhotoLibrary melalui pemilihMediaStore API (ContentResolver)
Dokumen bersamaFiles App melalui UIDocumentPickerStorage Access Framework (SAF)
CloudiCloud Drive (UIDocument)Google Drive API
CacheDirektori Caches, dibersihkan oleh sistemgetCacheDir(), getExternalCacheDir()

Sistem file dalam pengembangan seluler: Sandbox di iOS

Sandbox adalah arsitektur keamanan iOS yang mengisolasi setiap aplikasi. Sebuah aplikasi hanya dapat membaca dan menulis di dalam sandbox-nya sendiri. Untuk mengakses kontak, foto, atau file dari aplikasi lain, pemilih sistem harus digunakan: UIImagePickerController atau UIDocumentPickerViewController. Akses ke Files App dikonfigurasi melalui bendera UIFileSharingEnabled di Info.plist. Sistem file dalam pengembangan seluler di iOS memerlukan pemahaman tentang struktur direktori dan pemilihan lokasi yang tepat untuk setiap jenis data.

Struktur direktori sandbox

Sandbox iOS terdiri dari beberapa direktori standar. Documents — untuk file pengguna, termasuk dalam iCloud Backup. Caches — untuk data sementara yang mungkin dihapus sistem saat penyimpanan hampir penuh. Temporary — untuk file sesi saat ini, dibersihkan saat restart. Application Support — untuk data internal aplikasi yang tersembunyi dari pengguna. Memilih direktori yang salah menyebabkan masalah: menyimpan cache di Documents membuang-buang ruang iCloud dan melanggar pedoman sistem file Apple.

swift
import Foundation

let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"

// Penulisan atomik dengan enkripsi
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — API utama untuk operasi file

Kelas FileManager menyediakan serangkaian metode lengkap untuk mengelola file di iOS. FileManager.default adalah singleton thread-safe yang cocok untuk sebagian besar operasi. Metode seperti fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:), dan removeItem(at:) mencakup skenario dasar. Operasi file yang lebih besar dari 1 MB harus dilakukan di thread latar belakang melalui DispatchQueue.global(). Untuk streaming volume besar, gunakan FileHandle daripada memuat seluruh file ke memori.

swift
func readDocumentsFile(named fileName: String) -> String? {
    guard let docsURL = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else { return nil }

    let fileURL = docsURL.appendingPathComponent(fileName)
    return try? String(contentsOf: fileURL)
}

Sistem file di aplikasi seluler: Scoped Storage di Android

Dengan dirilisnya Android 10, Google memperkenalkan Scoped Storage — model akses terbatas ke sistem file. Sebuah aplikasi hanya dapat membaca dan menulis secara bebas di direktori pribadinya. Untuk file media (foto, video, audio), MediaStore API digunakan melalui ContentResolver. Untuk dokumen arbitrer, Storage Access Framework digunakan melalui Intent ACTION_OPEN_DOCUMENT. Di Android 11+, akses langsung ke root penyimpanan eksternal sepenuhnya dilarang, dan semua pengembang harus menggunakan API baru.

MediaStore API untuk bekerja dengan file media

MediaStore adalah ContentProvider sistem untuk mengakses file media di perangkat. Melalui ContentResolver, aplikasi meminta Uri file alih-alih jalur langsung. MediaStore.Files — untuk semua jenis file, Images — untuk gambar, Video — untuk video, Audio — untuk rekaman audio. Penulisan ke direktori bersama dilakukan melalui insert() dengan DISPLAY_NAME, MIME_TYPE, dan RELATIVE_PATH. Setelah penyisipan, aplikasi menerima Uri tempat byte ditulis. Jenis MIME memainkan peran penting — jenis yang salah akan menyebabkan kesalahan saat membuka file.

kotlin
val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
    put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
    put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}

val uri = contentResolver.insert(
    MediaStore.Files.getContentUri("external"),
    contentValues
)

uri?.let {
    contentResolver.openOutputStream(it)?.use { stream ->
        stream.write(pdfBytes)
    }
}

Storage Access Framework untuk pemilihan file

SAF menyediakan antarmuka terpadu untuk memilih dan membuat file tanpa izin runtime. Intent ACTION_OPEN_DOCUMENT membuka manajer file sistem di Android. Setelah pemilihan, aplikasi menerima Uri content:// dengan akses sementara melalui FLAG_GRANT_READ_URI_PERMISSION. ACTION_CREATE_DOCUMENT memungkinkan menyimpan file ke lokasi penyimpanan eksternal mana pun yang dipilih pengguna. SAF berfungsi di Android 5+ dan menyediakan akses ke file dari penyedia cloud yang terhubung melalui DocumentsProvider.

kotlin
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "*/*"
    putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
        "application/pdf",
        "text/plain"
    ))
}
startActivityForResult(intent, REQUEST_CODE)

Pemilihan dokumen di aplikasi seluler: pemilih sistem

Kedua platform menyediakan mekanisme bawaan bagi pengguna untuk memilih file. Dokumen di aplikasi seluler diteruskan melalui pemilih sistem yang memberikan akses sementara ke file tanpa izin permanen. Di iOS, ini adalah UIDocumentPickerViewController; di Android, ACTION_OPEN_DOCUMENT. Dokumen di aplikasi seluler dapat dipilih dari penyimpanan lokal dan layanan cloud. Pengguna secara eksplisit menentukan file, dan aplikasi menerima Uri atau URL dengan masa berlaku terbatas.

UIDocumentPickerViewController di iOS

UIDocumentPickerViewController membuka Files App dan memungkinkan memilih satu atau lebih dokumen. Mode: impor (menyalin ke sandbox) dan buka (akses melalui URL dengan cakupan keamanan). Untuk pemfilteran file, array jenis UTType diteruskan — misalnya, .pdf dan .plainText. Setelah menerima URL, aplikasi harus memanggil startAccessingSecurityScopedResource() sebelum membaca dan stopAccessingSecurityScopedResource() setelah selesai. Tidak memanggil stopAccessing menyebabkan kebocoran sumber daya sistem. Dokumen di aplikasi seluler di iOS memerlukan pelepasan wajib izin sementara setelah selesai bekerja dengan file.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// Melepaskan akses di delegasi
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider dan DocumentProvider di Android

FileProvider adalah subkelas dari ContentProvider untuk berbagi file secara aman antar aplikasi. Ini menghasilkan Uri content:// sementara berdasarkan file dari direktori XML yang ditentukan. Aplikasi lain mendapatkan akses melalui Intent dengan FLAG_GRANT_READ_URI_PERMISSION. DocumentProvider, tidak seperti FileProvider, mempublikasikan file di SAF dan memungkinkan aplikasi lain menjelajahi konten aplikasi Anda sebagai bagian dari sistem file. Untuk mengimplementasikan DocumentsProvider, Anda perlu menimpa queryRoots(), queryChildDocuments(), dan openDocument(), lalu mendaftarkannya di AndroidManifest.xml

iCloud Drive dan sinkronisasi file cloud

Sinkronisasi cloud memberi pengguna akses ke dokumen di semua perangkat mereka. Sistem file di aplikasi seluler ditingkatkan dengan lapisan cloud: UIDocument di iOS secara otomatis melacak perubahan dan menyinkronkannya melalui iCloud. Di Android, fungsionalitas serupa dibangun melalui Google Drive API atau DocumentsProvider dengan akar cloud. Memahami sistem file dalam pengembangan seluler sangat penting untuk membangun sinkronisasi yang andal antar perangkat.

UIDocument — Sinkronisasi di iOS

UIDocument adalah kelas abstrak untuk bekerja dengan dokumen iCloud. Ini secara otomatis menyimpan perubahan, membaca data, dan memberi tahu delegasi tentang pembaruan. Jika terjadi konflik penulisan, NSFileVersion menyediakan daftar versi yang tersedia — pengembang dapat memilih yang terbaru atau menampilkan opsi penyelesaian konflik kepada pengguna. Mengonfigurasi Ubiquity Container di Capabilities proyek wajib untuk iCloud Drive. NSFileCoordinator dan NSFilePresenter mencegah kondisi balapan data selama akses bersamaan dari beberapa thread atau perangkat.

Cadangan dan pemulihan data

iOS secara otomatis menyertakan direktori Documents di iCloud Backup. Android bekerja dengan Auto Backup for Apps — sistem menyimpan data dari getFilesDir(), SharedPreferences, dan database SQLite ke Google Drive. Cache dan file eksternal tidak termasuk dalam cadangan. Kedua platform memungkinkan konfigurasi pengecualian: di iOS melalui NSURLIsExcludedFromBackupKey, di Android melalui konfigurasi XML aturan cadangan. Enkripsi file dengan data pribadi adalah wajib — di iOS gunakan NSDataWritingFileProtectionComplete, di Android gunakan EncryptedFile dari pustaka security-crypto.

ParameteriOSAndroid
Cadangan defaultDocuments dan LibrarygetFilesDir(), SharedPreferences, DB
Pengecualian fileisExcludedFromBackupKeyAturan XML cadangan (fullBackupContent)
EnkripsiNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
Sinkronisasi cloudUIDocument + iCloudGoogle Drive API + SAF
Pemulihan otomatisiCloud Restore setelah instalasiAuto Backup saat instalasi ulang

Pertanyaan yang sering diajukan

Apa itu Sandbox di iOS?

Sandbox adalah lingkungan terisolasi untuk setiap aplikasi di iOS. Aplikasi tidak dapat mengakses file aplikasi lain tanpa menggunakan pemilih sistem seperti UIDocumentPickerViewController.

Apa itu Scoped Storage di Android?

Scoped Storage adalah model akses terbatas ke sistem file di Android 10+. Aplikasi hanya membaca langsung filenya sendiri, menggunakan MediaStore API untuk media dan Storage Access Framework untuk dokumen.

Bagaimana cara memilih file di iOS?

Gunakan UIDocumentPickerViewController — pemilih sistem untuk memilih dokumen dari Files App atau iCloud Drive. Setelah pemilihan, Anda menerima URL dengan cakupan keamanan dan akses sementara.

Bagaimana cara mengakses file di Android 11+?

Untuk file media, gunakan MediaStore API melalui ContentResolver dengan menentukan jenis MIME. Untuk dokumen arbitrer, gunakan Storage Access Framework dengan Intent ACTION_OPEN_DOCUMENT.

Apa itu FileProvider di Android?

FileProvider adalah subkelas dari ContentProvider untuk berbagi file secara aman antar aplikasi melalui Uri content:// sementara dengan FLAG_GRANT_READ_URI_PERMISSION.

Ringkasan

  • Sandbox — sistem file terisolasi iOS di mana aplikasi hanya dapat mengakses direktori Documents, Caches, dan Library sendiri.
  • FileManager — API utama untuk operasi file di iOS. Baca file besar melalui FileHandle di thread latar belakang.
  • Scoped Storage — model sistem file di Android 10+ yang menggantikan akses langsung ke penyimpanan eksternal dengan MediaStore API dan SAF.
  • MediaStore API — ContentProvider sistem untuk bekerja dengan file media di Android. Penulisan dilakukan melalui insert() dengan ContentValues.
  • Storage Access Framework — mekanisme pemilihan dokumen universal di Android melalui ACTION_OPEN_DOCUMENT dan ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — pemilih sistem iOS yang membuka Files App dan iCloud Drive. Bekerja dengan URL cakupan keamanan.
  • FileProvider — mekanisme untuk berbagi file aman antar aplikasi Android melalui Uri content:// sementara dan izin runtime.

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.

Diskusikan proyek