Sandbox — co to je, princip izolace a souborový systém

Autor: IT Sectr Publikováno: 2026-07-09 Doba čtení: 10 min

Sandbox — je izolované prostředí pro spouštění iOS aplikace, které omezuje přístup k souborovému systému, síti, hardwarovým prostředkům a datům jiných aplikací. Každá aplikace při instalaci získá vlastní prostředí Sandbox a všechny její souborové operace jsou automaticky přesměrovány do této izolované oblasti. Podle Apple App Sandbox Design Guide (2026) je architektura sandboxu založena na třech úrovních ochrany: izolace souborového systému, kontrola komunikace mezi procesy a rozdělení hardwarových prostředků s explicitním vyžádáním oprávnění prostřednictvím entitlements.

Hlavní body

  • Sandbox — izolovaný souborový systém a spouštěcí prostředí, jedinečné pro každou iOS aplikaci.
  • Každá aplikace má svůj vlastní adresář Sandbox s podadresáři Documents, Library, tmp a Bundle.
  • Přístup k jiným aplikacím je zakázán: čtení, zápis a spouštění kódu mimo Sandbox jsou systémem blokovány.
  • Entitlements a Capabilities rozšiřují Sandbox: App Groups, iCloud, Security-Scoped Bookmarks vyžadují explicitní povolení.
  • UIDocumentPicker a Share Extension — jediné způsoby výměny souborů mezi izolovanými aplikacemi.

Co je Sandbox

Sandbox — je systém povinné kontroly přístupu (Mandatory Access Control), implementovaný na úrovni jádra iOS (XNU — kernel extension Sandbox.kext). Každá aplikace při spuštění obdrží jedinečný UUID Sandbox profil, který určuje, ke kterým systémovým prostředkům je povolen přístup.

Architektura Sandbox zahrnuje tři klíčové komponenty: File System Isolation (každá aplikace vidí pouze svůj vlastní kontejner), Network Access Control (požadavky na lokální síť mohou být omezeny) a Inter-Process Communication (zákaz přímé IPC s jinými aplikacemi). Apple představil Sandbox v iOS 2.0 a od té doby výrazně zpřísnil omezení v každé hlavní verzi.

Sandbox není volitelný — všechny aplikace z App Store běží v sandboxu. Vývojář nemůže Sandbox deaktivovat nebo obejít jeho omezení. Pokus o přístup k zakázanému prostředku končí chybou s kódem EPERM (Operation not permitted) a záznamem do systémového protokolu.

swift
import Foundation

// Pokus o přístup k souboru jiné aplikace — vrací nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Sandbox blokuje přístup

// Správný přístup — v rámci vlastního 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)

Struktura sandboxu aplikace

Sandbox každé iOS aplikace obsahuje několik předdefinovaných adresářů, přístupných přes Foundation API. Umístění na fyzickém médiu — /var/mobile/Containers/Data/Application/{UUID}/, ale vývojáři by tuto cestu neměli používat přímo: mění se při každém restartu zařízení v různých verzích iOS.

Hlavní adresáře Sandbox: Bundle (.app — pouze pro čtení, obsahuje spustitelný kód a prostředky), Documents (uživatelská data, zálohují se do iCloud), Library (Caches, Preferences, Application Support — s různými pravidly zálohování), tmp (dočasné soubory, systém je maže při nedostatku místa). Každý adresář má svůj vlastní životní cyklus a politiku ukládání.

Fyzickou cestu k Sandbox lze získat pomocí NSHomeDirectory() nebo FileManager.url(for: .documentDirectory). Apple doporučuje používat URL-based API, protože abstrahuje vnitřní strukturu souborového systému a zůstává stabilní při změnách v macOS Sandbox na desktopu.

Adresář SandboxZískání přes FileManagerOprávnění
Documents.documentDirectoryČtení a zápis
BundleBundle.main.bundlePathPouze čtení
Library.libraryDirectoryČtení a zápis
tmpNSTemporaryDirectory()Čtení a zápis
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Čtení a zápis

Přístup k souborům mimo sandbox

Přímý přístup k souborovému systému jiných aplikací v iOS je zcela blokován. I když vývojář zná UUID kontejneru jiné aplikace, Sandbox na úrovni jádra vrátí chybu při pokusu o čtení nebo zápis. To je zásadní rozdíl mezi iOS a macOS, kde je Sandbox flexibilnější.

Apple poskytuje tři legitimní mechanismy pro výměnu dat mezi aplikacemi: UIDocumentPickerViewController (uživatel vybere soubor přes systémové rozhraní, aplikace obdrží Security-Scoped URL), Share Extension (rozšíření pro předávání dat do jiné aplikace) a App Groups (sdílený adresář pro aplikace stejného vývojáře).

UIDocumentPicker — jediný způsob, jak získat přístup k souborům z jiných aplikací bez předchozí konfigurace. Uživatel explicitně vybere soubor přes standardní systémový výběr a iOS poskytne aplikaci dočasné Security-Scoped URL. Přístup platí do zavření výběru nebo do volání stopAccessingSecurityScopedResource.

Security-Scoped Bookmarks

Security-Scoped Bookmark — je mechanismus iOS, který umožňuje zachovat přístup k souboru mimo Sandbox mezi spuštěními aplikace. Když uživatel vybere soubor přes UIDocumentPicker, aplikace může vytvořit bookmark z Security-Scoped URL a uložit jej do UserDefaults nebo jiného úložiště.

Při příštím spuštění aplikace obnoví přístup pomocí URLByResolvingBookmarkData, která vrátí Security-Scoped URL. Poté je třeba zavolat startAccessingSecurityScopedResource před čtením souboru a stopAccessingSecurityScopedResource po dokončení práce. Rovnováha volání je povinná — každý start musí mít odpovídající stop, jinak systém vyčerpá limit Security-Scoped prostředků.

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

// Převést data bookmarku na URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Bookmark je zastaralý, je třeba vytvořit nový
    }
    
    return url
}

Důležité omezení: Security-Scoped Bookmarks nefungují pro soubory uvnitř vlastního Sandbox — pouze pro soubory získané přes UIDocumentPicker nebo iCloud Drive. Bookmark obsahuje Security-Scoped data, která umožňují systému identifikovat, která aplikace a pro který soubor žádá o přístup. Pokud certifikát aplikace vyprší nebo se změní, bookmark se stává neplatným.

Sandbox a App Groups

App Groups — mechanismus iOS, který umožňuje několika aplikacím (a jejich rozšířením) od stejného vývojáře mít sdílený adresář Sandbox. Pro aktivaci je třeba přidat Capability App Groups v Xcode a zadat stejný identifikátor skupiny pro všechny cílové aplikace.

Sdílený adresář App Groups se nachází mimo Sandbox každé jednotlivé aplikace, ale všechny aplikace ve skupině k němu mají plný přístup pro čtení a zápis. To umožňuje výměnu souborů, databází (Core Data s Store URL v App Group) a UserDefaults (přes initWithSuiteName) mezi hlavní aplikací, Today Widget, Watch Extension a Share Extension.

Apple doporučuje používat App Groups pro synchronizaci stavu mezi aplikací a jejími rozšířeními. Například Today Widget může číst data ze sdíleného adresáře App Group, do kterého hlavní aplikace zapisuje aktuální data. Každá aplikace je však stále izolována od ostatních App Groups — pouze aplikace se stejným identifikátorem skupiny mají přístup.

Omezení sandboxu v iOS

Sandbox v iOS ukládá řadu přísných omezení, která je třeba zohlednit při vývoji. Hlavní: zákaz dynamického kódu (načítání a spouštění kódu mimo Sandbox), zákaz přímého přístupu k adresáři, kalendáři a fotkám bez souhlasu uživatele (Privacy framework) a omezení vytváření podprocesů (fork, exec jsou zakázány).

Síť: aplikace se mohou připojit k libovolným vzdáleným serverům přes TCP/UDP, ale přístup k localhost je omezen — jiné aplikace se nemohou připojit k serveru uvnitř vaší aplikace (kromě debug sestavení). Multicast a broadcast UDP jsou také blokovány pro aplikace z App Store.

Hardwarové prostředky: přístup ke kameře, mikrofonu, geolokaci, Bluetooth a HealthKit vyžaduje explicitní souhlas uživatele prostřednictvím systémového dialogu. Pro každý typ prostředku iOS používá samostatný entitlement a klíč Info.plist s popisem důvodu (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Žádost o oprávnění bez popisu důvodu v Info.plist vede k ukončení aplikace.

  • Dynamický kód — zakázán: JavaScriptCore pro JS ve WebView, ale ne libovolný strojový kód
  • Podprocesy — fork, exec, system nejsou z Sandbox dostupné
  • Přístup k zařízením — kamera, mikrofon, GPS vyžadují systémový dialog
  • Lokální síť — multicast a broadcast UDP blokovány pro App Store
  • Šifrovací klíče — Keychain dostupný, ale pouze pro vlastní aplikaci (kSecAttrAccessGroup pro App Group)

Často kladené otázky

Co je Sandbox v iOS?

Sandbox — izolované prostředí pro spouštění iOS aplikace, které omezuje přístup k souborovému systému, síti a datům jiných aplikací. Každá aplikace má jedinečný kontejner Sandbox, jehož přístup je řízen na úrovni jádra iOS prostřednictvím Sandbox.kext.

Jaké soubory jsou dostupné v Sandbox aplikace?

Aplikace má přístup k: Documents (uživatelská data), Library (Caches, Preferences, Application Support), tmp (dočasné soubory) a Bundle (pouze pro čtení). Adresář App Group je dostupný pro aplikace stejné vývojářské skupiny.

Jak získat přístup k souborům jiné aplikace?

Přes UIDocumentPickerViewController — uživatel vybere soubor přes systémové rozhraní. iOS poskytne Security-Scoped URL, přístupné do volání stopAccessingSecurityScopedResource. Alternativa — Share Extension pro předávání dat mezi aplikacemi.

Co je Security-Scoped Bookmark?

Security-Scoped Bookmark — jsou data, která uchovávají přístup k souboru mimo Sandbox mezi spuštěními aplikace. Vytváří se z Security-Scoped URL (získaného z UIDocumentPicker) přes bookmarkData. Při příštím spuštění se bookmark obnoví pomocí URLByResolvingBookmarkData.

Lze Sandbox v iOS deaktivovat?

Ne, Sandbox nelze deaktivovat pro aplikace z App Store. Na jailbreak zařízeních je deaktivace možná, ale to není kompatibilní s publikováním v App Store. Vývojáři mohou testovat bez Sandbox na simulátoru, ale skutečná zařízení Sandbox vždy uplatňují.

Shrnutí

  • Sandbox — základní bezpečnostní systém iOS, který izoluje každou aplikaci na úrovni jádra pomocí Mandatory Access Control.
  • Struktura Sandbox zahrnuje adresáře Documents, Library, tmp a Bundle s různými přístupovými právy a zálohovacími politikami.
  • Přímý přístup k souborovému systému jiných aplikací je zcela blokován — legitimní jsou pouze UIDocumentPicker a App Groups.
  • Security-Scoped Bookmarks poskytují trvalý přístup k souborům mimo Sandbox získaným prostřednictvím systémových rozhraní.
  • App Groups vytvářejí sdílený prostor Sandbox pro sadu aplikací a rozšíření od stejného vývojáře.
  • Omezení Sandbox zahrnují zákaz dynamického kódu, podprocesů, multicast sítě a povinné systémové dialogy pro hardwarové prostředky.
  • Všechny aplikace z App Store běží v Sandbox — to není volitelná, ale povinná architektonická vlastnost iOS.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také