Sandbox: cos'è, principio di isolamento e file system

Autore: IT Sectr Pubblicato: 2026-07-09 Tempo di lettura: 10 min

Sandbox è un ambiente di esecuzione isolato per le app iOS che limita l'accesso al file system, alla rete, alle risorse hardware e ai dati di altre app. Ogni app riceve il proprio ambiente Sandbox al momento dell'installazione e tutte le sue operazioni sui file vengono automaticamente reindirizzate in questa area isolata. Secondo la Apple App Sandbox Design Guide (2026), l'architettura del sandbox si basa su tre livelli di protezione: isolamento del file system, controllo della comunicazione tra processi e separazione delle risorse hardware con richiesta esplicita di permessi tramite entitlements.

Punti chiave

  • Sandbox — file system isolato e ambiente di esecuzione, unico per ogni app iOS.
  • Ogni app ha la propria directory Sandbox con le sottocartelle Documents, Library, tmp e Bundle.
  • L'accesso ad altre app è vietato: lettura, scrittura ed esecuzione di codice fuori dalla Sandbox sono bloccate dal sistema.
  • Entitlements e Capabilities estendono la Sandbox: App Groups, iCloud e Security-Scoped Bookmarks richiedono un'autorizzazione esplicita.
  • UIDocumentPicker e Share Extension sono gli unici modi per scambiare file tra app isolate.

Cos'è la Sandbox

Sandbox è un sistema di controllo degli accessi obbligatorio (Mandatory Access Control) implementato a livello di kernel di iOS (XNU — estensione del kernel Sandbox.kext). Ogni app riceve un profilo Sandbox UUID univoco all'avvio, che determina a quali risorse l'app può accedere.

L'architettura della Sandbox include tre componenti chiave: File System Isolation (ogni app vede solo il proprio container), Network Access Control (le richieste alla rete locale possono essere limitate) e Inter-Process Communication (divieto di IPC diretto con altre app). Apple ha introdotto la Sandbox in iOS 2.0 e da allora ha rafforzato notevolmente le restrizioni in ogni versione principale.

La Sandbox non è facoltativa — tutte le app dell'App Store funzionano nel sandbox. Lo sviluppatore non può disattivare la Sandbox né aggirare le sue restrizioni. Il tentativo di accedere a una risorsa vietata termina con il codice di errore EPERM (Operation not permitted) e una voce nel registro di sistema.

swift
import Foundation

// Tentativo di accedere al file di un'altra app — restituisce nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — la Sandbox blocca l'accesso

// Accesso corretto — all'interno della propria 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)

Struttura del sandbox dell'app

La Sandbox di ogni app in iOS contiene diverse directory predefinite accessibili tramite l'API Foundation. La posizione sul supporto fisico è /var/mobile/Containers/Data/Application/{UUID}/, ma gli sviluppatori non devono usare direttamente questo percorso: cambia a ogni riavvio del dispositivo nelle diverse versioni di iOS.

Le directory principali della Sandbox: Bundle (.app — sola lettura, contiene il codice eseguibile e le risorse), Documents (dati utente, con backup su iCloud), Library (Caches, Preferences, Application Support — con regole di backup diverse), tmp (file temporanei, eliminati dal sistema quando manca spazio). Ogni directory ha il proprio ciclo di vita e la propria politica di archiviazione.

Il percorso fisico della Sandbox si può ottenere tramite NSHomeDirectory() o FileManager.url(for: .documentDirectory). Apple consiglia di usare l'API basata su URL, perché astrae la struttura interna del file system e rimane stabile quando il macOS Sandbox cambia sul desktop.

Directory SandboxOttenimento tramite FileManagerPermessi
Documents.documentDirectoryLettura e scrittura
BundleBundle.main.bundlePathSola lettura
Library.libraryDirectoryLettura e scrittura
tmpNSTemporaryDirectory()Lettura e scrittura
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Lettura e scrittura

Accesso ai file fuori dal sandbox

L'accesso diretto al file system di altre app in iOS è completamente bloccato. Anche se lo sviluppatore conosce l'UUID del container di un'altra app, la Sandbox a livello di kernel restituisce un errore al tentativo di lettura o scrittura. Questa è una differenza fondamentale tra iOS e macOS, dove la Sandbox è più flessibile.

Apple offre tre meccanismi legittimi per lo scambio di dati tra app: UIDocumentPickerViewController (l'utente seleziona un file tramite l'interfaccia di sistema e l'app riceve un URL Security-Scoped), Share Extension (un'estensione per passare dati a un'altra app) e App Groups (una directory condivisa per le app dello stesso sviluppatore).

UIDocumentPicker è l'unico modo per accedere ai file di altre app senza configurazione preventiva. L'utente seleziona esplicitamente un file tramite il selettore di sistema standard e iOS fornisce all'app un URL Security-Scoped temporaneo. L'accesso dura fino alla chiusura del selettore o fino alla chiamata di stopAccessingSecurityScopedResource.

Security-Scoped Bookmarks

Un Security-Scoped Bookmark è un meccanismo di iOS che consente di conservare l'accesso a un file fuori dalla Sandbox tra i vari avvii dell'app. Quando l'utente seleziona un file tramite UIDocumentPicker, l'app può creare un bookmark dall'URL Security-Scoped e salvarlo in UserDefaults o in un altro archivio.

All'avvio successivo, l'app ripristina l'accesso tramite URLByResolvingBookmarkData, che restituisce un URL Security-Scoped. Quindi è necessario chiamare startAccessingSecurityScopedResource prima di leggere il file e stopAccessingSecurityScopedResource dopo aver terminato. Il bilanciamento delle chiamate è obbligatorio — ogni start deve avere un stop corrispondente, altrimenti il sistema esaurisce il limite delle risorse Security-Scoped.

swift
// Crea Security-Scoped Bookmark
func createBookmark(for url: URL) -> Data? {
    return try? url.bookmarkData(
        options: .minimalBookmark,
        includingResourceValuesForKeys: nil,
        relativeTo: nil
    )
}

// Risolvi i dati del bookmark in URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Il bookmark è obsoleto, bisogna crearne uno nuovo
    }
    
    return url
}

Limitazione importante: i Security-Scoped Bookmarks non funzionano per i file all'interno della propria Sandbox — solo per i file ottenuti tramite UIDocumentPicker o iCloud Drive. Un bookmark contiene dati Security-Scoped che consentono al sistema di identificare quale app richiede l'accesso a quale file. Se il certificato dell'app scade o cambia, il bookmark diventa non valido.

Sandbox e App Groups

App Groups è un meccanismo di iOS che consente a più app (e alle loro estensioni) dello stesso sviluppatore di condividere una directory Sandbox comune. Per attivarlo, è necessario aggiungere la Capability App Groups in Xcode e indicare lo stesso identificatore di gruppo per tutte le app di destinazione.

La directory condivisa di App Groups si trova fuori dalla Sandbox di ogni singola app, ma tutte le app del gruppo hanno accesso completo in lettura e scrittura. Ciò consente di scambiare file, database (Core Data con lo Store URL nell'App Group) e UserDefaults (tramite initWithSuiteName) tra l'app principale, il Today Widget, la Watch Extension e la Share Extension.

Apple consiglia di usare App Groups per la sincronizzazione dello stato tra un'app e le sue estensioni. Ad esempio, il widget Today Widget può leggere i dati dalla directory condivisa di App Groups, dove l'app principale scrive i dati aggiornati. Allo stesso tempo, ogni app rimane isolata dagli altri App Groups — solo le app con lo stesso identificatore di gruppo hanno accesso.

Limiti del sandbox in iOS

La Sandbox in iOS impone una serie di restrizioni severe da considerare durante lo sviluppo. Le principali: divieto di codice dinamico (caricamento ed esecuzione di codice fuori dalla Sandbox), divieto di accesso diretto alla rubrica, al calendario e alle foto senza l'autorizzazione dell'utente (Privacy framework) e limiti alla creazione di processi figlio (fork ed exec sono vietati).

Rete: le app possono connettersi a qualsiasi server remoto tramite TCP/UDP, ma l'accesso a localhost è limitato — le altre app non possono connettersi a un server all'interno della tua app (tranne nelle build di debug). L'UDP multicast e broadcast è bloccato anche per le app dell'App Store.

Risorse hardware: l'accesso a fotocamera, microfono, geolocalizzazione, Bluetooth e HealthKit richiede un'autorizzazione esplicita dell'utente tramite il dialogo di sistema. Per ogni tipo di risorsa, iOS usa un entitlement separato e una chiave Info.plist con la descrizione del motivo (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Richiedere l'autorizzazione senza la descrizione del motivo in Info.plist provoca la chiusura dell'app.

  • Codice dinamico — vietato: JavaScriptCore per JS in WebView, ma non codice macchina arbitrario
  • Processi figlio — fork, exec e system non sono disponibili dalla Sandbox
  • Accesso ai dispositivi — fotocamera, microfono e GPS richiedono un dialogo di sistema
  • Rete locale — UDP multicast e broadcast bloccato per l'App Store
  • Chiavi di crittografia — Keychain è disponibile, ma solo per la propria app (kSecAttrAccessGroup per App Group)

Domande frequenti

Cos'è la Sandbox in iOS?

Sandbox è un ambiente di esecuzione isolato per le app iOS che limita l'accesso al file system, alla rete e ai dati di altre app. Ogni app ha un container Sandbox univoco, il cui accesso è controllato a livello di kernel di iOS tramite Sandbox.kext.

Quali file sono disponibili nella Sandbox dell'app?

L'app ha accesso a: Documents (dati utente), Library (Caches, Preferences, Application Support), tmp (file temporanei) e Bundle (sola lettura). La directory App Group è disponibile per le app dello stesso gruppo di sviluppatore.

Come ottenere l'accesso ai file di un'altra app?

Tramite UIDocumentPickerViewController — l'utente seleziona un file tramite l'interfaccia di sistema. iOS fornisce un URL Security-Scoped, disponibile fino alla chiamata di stopAccessingSecurityScopedResource. L'alternativa è una Share Extension per trasferire dati tra app.

Cos'è un Security-Scoped Bookmark?

Un Security-Scoped Bookmark sono dati che conservano l'accesso a un file fuori dalla Sandbox tra gli avvii dell'app. Viene creato da un URL Security-Scoped (ottenuto da UIDocumentPicker) tramite bookmarkData. All'avvio successivo, il bookmark viene ripristinato tramite URLByResolvingBookmarkData.

Si può disattivare la Sandbox in iOS?

No, la Sandbox non può essere disattivata per le app dell'App Store. Sui dispositivi con jailbreak è possibile disattivarla, ma questo è incompatibile con la pubblicazione sull'App Store. Gli sviluppatori possono testare senza Sandbox sul simulatore, ma i dispositivi reali applicano sempre la Sandbox.

Riepilogo

  • Sandbox — il sistema di sicurezza fondamentale di iOS che isola ogni app a livello di kernel con il Mandatory Access Control.
  • La struttura della Sandbox include le directory Documents, Library, tmp e Bundle con diversi diritti di accesso e politiche di backup.
  • L'accesso diretto al file system di altre app è completamente bloccato — solo UIDocumentPicker e App Groups sono legittimi.
  • I Security-Scoped Bookmarks garantiscono un accesso persistente ai file fuori dalla Sandbox ottenuti tramite le interfacce di sistema.
  • Gli App Groups creano uno spazio Sandbox condiviso per un insieme di app ed estensioni dello stesso sviluppatore.
  • Le restrizioni della Sandbox includono il divieto di codice dinamico, processi figlio, reti multicast e dialoghi di sistema obbligatori per le risorse hardware.
  • Tutte le app dell'App Store funzionano nella Sandbox — non è una caratteristica facoltativa, ma una peculiarità architettonica obbligatoria di iOS.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche