Bestandssysteem en documenten in mobiele ontwikkeling: wat het is, welke principes en hoe het werkt

Auteur: IT Sectr Gepubliceerd: 2026-07-19 Leestijd: 12 min

Werken met het bestandssysteem is de basis van elke mobiele applicatie. Elk platform biedt zijn eigen toegangsmodel: Sandbox op iOS isoleert applicaties in aparte containers, terwijl Scoped Storage op Android de directe toegang tot gedeelde opslag beperkt. Volgens Google Developer Documentation (2026) vereiste de introductie van Scoped Storage met Android 10 een volledige herziening van de dataopslagarchitectuur. In deze gids behandelen we FileManager, MediaStore API, Storage Access Framework en DocumentProvider voor beide platforms.

Belangrijkste punten

  • Sandbox — een geïsoleerde iOS-omgeving waarin elke app alleen in zijn eigen directory werkt zonder toegang tot gegevens van andere apps.
  • Scoped Storage — Android 10+-model dat directe toegang tot externe opslag beperkt via MediaStore API en SAF.
  • FileManager — de primaire iOS-klasse voor bestandsbewerkingen: maken, lezen, kopiëren, verplaatsen en verwijderen.
  • Storage Access Framework — het systeemmechanisme van Android voor het selecteren van documenten met Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — een Android-component voor het publiceren van app-bestanden naar het gedeelde bestandssysteem via SAF.

Wat is een bestandssysteem in mobiele apps?

Het bestandssysteem in mobiele applicaties is een set API's, beveiligingsregels en beperkingen die definiëren hoe gegevens worden opgeslagen en benaderd op iOS- en Android-apparaten. In tegenstelling tot desktopbesturingssystemen isoleren mobiele platforms elke applicatie om gebruikersgegevens te beschermen tegen ongeautoriseerd lezen door andere programma's.

Architectuurverschillen tussen iOS en Android

iOS gebruikt het Sandbox-model, waarbij elke app in zijn eigen container bestaat met strikt beperkte machtigingen. Vóór versie 10 bood Android volledige toegang tot externe opslag, maar met de introductie van Scoped Storage kwam de benadering dichter bij iOS. Het belangrijkste verschil is dat iOS het bestandssysteem volledig isoleert, terwijl Android meerdere toegangsniveaus biedt: een privédirectory, openbare MediaStore en tijdelijke toegang via SAF.

Belangrijkste opslagtypen

Mobiele applicaties gebruiken drie soorten gegevensopslag. Privéopslag — een directory die alleen toegankelijk is voor de app voor interne bestanden en cache. Gedeelde opslag — mediabestanden via MediaStore (Android) of Files App (iOS). Cloudopslag — iCloud Drive en Google Drive voor synchronisatie tussen apparaten. Elk type heeft zijn eigen beperkingen qua grootte, bestandslevensduur en toegangsvoorwaarden.

OpslagtypeiOSAndroid
PrivéDocuments, Library, CachesgetFilesDir(), getCacheDir()
Gedeelde mediaPHPhotoLibrary via kiezerMediaStore API (ContentResolver)
Gedeelde documentenFiles App via UIDocumentPickerStorage Access Framework (SAF)
CloudiCloud Drive (UIDocument)Google Drive API
CacheCaches-directory, gewist door systeemgetCacheDir(), getExternalCacheDir()

Bestandssysteem in mobiele ontwikkeling: Sandbox op iOS

Sandbox is de beveiligingsarchitectuur van iOS die elke applicatie isoleert. Een app kan alleen lezen en schrijven binnen zijn eigen sandbox. Om toegang te krijgen tot contacten, foto's of bestanden van andere apps, moeten systeemkiezers worden gebruikt: UIImagePickerController of UIDocumentPickerViewController. Toegang tot Files App wordt geconfigureerd via de UIFileSharingEnabled-vlag in Info.plist. Het bestandssysteem in mobiele ontwikkeling op iOS vereist inzicht in de directorystructuur en het kiezen van de juiste locatie voor elk gegevenstype.

Directorystructuur van de sandbox

De iOS-sandbox bestaat uit verschillende standaarddirectories. Documents — voor gebruikersbestanden, opgenomen in iCloud Backup. Caches — voor tijdelijke gegevens die het systeem kan verwijderen bij weinig opslagruimte. Temporary — voor bestanden van de huidige sessie, gewist bij herstart. Application Support — voor interne app-gegevens die verborgen zijn voor de gebruiker. Het verkeerde directory kiezen leidt tot problemen: het opslaan van cache in Documents verspilt iCloud-ruimte en schendt de richtlijnen van Apple voor het bestandssysteem.

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 = "Содержимое файла"

// Atomair schrijven met versleuteling
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — de primaire API voor bestandsbewerkingen

De klasse FileManager biedt een complete set methoden voor het beheren van bestanden op iOS. FileManager.default is een thread-safe singleton die geschikt is voor de meeste bewerkingen. Methoden zoals fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) en removeItem(at:) dekken basisscenario's. Bestandsbewerkingen groter dan 1 MB moeten worden uitgevoerd in een achtergrondthread via DispatchQueue.global(). Voor het streamen van grote volumes gebruikt u FileHandle in plaats van het hele bestand in het geheugen te laden.

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)
}

Bestandssysteem in mobiele apps: Scoped Storage op Android

Met de release van Android 10 introduceerde Google Scoped Storage — een model met beperkte toegang tot het bestandssysteem. Een app kan alleen vrij lezen en schrijven in zijn privédirectories. Voor mediabestanden (foto's, video's, audio) wordt de MediaStore API gebruikt via ContentResolver. Voor willekeurige documenten wordt Storage Access Framework gebruikt via Intent ACTION_OPEN_DOCUMENT. Op Android 11+ is directe toegang tot de root van externe opslag volledig verboden en moeten alle ontwikkelaars de nieuwe API's gebruiken.

MediaStore API voor het werken met mediabestanden

MediaStore is een systeem-ContentProvider voor toegang tot mediabestanden op het apparaat. Via ContentResolver vraagt de app Uri van bestanden in plaats van directe paden. MediaStore.Files — voor alle bestandstypen, Images — voor afbeeldingen, Video — voor video's, Audio — voor audio-opnamen. Schrijven naar gedeelde directories gebeurt via insert() met DISPLAY_NAME, MIME_TYPE en RELATIVE_PATH. Na het invoegen ontvangt de app een Uri waarnaar bytes worden geschreven. MIME-typen spelen een cruciale rol — een onjuist type veroorzaakt een fout bij het openen van het bestand.

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 voor bestandsselectie

SAF biedt een uniforme interface voor het selecteren en maken van bestanden zonder runtime-machtigingen. Intent ACTION_OPEN_DOCUMENT opent de systeembestandsbeheerder op Android. Na selectie ontvangt de app een content:// Uri met tijdelijke toegang via FLAG_GRANT_READ_URI_PERMISSION. ACTION_CREATE_DOCUMENT maakt het mogelijk bestanden op te slaan op elke externe opslaglocatie die de gebruiker kiest. SAF werkt op Android 5+ en biedt toegang tot bestanden van cloudproviders die zijn verbonden via 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)

Documentselectie in mobiele apps: systeemkiezers

Beide platforms bieden ingebouwde mechanismen voor gebruikers om bestanden te selecteren. Documenten in mobiele applicaties worden doorgegeven via systeemkiezers die tijdelijke toegang tot een bestand verlenen zonder permanente machtigingen. Op iOS is dit UIDocumentPickerViewController; op Android, ACTION_OPEN_DOCUMENT. Documenten in mobiele applicaties kunnen worden geselecteerd uit zowel lokale opslag als clouddiensten. De gebruiker specificeert expliciet het bestand en de app ontvangt een Uri of URL met een beperkte geldigheidsduur.

UIDocumentPickerViewController op iOS

UIDocumentPickerViewController opent Files App en maakt het mogelijk een of meer documenten te selecteren. Modi: importeren (kopiëren naar sandbox) en openen (toegang via security-scoped URL). Voor bestandsfiltering wordt een array van UTType-typen doorgegeven — bijvoorbeeld .pdf en .plainText. Na ontvangst van de URL moet de app startAccessingSecurityScopedResource() aanroepen voor het lezen en stopAccessingSecurityScopedResource() na voltooiing. Het niet aanroepen van stopAccessing leidt tot systeembronnenlekken. Documenten in mobiele applicaties op iOS vereisen het verplicht vrijgeven van tijdelijke machtigingen na het voltooien van het werk met het bestand.

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

// Toegang vrijgeven in de gedelegeerde
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider en DocumentProvider op Android

FileProvider is een subklasse van ContentProvider voor het veilig delen van bestanden tussen apps. Het genereert tijdelijke content:// Uris op basis van bestanden uit opgegeven XML-directories. Andere apps krijgen toegang via Intent met FLAG_GRANT_READ_URI_PERMISSION. DocumentProvider publiceert in tegenstelling tot FileProvider bestanden in SAF en stelt andere apps in staat de inhoud van uw app te bekijken als onderdeel van het bestandssysteem. Om DocumentsProvider te implementeren, moet u queryRoots(), queryChildDocuments() en openDocument() overschrijven en vervolgens registreren in AndroidManifest.xml

iCloud Drive en cloudbestandssynchronisatie

Cloudsynchronisatie geeft gebruikers toegang tot documenten op al hun apparaten. Het bestandssysteem in mobiele applicaties wordt versterkt door een cloudlaag: UIDocument op iOS volgt automatisch wijzigingen en synchroniseert ze via iCloud. Op Android wordt vergelijkbare functionaliteit gebouwd via Google Drive API of DocumentsProvider met cloudroots. Inzicht in het bestandssysteem in mobiele ontwikkeling is cruciaal voor het bouwen van betrouwbare synchronisatie tussen apparaten.

UIDocument — Synchronisatie op iOS

UIDocument is een abstracte klasse voor het werken met iCloud-documenten. Het slaat automatisch wijzigingen op, leest gegevens en stelt de gedelegeerde op de hoogte van updates. Bij een schrijfconflict biedt NSFileVersion een lijst met beschikbare versies — de ontwikkelaar kan de nieuwste kiezen of de gebruiker opties voor conflictoplossing tonen. Het configureren van Ubiquity Container in de Capabilities van het project is verplicht voor iCloud Drive. NSFileCoordinator en NSFilePresenter voorkomen dataraces tijdens gelijktijdige toegang vanuit meerdere threads of apparaten.

Gegevensback-up en herstel

iOS neemt automatisch de Documents-directory op in iCloud Backup. Android werkt met Auto Backup for Apps — het systeem slaat gegevens van getFilesDir(), SharedPreferences en SQLite-databases op in Google Drive. Cache en externe bestanden worden niet opgenomen in back-ups. Beide platforms maken het mogelijk uitzonderingen te configureren: op iOS via NSURLIsExcludedFromBackupKey, op Android via XML-configuratie van back-upregels. Versleuteling van bestanden met persoonlijke gegevens is verplicht — gebruik op iOS NSDataWritingFileProtectionComplete, gebruik op Android EncryptedFile uit de bibliotheek security-crypto.

ParameteriOSAndroid
Standaard back-upDocuments en LibrarygetFilesDir(), SharedPreferences, DB
BestandsuitzonderingisExcludedFromBackupKeyXML-back-upregels (fullBackupContent)
VersleutelingNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
CloudsyncUIDocument + iCloudGoogle Drive API + SAF
Automatisch hersteliCloud Restore na installatieAuto Backup bij herinstallatie

Veelgestelde vragen

Wat is Sandbox op iOS?

Sandbox is een geïsoleerde omgeving voor elke app op iOS. De app heeft geen toegang tot bestanden van andere apps zonder systeemkiezers zoals UIDocumentPickerViewController.

Wat is Scoped Storage op Android?

Scoped Storage is een model met beperkte toegang tot het bestandssysteem op Android 10+. De app leest direct alleen eigen bestanden, gebruikt MediaStore API voor media en Storage Access Framework voor documenten.

Hoe selecteer ik een bestand op iOS?

Gebruik UIDocumentPickerViewController — de systeemkiezer voor het selecteren van documenten uit Files App of iCloud Drive. Na selectie ontvangt u een security-scoped URL met tijdelijke toegang.

Hoe krijg ik toegang tot bestanden op Android 11+?

Gebruik voor mediabestanden de MediaStore API via ContentResolver met specificatie van het MIME-type. Gebruik voor willekeurige documenten Storage Access Framework met Intent ACTION_OPEN_DOCUMENT.

Wat is FileProvider op Android?

FileProvider is een subklasse van ContentProvider voor het veilig delen van bestanden tussen apps via tijdelijke content:// Uri met FLAG_GRANT_READ_URI_PERMISSION.

Samenvatting

  • Sandbox — het geïsoleerde bestandssysteem van iOS waar een app alleen toegang heeft tot zijn eigen directories Documents, Caches en Library.
  • FileManager — de primaire API voor bestandsbewerkingen op iOS. Lees grote bestanden via FileHandle in een achtergrondthread.
  • Scoped Storage — het bestandssysteemmodel op Android 10+ dat directe toegang tot externe opslag vervangt door MediaStore API en SAF.
  • MediaStore API — een systeem-ContentProvider voor het werken met mediabestanden op Android. Schrijven gebeurt via insert() met ContentValues.
  • Storage Access Framework — een universeel documentselectiemechanisme op Android via ACTION_OPEN_DOCUMENT en ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — de iOS-systeemkiezer die Files App en iCloud Drive opent. Werkt met security-scoped URL's.
  • FileProvider — een mechanisme voor veilig bestanden delen tussen Android-apps via tijdelijke content:// Uri en runtime-machtigingen.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project