Sandbox — wat is het, isolatieprincipe en bestandssysteem

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

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 — geïsoleerd bestandssysteem en uitvoeringsomgeving, uniek voor elke iOS-applicatie.
  • Elke applicatie heeft zijn eigen Sandbox-map met submappen Documents, Library, tmp en Bundle.
  • Toegang tot andere applicaties is verboden: lezen, schrijven en uitvoeren van code buiten de Sandbox worden door het systeem geblokkeerd.
  • Entitlements en Capabilities breiden de Sandbox uit: App Groups, iCloud, Security-Scoped Bookmarks vereisen expliciete toestemming.
  • UIDocumentPicker en Share Extension — de enige manieren om bestanden uit te wisselen tussen geïsoleerde applicaties.

Wat is Sandbox

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.

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

Structuur van de applicatiesandbox

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-mapVerkrijgen via FileManagerRechten
Documents.documentDirectoryLezen en schrijven
BundleBundle.main.bundlePathAlleen lezen
Library.libraryDirectoryLezen en schrijven
tmpNSTemporaryDirectory()Lezen en schrijven
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Lezen en schrijven

Toegang tot bestanden buiten de sandbox

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 Bookmarks

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.

swift
// 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.

Sandbox en App Groups

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.

Beperkingen van de sandbox in iOS

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.

  • Dynamische code — verboden: JavaScriptCore voor JS in WebView, maar geen willekeurige machinecode
  • Subprocessen — fork, exec, system niet beschikbaar vanuit Sandbox
  • Toegang tot apparaten — camera, microfoon, GPS vereisen systeemdialoog
  • Lokaal netwerk — multicast en broadcast UDP geblokkeerd voor App Store
  • Versleutelingssleutels — Keychain beschikbaar, maar alleen voor eigen applicatie (kSecAttrAccessGroup voor App Group)

Veelgestelde vragen

Wat is Sandbox in iOS?

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.

Welke bestanden zijn beschikbaar in de Sandbox van de applicatie?

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.

Hoe krijg ik toegang tot bestanden van een andere applicatie?

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.

Wat is een Security-Scoped Bookmark?

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.

Kan Sandbox in iOS worden uitgeschakeld?

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

  • Sandbox — het fundamentele beveiligingssysteem van iOS dat elke applicatie isoleert op kernel niveau met Mandatory Access Control.
  • Sandbox-structuur omvat de mappen Documents, Library, tmp en Bundle met verschillende toegangsrechten en back-upbeleid.
  • Directe toegang tot het bestandssysteem van andere applicaties is volledig geblokkeerd — alleen UIDocumentPicker en App Groups zijn legitiem.
  • Security-Scoped Bookmarks bieden persistente toegang tot bestanden buiten de Sandbox die via systeeminterfaces zijn verkregen.
  • App Groups creëren een gedeelde Sandbox-ruimte voor een set applicaties en extensies van dezelfde ontwikkelaar.
  • Sandbox-beperkingen omvatten een verbod op dynamische code, subprocessen, multicast-netwerk en verplichte systeemdialogen voor hardwarebronnen.
  • Alle App Store-applicaties werken in Sandbox — dit is geen optionele, maar een verplichte architecturale eigenschap van iOS.

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