Sandbox ist eine isolierte Laufzeitumgebung für iOS-Apps, die den Zugriff auf das Dateisystem, das Netzwerk, Hardwareressourcen und Daten anderer Apps einschränkt. Jede App erhält bei der Installation ihre eigene Sandbox-Umgebung, und alle ihre Dateioperationen werden automatisch in diesen isolierten Bereich umgeleitet. Laut Apple App Sandbox Design Guide (2026) basiert die Sandbox-Architektur auf drei Schutzebenen: Isolierung des Dateisystems, Kontrolle der prozessübergreifenden Kommunikation und Trennung der Hardwareressourcen mit ausdrücklicher Berechtigungsanfrage über Entitlements.
Das Wichtigste
Sandbox ist ein System der zwingenden Zugriffskontrolle (Mandatory Access Control), das auf Kernelebene von iOS implementiert ist (XNU — Kernel-Erweiterung Sandbox.kext). Jede App erhält beim Start ein eindeutiges UUID-Sandbox-Profil, das festlegt, auf welche Ressourcen die App zugreifen darf.
Die Sandbox-Architektur umfasst drei Schlüsselkomponenten: File System Isolation (jede App sieht nur ihren eigenen Container), Network Access Control (Anfragen an das lokale Netzwerk können eingeschränkt werden) und Inter-Process Communication (Verbot direkter IPC mit anderen Apps). Apple führte die Sandbox in iOS 2.0 ein und hat die Einschränkungen seither in jeder Hauptversion deutlich verschärft.
Die Sandbox ist nicht optional — alle Apps aus dem App Store laufen in der Sandbox. Ein Entwickler kann die Sandbox nicht deaktivieren oder ihre Einschränkungen umgehen. Der Versuch, auf eine verbotene Ressource zuzugreifen, endet mit dem Fehlercode EPERM (Operation not permitted) und einem Eintrag im Systemprotokoll.
import Foundation
// Versuch, auf die Datei einer anderen App zuzugreifen — gibt nil zurück
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — die Sandbox blockiert den Zugriff
// Korrekter Zugriff — innerhalb der eigenen Sandbox
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
let myFileURL = documentsURL.appendingPathComponent("notes.txt")
try "Hello, Sandbox!".write(to: myFileURL, atomically: true, encoding: .utf8)
Die Sandbox jeder App in iOS enthält mehrere vordefinierte Verzeichnisse, die über die Foundation-API zugänglich sind. Der Ort auf dem physischen Medium ist /var/mobile/Containers/Data/Application/{UUID}/, aber Entwickler sollten diesen Pfad nicht direkt verwenden: Er ändert sich bei jedem Neustart des Geräts in verschiedenen iOS-Versionen.
Die wichtigsten Sandbox-Verzeichnisse: Bundle (.app — schreibgeschützt, enthält den ausführbaren Code und die Ressourcen), Documents (Benutzerdaten, werden in iCloud gesichert), Library (Caches, Preferences, Application Support — mit unterschiedlichen Backup-Regeln), tmp (temporäre Dateien, die vom System bei Platzmangel gelöscht werden). Jedes Verzeichnis hat seinen eigenen Lebenszyklus und seine eigene Speicherrichtlinie.
Den physischen Sandbox-Pfad erhält man über NSHomeDirectory() oder FileManager.url(for: .documentDirectory). Apple empfiehlt die URL-basierte API, da sie die interne Struktur des Dateisystems abstrahiert und bei Änderungen der macOS-Sandbox auf dem Desktop stabil bleibt.
| Sandbox-Verzeichnis | Abruf über FileManager | Berechtigungen |
|---|---|---|
| Documents | .documentDirectory | Lesen und Schreiben |
| Bundle | Bundle.main.bundlePath | Nur lesen |
| Library | .libraryDirectory | Lesen und Schreiben |
| tmp | NSTemporaryDirectory() | Lesen und Schreiben |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Lesen und Schreiben |
Der direkte Zugriff auf das Dateisystem anderer Apps ist in iOS vollständig blockiert. Selbst wenn ein Entwickler die Container-UUID einer anderen App kennt, gibt die Sandbox auf Kernelebene beim Versuch zu lesen oder zu schreiben einen Fehler zurück. Dies ist ein grundlegender Unterschied zwischen iOS und macOS, wo die Sandbox flexibler ist.
Apple bietet drei legitime Mechanismen für den Datenaustausch zwischen Apps: UIDocumentPickerViewController (der Benutzer wählt eine Datei über die Systemoberfläche aus, und die App erhält eine Security-Scoped-URL), Share Extension (eine Erweiterung zum Übergeben von Daten an eine andere App) und App Groups (ein gemeinsames Verzeichnis für Apps desselben Entwicklers).
UIDocumentPicker ist der einzige Weg, ohne vorherige Einrichtung auf Dateien anderer Apps zuzugreifen. Der Benutzer wählt über den standardmäßigen System-Picker ausdrücklich eine Datei aus, und iOS stellt der App eine temporäre Security-Scoped-URL bereit. Der Zugriff dauert bis zum Schließen des Pickers oder bis zum Aufruf von stopAccessingSecurityScopedResource.
Ein Security-Scoped Bookmark ist ein iOS-Mechanismus, mit dem der Zugriff auf eine Datei außerhalb der Sandbox zwischen App-Starts erhalten bleibt. Wenn der Benutzer eine Datei über UIDocumentPicker auswählt, kann die App aus der Security-Scoped-URL ein Bookmark erstellen und in UserDefaults oder einem anderen Speicher ablegen.
Beim nächsten Start stellt die App den Zugriff über URLByResolvingBookmarkData wieder her, das eine Security-Scoped-URL zurückgibt. Dann muss vor dem Lesen der Datei startAccessingSecurityScopedResource und nach Abschluss stopAccessingSecurityScopedResource aufgerufen werden. Die Bilanz der Aufrufe ist zwingend — jeder start muss ein entsprechendes stop haben, sonst erschöpft das System das Limit der Security-Scoped-Ressourcen.
// Security-Scoped Bookmark erstellen
func createBookmark(for url: URL) -> Data? {
return try? url.bookmarkData(
options: .minimalBookmark,
includingResourceValuesForKeys: nil,
relativeTo: nil
)
}
// Bookmark-Daten in URL auflösen
func resolveBookmark(data: Data) -> URL? {
var isStale = false
let url = try? URL.byResolvingBookmarkData(
data,
options: .withoutUI,
relativeTo: nil,
bookmarkDataIsStale: &isStale
)
if isStale {
// Bookmark ist veraltet, neues muss erstellt werden
}
return url
}
Wichtige Einschränkung: Security-Scoped Bookmarks funktionieren nicht für Dateien innerhalb der eigenen Sandbox — nur für Dateien, die über UIDocumentPicker oder iCloud Drive bezogen wurden. Ein Bookmark enthält Security-Scoped-Daten, anhand derer das System erkennen kann, welche App für welche Datei Zugriff anfordert. Wenn das Zertifikat der App abläuft oder sich ändert, wird das Bookmark ungültig.
App Groups ist ein iOS-Mechanismus, der mehreren Apps (und ihren Erweiterungen) desselben Entwicklers erlaubt, ein gemeinsames Sandbox-Verzeichnis zu nutzen. Zum Aktivieren muss man in Xcode die Capability App Groups hinzufügen und für alle Ziel-Apps dieselbe Gruppenkennung angeben.
Das gemeinsame App-Groups-Verzeichnis liegt außerhalb der Sandbox jeder einzelnen App, aber alle Apps der Gruppe haben vollen Lese- und Schreibzugriff darauf. Dadurch können Dateien, Datenbanken (Core Data mit der Store-URL in der App Group) und UserDefaults (über initWithSuiteName) zwischen der Haupt-App, dem Today Widget, der Watch Extension und der Share Extension ausgetauscht werden.
Apple empfiehlt App Groups für die Zustandssynchronisierung zwischen einer App und ihren Erweiterungen. Beispielsweise kann das Today Widget Daten aus dem gemeinsamen App-Groups-Verzeichnis lesen, in das die Haupt-App aktuelle Daten schreibt. Dabei bleibt jede App dennoch von anderen App Groups isoliert — nur Apps mit derselben Gruppenkennung haben Zugriff.
Die Sandbox in iOS erlegt eine Reihe strenger Einschränkungen auf, die bei der Entwicklung berücksichtigt werden müssen. Die wichtigsten: Verbot von dynamischem Code (Laden und Ausführen von Code außerhalb der Sandbox), Verbot des direkten Zugriffs auf Adressbuch, Kalender und Fotos ohne Zustimmung des Benutzers (Privacy-Framework) und Einschränkungen beim Erstellen von Kindprozessen (fork und exec sind verboten).
Netzwerk: Apps können sich über TCP/UDP mit beliebigen Remote-Servern verbinden, aber der Zugriff auf localhost ist eingeschränkt — andere Apps können sich nicht mit einem Server innerhalb Ihrer App verbinden (außer bei Debug-Builds). Multicast- und Broadcast-UDP sind ebenfalls für App-Store-Apps blockiert.
Hardwareressourcen: Der Zugriff auf Kamera, Mikrofon, Geolokalisierung, Bluetooth und HealthKit erfordert die ausdrückliche Zustimmung des Benutzers über den Systemdialog. Für jeden Ressourcentyp verwendet iOS ein separates Entitlement und einen Info.plist-Schlüssel mit Begründung (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Wird die Erlaubnis ohne Begründung in der Info.plist angefordert, beendet sich die App.
Häufig gestellte Fragen
Sandbox ist eine isolierte Laufzeitumgebung für iOS-Apps, die den Zugriff auf das Dateisystem, das Netzwerk und Daten anderer Apps einschränkt. Jede App hat einen eindeutigen Sandbox-Container, dessen Zugriff auf Kernelebene von iOS über Sandbox.kext kontrolliert wird.
Der App stehen zur Verfügung: Documents (Benutzerdaten), Library (Caches, Preferences, Application Support), tmp (temporäre Dateien) und Bundle (nur lesen). Das App-Groups-Verzeichnis steht Apps derselben Entwicklergruppe zur Verfügung.
Über UIDocumentPickerViewController — der Benutzer wählt eine Datei über die Systemoberfläche aus. iOS stellt eine Security-Scoped-URL bereit, die bis zum Aufruf von stopAccessingSecurityScopedResource gültig ist. Alternativ bietet sich eine Share Extension zum Übertragen von Daten zwischen Apps an.
Ein Security-Scoped Bookmark sind Daten, die den Zugriff auf eine Datei außerhalb der Sandbox zwischen App-Starts aufrechterhalten. Er wird aus einer Security-Scoped-URL (aus UIDocumentPicker) über bookmarkData erstellt. Beim nächsten Start wird das Bookmark über URLByResolvingBookmarkData wiederhergestellt.
Nein, für Apps aus dem App Store kann die Sandbox nicht deaktiviert werden. Auf Jailbreak-Geräten ist die Deaktivierung möglich, aber sie ist mit der Veröffentlichung im App Store nicht kompatibel. Entwickler können ohne Sandbox im Simulator testen, aber reale Geräte wenden die Sandbox immer an.
Zusammenfassung
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.
Lesen Sie auch