FileManager — wat is het, werken met het iOS-bestandssysteem

Auteur: IT Sectr Gepubliceerd: 2026-07-09 Leestijd: 9 min

FileManager — is een klasse uit het Foundation-framework die een interface biedt voor het werken met het bestandssysteem van iOS, macOS en andere Apple-platforms. Het maakt het mogelijk om bestanden en mappen te maken, lezen, verplaatsen en verwijderen, en om metadata en toegangsrechten te beheren. In iOS zijn alle FileManager-bewerkingen beperkt tot de Sandbox van de app. Volgens Apple Developer Documentation (2026) is FileManager thread-safe en kan het vanuit achtergrondthreads worden gebruikt, maar alle bestandssysteembewerkingen moeten worden uitgevoerd met inachtneming van de sandbox en toegangsrechten van Security-Scoped Bookmarks.

Belangrijkste punten

  • FileManager — de belangrijkste Foundation-klasse voor bestandssysteembewerkingen: lezen, schrijven, verplaatsen, verwijderen van bestanden.
  • Sandbox beperkt de toegang van FileManager tot alleen de app-mappen — Documents, Library, tmp en App Group.
  • URL-based API (fileManager.urls) heeft de voorkeur boven String-based (NSHomeDirectory) voor moderne apps.
  • FileManagerDelegate maakt het mogelijk om bestandsbewerkingen te volgen en te controleren via shouldMoveItemAt en shouldRemoveItemAt.
  • iCloud Drive is toegankelijk via FileManager met ingeschakelde ubiquityContainer en bijbehorende entitlements.

Wat is FileManager

FileManager — een singleton-klasse uit het Foundation-framework die een uniforme API biedt voor interactie met het bestandssysteem op alle Apple-platforms. Het is toegankelijk via FileManager.default of door een instantie met een aangepaste delegate te maken.

De belangrijkste mogelijkheden van de klasse omvatten: controleren of een bestand bestaat (fileExists), mappen maken (createDirectory), kopiëren en verplaatsen (copyItem, moveItem), verwijderen (removeItem), attributen ophalen (attributesOfItem) en mapinhoud (contentsOfDirectory). FileManager is nauw verbonden met NSData, String en JSONEncoder/Decoder voor het serialiseren van gegevens.

FileManager is thread-safe: Apple garandeert de veiligheid van het aanroepen van methoden vanuit verschillende threads. Bestandssysteembewerkingen kunnen echter traag zijn bij grote bestanden, dus Apple raadt aan ze op een achtergrondwachtrij (DispatchQueue.global) uit te voeren en FileManagerDelegate-methoden aan te roepen om over de voortgang te informeren.

swift
let fileManager = FileManager.default
let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first!

let fileURL = documentsURL.appendingPathComponent("data.plist")

if fileManager.fileExists(atPath: fileURL.path) {
    print("File exists at \(fileURL.path)")
}

Belangrijkste mappen van iOS-app

Elke iOS-app heeft drie hoofdmap die toegankelijk zijn via FileManager binnen de Sandbox: Documents, Library en tmp. Elk heeft zijn eigen doel en back-upregels, waarvan naleving essentieel is voor het doorstaan van de App Store-beoordeling.

Documents — voor gebruikersgegevens die tussen starts moeten worden bewaard en naar iCloud moeten worden geback-upt. Library — voor app-bestanden: caches (Caches), instellingen (Preferences), databases (Application Support). tmp — voor tijdelijke bestanden die op elk moment door het systeem kunnen worden verwijderd tussen app-starts.

MapFileManager URLBack-upGebruik
Documents.documentDirectoryJaGebruikersgegevens, bestanden, export
Library/Caches.cachesDirectoryNeeAfbeeldingscaches, tijdelijke gegevens
Library/Preferences.libraryDirectory + "/Preferences"JaUserDefaults, app-instellingen
Library/Application Support.applicationSupportDirectoryJaDatabases, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)NeeTijdelijke sessiebestanden

Apple-regel: als een bestand van internet kan worden hersteld of opnieuw kan worden aangemaakt — moet het in Caches worden opgeslagen (zonder back-up). Als een bestand gebruikersgegevens bevat — Documents (met back-up). Onjuiste plaatsing van bestanden is een van de veelvoorkomende redenen voor afwijzing van de app, omdat Apple de naleving van de Storage & iCloud Backup Guidelines controleert.

Bestanden lezen en schrijven

FileManager biedt zelf geen methoden voor het lezen van bestandsinhoud — hiervoor worden NSData(contentsOf), String(contentsOf) of FileHandle-methoden gebruikt. FileManager is verantwoordelijk voor het beheren van bestanden: controleren op bestaan, verplaatsen, kopiëren, verwijderen.

Voor het schrijven van gegevens wordt de methode createFile(atPath:contents:attributes:) of hoogwaardige API's gebruikt — data.write(to:), JSONEncoder.encode en PropertyListEncoder. FileManager biedt ook FileHandle voor het streamen van grote bestanden, die niet het hele bestand in het geheugen laadt.

swift
struct UserSettings: Codable {
    let username: String
    let isDarkMode: Bool
    let fontSize: Int
}

let settings = UserSettings(
    username: "developer",
    isDarkMode: true,
    fontSize: 16
)

// JSON naar Documents schrijven
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(settings)
let url = documentsURL.appendingPathComponent("settings.json")
try data.write(to: url, options: .atomic)

// JSON lezen
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Gebruik bij het schrijven options: .atomic — dit garandeert dat het bestand niet beschadigd raakt bij een schrijffout: gegevens worden eerst naar een tijdelijk bestand geschreven en vervolgens atomair naar het doelpad verplaatst. Gebruik voor het lezen van grote bestanden FileHandle met .readingMode en lees gegevens in delen, terwijl u het geheugengebruik controleert.

Mappen beheren

FileManager biedt methoden voor volledig mapbeheer: createDirectory (aanmaken van alle tussenliggende mappen via withIntermediateDirectories), contentsOfDirectory (lijst met bestanden ophalen), enumeratorAt (recursieve doorloop) en subpathsOfDirectory (alle paden binnen een map).

De methode enumeratorAt retourneert een DirectoryEnumerator waarmee grote mappen efficiënt kunnen worden doorlopen zonder de hele inhoud in het geheugen te laden. Het ondersteunt filteren via skipDescendants en biedt attributen van elk element zonder extra query op het bestandssysteem.

swift
// Recursieve mappendoorloop
if let enumerator = fileManager.enumerator(
    at: documentsURL,
    includingPropertiesForKeys: [.fileSizeKey, .isDirectoryKey]
) {
    for case let fileURL as URL in enumerator {
        let attrs = try fileURL.resourceValues(
            for: [.fileSizeKey, .isDirectoryKey]
        )
        if attrs.isDirectory == false {
            let size = attrs.fileSize ?? 0
            print("File: \(fileURL.lastPathComponent), Size: \(size) bytes")
        }
    }
}

Gebruik removeItem(at:) om een map te verwijderen. Let op: het verwijderen van een map in iOS is onomkeerbaar — bestanden belanden niet in de prullenbak, zoals op macOS. Zorg ervoor dat u geen bestanden uit deze map meer gebruikt voordat u deze verwijdert, en voer de bewerking uit op een achtergrondthread, omdat het verwijderen van veel bestanden de gebruikersinterface kan blokkeren.

FileManager en iCloud

FileManager integreert met iCloud Drive via de methode URLForUbiquityContainerIdentifier, die de URL van de iCloud-map voor de app retourneert. Voor werking is het nodig om iCloud capability in het project in te schakelen en de bijbehorende entitlement toe te voegen.

iCloud-bestanden worden automatisch gesynchroniseerd, maar FileManager biedt methoden voor handmatige controle: startDownloadingUbiquitousItem start geforceerd met downloaden, evictUbiquitousItem verwijdert de lokale kopie, en urlOfItem(at:) retourneert de lokale URL voor het iCloud-bestand. NSMetadataQuery wordt gebruikt om bestanden in iCloud te zoeken.

Kritieke beperking: iCloud Drive wordt niet ondersteund voor bestanden in de Documents-map — alleen voor bestanden in ubiquityContainer. Probeer Documents niet te synchroniseren via iCloud; gebruik hiervoor NSUbiquitousKeyValueStore voor kleine hoeveelheden gegevens of Core Data met CloudKit voor complexe structuren.

Prestaties van FileManager

Bewerkingen met FileManager kunnen kostbaar zijn, vooral op apparaten met traag flash-geheugen. De belangrijkste aanbevelingen van Apple omvatten het uitvoeren van alle bestandsbewerkingen op achtergrondwachtrijen, het minimaliseren van het aantal fileExistsAtPath-aanroepen en het gebruik van caching van resultaten.

De methode fileExists voert een systeemaanroep stat() uit, die relatief traag is. Als u controleert of een bestand bestaat voordat u het leest, kunt u beter direct proberen het te lezen en de fout af te handelen — dit voert dezelfde stat uit, maar elimineert een dubbele systeemaanroep. Gebruik voor massa-controles enumeratorAt met resourceValues.

Voor het optimaliseren van werken met grote hoeveelheden gegevens:

  • Gebruik FileHandle voor het streamen van grote bestanden
  • Cache de resultaten van fileManager.urls voor veelgebruikte mappen
  • Voer batchbewerkingen uit op een granulaire wachtrij, vermijd het blokkeren van de main thread
  • Gebruik CoordinatedFileManager voor veilige toegang vanuit meerdere threads

Apple Instruments biedt het sjabloon File Activity voor het profileren van bestandsbewerkingen. Gebruik het om knelpunten te identificeren — bijvoorbeeld frequente fileExists-aanroepen in een lus of schrijfbewerkingen op de main thread. De meest voorkomende prestatieproblemen hebben te maken met synchroon schrijven van grote bestanden bij het minimaliseren van de app.

Veelgestelde vragen

Wat is FileManager in iOS?

FileManager — een klasse van het Foundation-framework voor het werken met het Apple-bestandssysteem. Biedt een API voor het maken, lezen, verplaatsen en verwijderen van bestanden en mappen. In iOS is het werk ervan beperkt tot de Sandbox van de app, met uitzondering van Security-Scoped Bookmarks.

Welke mappen zijn toegankelijk via FileManager in iOS?

Documents — gebruikersgegevens met back-up in iCloud. Library/Caches — caches zonder back-up. Library/Application Support — databases. tmp — tijdelijke bestanden. App Group Container — voor gedeelde gegevens tussen apps van dezelfde groep.

Hoe krijg ik het pad naar Documents via FileManager?

Roep FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first aan. De methode retourneert een URL met het absolute pad naar de Documents-map in de Sandbox van de huidige app. Gebruik fileExists(atPath:) om het bestaan te controleren.

Kan ik via FileManager bestanden van andere apps openen?

Nee, de iOS-Sandbox verbiedt toegang tot het bestandssysteem van andere apps. Uitzonderingen: App Groups (gedeelde map voor apps van dezelfde ontwikkelaar) en Security-Scoped Bookmarks (toegang tot bestanden via UIDocumentPicker en iCloud Drive).

Hoe schrijf ik veilig bestanden via FileManager?

Gebruik de optie .atomic bij het schrijven — gegevens worden eerst naar een tijdelijk bestand geschreven en vervolgens atomair naar het doelpad verplaatst. Dit voorkomt beschadiging van het bestand bij een schrijffout. Gebruik voor grote gegevens FileHandle met schrijven in delen van 1-2 MB.

Samenvatting

  • FileManager — de centrale Foundation-klasse voor alle bestandssysteembewerkingen in iOS: van bestaan controleren tot recursieve mappendoorloop.
  • Documents, Library, tmp — drie hoofdmap van de app met verschillende back-up- en levenscyclusregels.
  • URL-based API heeft de voorkeur boven String-based paden voor compatibiliteit met Sandbox en Security-Scoped Bookmarks.
  • FileHandle en streamverwerking — de enige manier om met grote bestanden te werken zonder geheugenoverloop.
  • FileManagerDelegate maakt het mogelijk om verplaatsings-, kopieer- en verwijderingsbewerkingen te controleren via should-methoden.
  • iCloud-integratie is beschikbaar via ubiquityContainer en NSMetadataQuery voor het werken met cloudbestanden.
  • Prestaties van bestandsbewerkingen zijn cruciaal — voer ze uit op achtergrondwachtrijen en minimaliseer fileExists-aanroepen.

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

Lees ook