Sandbox — is een geïsoleerde uitvoeringsomgeving van een iOS-applicatie die de toegang tot het bestandssysteem, netwerk, hardwarebronnen en gegevens van andere applicaties beperkt. Elke applicatie krijgt bij installatie zijn eigen Sandbox-omgeving en al zijn bestandsbewerkingen worden automatisch naar dit geïsoleerde gebied omgeleid. Volgens de Apple App Sandbox Design Guide (2026) is de sandbox-architectuur gebaseerd op drie beschermingsniveaus: isolatie van het bestandssysteem, controle van inter-procescommunicatie en verdeling van hardwarebronnen met expliciete toestemmingsaanvraag via entitlements.
Belangrijkste punten
Sandbox — is een systeem van verplichte toegangscontrole (Mandatory Access Control), geïmplementeerd op het niveau van de iOS-kernel (XNU — kernel extension Sandbox.kext). Elke applicatie krijgt bij het opstarten een uniek UUID Sandbox-profiel dat bepaalt tot welke systeembronnen toegang is toegestaan.
De Sandbox-architectuur omvat drie belangrijke componenten: File System Isolation (elke applicatie ziet alleen zijn eigen container), Network Access Control (verzoeken aan het lokale netwerk kunnen worden beperkt) en Inter-Process Communication (verbod op directe IPC met andere applicaties). Apple introduceerde Sandbox in iOS 2.0 en heeft sindsdien de beperkingen in elke grote versie aanzienlijk aangescherpt.
Sandbox is niet optioneel — alle applicaties uit de App Store werken in een sandbox. De ontwikkelaar kan Sandbox niet uitschakelen of de beperkingen omzeilen. Een poging tot toegang tot een verboden bron eindigt met een foutmelding met code EPERM (Operation not permitted) en een vermelding in het systeemlogboek.
import Foundation
// Poging tot toegang tot bestand van andere applicatie — retourneert nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox blokkeert toegang
// Correcte toegang — binnen eigen 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)
De Sandbox van elke iOS-applicatie bevat verschillende vooraf gedefinieerde mappen, toegankelijk via de Foundation API. De locatie op de fysieke drager — /var/mobile/Containers/Data/Application/{UUID}/, maar ontwikkelaars moeten dit pad niet direct gebruiken: het verandert bij elke herstart van het apparaat in verschillende iOS-versies.
De belangrijkste Sandbox-mappen: Bundle (.app — alleen lezen, bevat uitvoerbare code en bronnen), Documents (gebruikersgegevens, worden geback-upt in iCloud), Library (Caches, Preferences, Application Support — met verschillende back-upregels), tmp (tijdelijke bestanden, worden door het systeem verwijderd bij ruimtegebrek). Elke map heeft zijn eigen levenscyclus en opslagbeleid.
Het fysieke pad naar Sandbox kan worden verkregen via NSHomeDirectory() of FileManager.url(for: .documentDirectory). Apple raadt aan om URL-based API te gebruiken, omdat het de interne structuur van het bestandssysteem abstraheert en stabiel blijft bij wijzigingen in de macOS Sandbox op de desktop.
| Sandbox-map | Verkrijgen via FileManager | Rechten |
|---|---|---|
| Documents | .documentDirectory | Lezen en schrijven |
| Bundle | Bundle.main.bundlePath | Alleen lezen |
| Library | .libraryDirectory | Lezen en schrijven |
| tmp | NSTemporaryDirectory() | Lezen en schrijven |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Lezen en schrijven |
Directe toegang tot het bestandssysteem van andere applicaties in iOS is volledig geblokkeerd. Zelfs als de ontwikkelaar de UUID van de container van een andere applicatie kent, zal Sandbox op kernel niveau een foutmelding geven bij een poging tot lezen of schrijven. Dit is het fundamentele verschil tussen iOS en macOS, waar Sandbox flexibeler is.
Apple biedt drie legitieme mechanismen voor gegevensuitwisseling tussen applicaties: UIDocumentPickerViewController (de gebruiker selecteert een bestand via de systeeminterface, de applicatie ontvangt een Security-Scoped URL), Share Extension (extensie voor het doorgeven van gegevens aan een andere applicatie) en App Groups (gedeelde map voor applicaties van dezelfde ontwikkelaar).
UIDocumentPicker — de enige manier om toegang te krijgen tot bestanden van andere applicaties zonder voorafgaande configuratie. De gebruiker selecteert expliciet een bestand via de standaard systeemkiezer en iOS biedt de applicatie een tijdelijke Security-Scoped URL. De toegang is geldig tot het sluiten van de kiezer of tot het aanroepen van stopAccessingSecurityScopedResource.
Security-Scoped Bookmark — is een iOS-mechanisme waarmee de toegang tot een bestand buiten de Sandbox tussen applicatiestarts kan worden behouden. Wanneer de gebruiker een bestand selecteert via UIDocumentPicker, kan de applicatie een bookmark maken van de Security-Scoped URL en deze opslaan in UserDefaults of een andere opslag.
Bij de volgende start herstelt de applicatie de toegang via URLByResolvingBookmarkData, die een Security-Scoped URL retourneert. Vervolgens moet startAccessingSecurityScopedResource worden aangeroepen voor het lezen van het bestand en stopAccessingSecurityScopedResource na het beëindigen van het werk. Balans van aanroepen is verplicht — elke start moet een bijbehorende stop hebben, anders raakt het systeem de limiet van Security-Scoped bronnen kwijt.
// Security-Scoped Bookmark aanmaken
func createBookmark(for url: URL) -> Data? {
return try? url.bookmarkData(
options: .minimalBookmark,
includingResourceValuesForKeys: nil,
relativeTo: nil
)
}
// Bookmarkgegevens naar URL omzetten
func resolveBookmark(data: Data) -> URL? {
var isStale = false
let url = try? URL.byResolvingBookmarkData(
data,
options: .withoutUI,
relativeTo: nil,
bookmarkDataIsStale: &isStale
)
if isStale {
// Bookmark is verouderd, moet nieuwe aanmaken
}
return url
}
Belangrijke beperking: Security-Scoped Bookmarks werken niet voor bestanden binnen de eigen Sandbox — alleen voor bestanden verkregen via UIDocumentPicker of iCloud Drive. Een bookmark bevat Security-Scoped gegevens waarmee het systeem kan identificeren welke applicatie en voor welk bestand toegang aanvraagt. Als het certificaat van de applicatie verloopt of verandert, wordt de bookmark ongeldig.
App Groups — een iOS-mechanisme waarmee meerdere applicaties (en hun extensies) van dezelfde ontwikkelaar een gedeelde Sandbox-map kunnen hebben. Om dit in te schakelen moet Capability App Groups in Xcode worden toegevoegd en dezelfde groepsidentificatie worden opgegeven voor alle doelapplicaties.
De gedeelde App Groups-map bevindt zich buiten de Sandbox van elke afzonderlijke applicatie, maar alle applicaties in de groep hebben er volledige toegang toe voor lezen en schrijven. Dit maakt het mogelijk om bestanden, databases (Core Data met Store URL in App Group) en UserDefaults (via initWithSuiteName) uit te wisselen tussen de hoofdapplicatie, Today Widget, Watch Extension en Share Extension.
Apple raadt aan om App Groups te gebruiken voor synchronisatie van de status tussen de applicatie en zijn extensies. Bijvoorbeeld, een Today Widget kan gegevens lezen uit de gedeelde App Group-map waarin de hoofdapplicatie actuele gegevens schrijft. Elke applicatie blijft echter geïsoleerd van andere App Groups — alleen applicaties met dezelfde groepsidentificatie hebben toegang.
Sandbox in iOS legt een aantal strikte beperkingen op waarmee rekening moet worden gehouden bij de ontwikkeling. De belangrijkste: verbod op dynamische code (laden en uitvoeren van code buiten de Sandbox), verbod op directe toegang tot het adresboek, de agenda en foto's zonder toestemming van de gebruiker (Privacy framework) en beperkingen op het maken van subprocessen (fork, exec zijn verboden).
Netwerk: applicaties kunnen via TCP/UDP verbinding maken met externe servers, maar toegang tot localhost is beperkt — andere applicaties kunnen geen verbinding maken met de server binnen uw applicatie (behalve debug-builds). Multicast en broadcast UDP worden ook geblokkeerd voor App Store-applicaties.
Hardwarebronnen: toegang tot de camera, microfoon, geolocatie, Bluetooth en HealthKit vereist expliciete toestemming van de gebruiker via een systeemdialoog. Voor elk type bron gebruikt iOS een aparte entitlement en Info.plist-sleutel met een beschrijving van de reden (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Een toestemmingsverzoek zonder redenbeschrijving in Info.plist leidt tot beëindiging van de applicatie.
Veelgestelde vragen
Sandbox — een geïsoleerde uitvoeringsomgeving van een iOS-applicatie die de toegang tot het bestandssysteem, netwerk en gegevens van andere applicaties beperkt. Elke applicatie heeft een unieke Sandbox-container waarvan de toegang wordt gecontroleerd op kernel niveau van iOS via Sandbox.kext.
De applicatie heeft toegang tot: Documents (gebruikersgegevens), Library (Caches, Preferences, Application Support), tmp (tijdelijke bestanden) en Bundle (alleen lezen). De App Group-map is beschikbaar voor applicaties van dezelfde ontwikkelaarsgroep.
Via UIDocumentPickerViewController — de gebruiker selecteert een bestand via de systeeminterface. iOS biedt een Security-Scoped URL die toegankelijk is tot het aanroepen van stopAccessingSecurityScopedResource. Alternatief — Share Extension voor het doorgeven van gegevens tussen applicaties.
Security-Scoped Bookmark — zijn gegevens die de toegang tot een bestand buiten de Sandbox tussen applicatiestarts behouden. Het wordt gemaakt van een Security-Scoped URL (verkregen uit UIDocumentPicker) via bookmarkData. Bij de volgende start wordt de bookmark hersteld via URLByResolvingBookmarkData.
Nee, Sandbox kan niet worden uitgeschakeld voor applicaties uit de App Store. Op jailbreak-apparaten is uitschakeling mogelijk, maar dit is niet compatibel met publicatie in de App Store. Ontwikkelaars kunnen zonder Sandbox testen op de simulator, maar echte apparaten passen altijd Sandbox toe.
Samenvatting
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.
Lees ook