FileManager — was ist das, Arbeit mit dem iOS-Dateisystem

Autor: IT Sectr Veröffentlicht: 2026-07-09 Lesezeit: 9 Min.

FileManager ist eine Klasse aus dem Foundation-Framework, die eine Schnittstelle für die Arbeit mit dem Dateisystem unter iOS, macOS und anderen Apple-Plattformen bereitstellt. Sie ermöglicht das Erstellen, Lesen, Verschieben und Löschen von Dateien und Verzeichnissen sowie die Verwaltung von Metadaten und Zugriffsberechtigungen. In iOS sind alle FileManager-Operationen durch den App-Sandbox eingeschränkt. Laut Apple Developer Documentation (2026) ist FileManager threadsicher und kann aus Hintergrundthreads verwendet werden, aber alle Dateisystemoperationen müssen unter Berücksichtigung der Sandbox und der Security-Scoped Bookmarks Zugriffsberechtigungen durchgeführt werden.

Wichtigste Punkte

  • FileManager ist die Hauptklasse von Foundation für Dateisystemoperationen: Lesen, Schreiben, Verschieben, Löschen von Dateien.
  • Sandbox schränkt den FileManager-Zugriff auf App-Verzeichnisse ein — Documents, Library, tmp und App Group.
  • URL-basierte API (fileManager.urls) ist String-basierten (NSHomeDirectory) für moderne Anwendungen vorzuziehen.
  • FileManagerDelegate ermöglicht die Verfolgung und Steuerung von Dateioperationen durch shouldMoveItemAt und shouldRemoveItemAt.
  • iCloud Drive ist über FileManager verfügbar, wenn ubiquityContainer aktiviert und entsprechende Berechtigungen gesetzt sind.

Was ist FileManager

FileManager ist eine Singleton-Klasse aus dem Foundation-Framework, die eine einheitliche API für die Interaktion mit dem Dateisystem auf allen Apple-Plattformen bereitstellt. Sie ist über FileManager.default oder durch Erstellen einer Instanz mit einem benutzerdefinierten Delegaten verfügbar.

Zu den Hauptfunktionen der Klasse gehören: Überprüfen der Dateiexistenz (fileExists), Erstellen von Verzeichnissen (createDirectory), Kopieren und Verschieben (copyItem, moveItem), Löschen (removeItem), Abrufen von Attributen (attributesOfItem) und Verzeichnisinhalten (contentsOfDirectory). FileManager ist eng mit NSData, String und JSONEncoder/Decoder für die Datenserialisierung verbunden.

FileManager ist threadsicher: Apple garantiert sichere Methodenaufrufe aus verschiedenen Threads. Allerdings können Dateisystemoperationen bei großen Dateien langsam sein, daher empfiehlt Apple, sie in einer Hintergrundwarteschlange (DispatchQueue.global) auszuführen und FileManagerDelegate-Methoden aufzurufen, um den Fortschritt zu melden.

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

Hauptverzeichnisse von iOS-Apps

Jede iOS-App hat drei Hauptverzeichnisse, die über FileManager innerhalb des Sandbox zugänglich sind: Documents, Library und tmp. Jedes hat seinen eigenen Zweck und Sicherungsregeln, die für die App Store-Prüfung entscheidend sind.

Documents — für Benutzerdaten, die zwischen Starts erhalten bleiben und in iCloud gesichert werden sollen. Library — für App-Dateien: Caches, Einstellungen (Preferences), Datenbanken (Application Support). tmp — für temporäre Dateien, die vom System zwischen App-Starts jederzeit gelöscht werden können.

VerzeichnisFileManager URLSicherungVerwendung
Documents.documentDirectoryJaBenutzerdaten, Dateien, Exporte
Library/Caches.cachesDirectoryNeinBildercaches, temporäre Daten
Library/Preferences.libraryDirectory + "Preferences"JaUserDefaults, App-Einstellungen
Library/Application Support.applicationSupportDirectoryJaDatenbanken, CoreData, Realm
tmp.tmpDirectory (NSTemporaryDirectory)NeinTemporäre Sitzungsdateien

Apple-Regel: Wenn eine Datei aus dem Internet wiederhergestellt oder neu erstellt werden kann — soll sie in Caches gespeichert werden (ohne Sicherung). Wenn eine Datei Benutzerdaten enthält — Documents (mit Sicherung). Falsche Dateiplatzierung ist ein häufiger Grund für App-Ablehnungen, da Apple die Einhaltung der Storage- und iCloud-Backup-Richtlinien prüft.

Dateien lesen und schreiben

FileManager selbst bietet keine Methoden zum Lesen von Dateiinhalten — dafür verwenden Sie NSData(contentsOf), String(contentsOf) oder FileHandle-Methoden. FileManager ist für die Verwaltung von Dateien zuständig: Existenzprüfung, Verschieben, Kopieren, Löschen.

Zum Schreiben von Daten verwenden Sie die createFile(atPath:contents:attributes:)-Methode oder High-Level-APIs — data.write(to:), JSONEncoder.encode und PropertyListEncoder. FileManager bietet auch FileHandle für das Streaming-Lesen und -Schreiben großer Dateien, das nicht die gesamte Datei in den Speicher lädt.

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

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

// JSON in Documents schreiben
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 lesen
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
    .decode(UserSettings.self, from: loadedData)

Verwenden Sie beim Schreiben options: .atomic — dies stellt sicher, dass die Datei bei einem Schreibfehler nicht beschädigt wird: Daten werden zuerst in eine temporäre Datei gespeichert und dann atomar zum Zielpfad verschoben. Verwenden Sie zum Lesen großer Dateien FileHandle mit .readingMode und lesen Sie Daten in Blöcken, wobei Sie den Speicherverbrauch kontrollieren.

Verwaltung von Verzeichnissen

FileManager stellt Methoden für die vollständige Verzeichnisverwaltung bereit: createDirectory (Erstellen aller Zwischenordner über withIntermediateDirectories), contentsOfDirectory (Abrufen einer Dateiliste), enumeratorAt (rekursive Durchlauf) und subpathsOfDirectory (alle Pfade innerhalb eines Verzeichnisses).

Die enumeratorAt-Methode gibt einen DirectoryEnumerator zurück, der das effiziente Durchlaufen großer Verzeichnisse ermöglicht, ohne alle Inhalte in den Speicher zu laden. Es unterstützt die Filterung über skipDescendants und liefert Attribute jedes Elements ohne zusätzliche Dateisystemabfrage.

swift
// Rekursive Verzeichnisdurchlauf
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")
        }
    }
}

Zum Löschen eines Verzeichnisses verwenden Sie removeItem(at:). Warnung: Das Löschen eines Verzeichnisses in iOS ist irreversibel — Dateien landen nicht wie unter macOS im Papierkorb. Stellen Sie vor dem Löschen sicher, dass Sie die Dateien aus diesem Verzeichnis nicht mehr benötigen, und führen Sie den Vorgang in einem Hintergrundthread aus, da das Löschen vieler Dateien die UI blockieren kann.

FileManager und iCloud

FileManager integriert sich mit iCloud Drive über die Methode URLForUbiquityContainerIdentifier, die die URL des iCloud-Verzeichnisses für die App zurückgibt. Dazu muss die iCloud-Funktion im Projekt aktiviert und die entsprechende Berechtigung hinzugefügt werden.

iCloud-Dateien werden automatisch synchronisiert, aber FileManager bietet Methoden zur manuellen Steuerung: startDownloadingUbiquitousItem erzwingt den Download, evictUbiquitousItem entfernt die lokale Kopie und urlOfItem(at:) gibt die lokale URL für eine iCloud-Datei zurück. NSMetadataQuery wird zum Durchsuchen von Dateien in iCloud verwendet.

Kritische Einschränkung: iCloud Drive wird für Dateien im Documents-Verzeichnis nicht unterstützt — nur für Dateien in ubiquityContainer. Versuchen Sie nicht, Documents über iCloud zu synchronisieren; verwenden Sie dafür NSUbiquitousKeyValueStore für kleine Datenmengen oder Core Data mit CloudKit für komplexe Strukturen.

FileManager-Leistung

Operationen mit FileManager können teuer sein, insbesondere auf Geräten mit langsamem Flash-Speicher. Zu den wichtigsten Empfehlungen von Apple gehören die Ausführung aller Dateioperationen in Hintergrundwarteschlangen, die Minimierung von fileExistsAtPath-Aufrufen und das Zwischenspeichern von Ergebnissen.

Die fileExists-Methode führt einen stat()-Systemaufruf durch, der relativ langsam ist. Wenn Sie die Existenz einer Datei vor dem Lesen überprüfen, versuchen Sie besser gleich, sie zu lesen und behandeln Sie den Fehler — dies führt denselben stat aus, vermeidet aber einen doppelten Systemaufruf. Verwenden Sie für Massenprüfungen enumeratorAt mit resourceValues.

Zur Optimierung der Arbeit mit großen Datenmengen:

  • Verwenden Sie FileHandle für die Streaming-Verarbeitung großer Dateien
  • Zwischenspeichern Sie fileManager.urls-Ergebnisse für häufig verwendete Verzeichnisse
  • Führen Sie Batch-Operationen in einer granularen Warteschlange durch, um die Blockierung des Hauptthreads zu vermeiden
  • Verwenden Sie CoordinatedFileManager für sicheren Zugriff aus mehreren Threads

Apple Instruments bietet die Vorlage File Activity zum Profiling von Dateioperationen. Verwenden Sie sie, um Engpässe zu identifizieren — z.B. häufige fileExists-Aufrufe in einer Schleife oder Schreiboperationen im Hauptthread. Die häufigsten Leistungsprobleme hängen mit dem synchronen Schreiben großer Dateien beim Beenden der App zusammen.

Häufig gestellte Fragen

Was ist FileManager in iOS?

FileManager ist eine Klasse des Foundation-Frameworks für die Arbeit mit dem Apple-Dateisystem. Sie bietet eine API zum Erstellen, Lesen, Verschieben und Löschen von Dateien und Verzeichnissen. In iOS ist ihre Funktionalität auf den App-Sandbox beschränkt, mit Ausnahme von Security-Scoped Bookmarks.

Welche Verzeichnisse sind über FileManager in iOS zugänglich?

Documents — Benutzerdaten mit iCloud-Backup. Library/Caches — Caches ohne Backup. Library/Application Support — Datenbanken. tmp — Temporäre Dateien. App Group Container — für gemeinsam genutzte Daten zwischen Apps derselben Gruppe.

Wie erhalte ich den Pfad zu Documents über FileManager?

Rufen Sie FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first auf. Die Methode gibt eine URL mit dem absoluten Pfad zum Documents-Verzeichnis im Sandbox der aktuellen App zurück. Verwenden Sie fileExists(atPath:) zur Existenzprüfung.

Kann ich über FileManager auf Dateien anderer Apps zugreifen?

Nein, der iOS-Sandbox verhindert den Zugriff auf das Dateisystem anderer Apps. Ausnahmen: App Groups (gemeinsames Verzeichnis für Apps desselben Entwicklers) und Security-Scoped Bookmarks (Dateizugriff über UIDocumentPicker und iCloud Drive).

Wie schreibe ich Dateien sicher über FileManager?

Verwenden Sie die Option .atomic beim Schreiben — Daten werden zuerst in eine temporäre Datei gespeichert und dann atomar zum Zielpfad verschoben. Dies verhindert Dateibeschädigung bei Schreibfehlern. Verwenden Sie für große Datenmengen FileHandle mit blockweisem Schreiben von 1-2 MB.

Zusammenfassung

  • FileManager ist die zentrale Foundation-Klasse für alle Dateisystemoperationen in iOS: von Existenzprüfungen bis zur rekursiven Verzeichnisdurchlauf.
  • Documents, Library, tmp — die drei Hauptverzeichnisse der App mit unterschiedlichen Backup-Regeln und Lebenszyklen.
  • URL-basierte API ist String-basierten Pfaden für die Kompatibilität mit Sandbox und Security-Scoped Bookmarks vorzuziehen.
  • FileHandle und Streaming-Verarbeitung sind der einzige Weg, um große Dateien ohne Speicherüberlauf zu verarbeiten.
  • FileManagerDelegate ermöglicht die Steuerung von Verschiebungs-, Kopier- und Löschoperationen durch should-Methoden.
  • iCloud-Integration ist über ubiquityContainer und NSMetadataQuery für die Arbeit mit Cloud-Dateien verfügbar.
  • Leistung von Dateioperationen ist entscheidend — führen Sie sie in Hintergrundwarteschlangen aus und minimieren Sie fileExists-Aufrufe.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch