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 — 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.
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)
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ář Sandbox | Získání přes FileManager | Oprávnění |
|---|---|---|
| Documents | .documentDirectory | Čtení a zápis |
| Bundle | Bundle.main.bundlePath | Pouze čtení |
| Library | .libraryDirectory | Čtení a zápis |
| tmp | NSTemporaryDirectory() | Čtení a zápis |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Čtení a zápis |
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 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ů.
// 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.
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.
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.
Často kladené otázky
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.
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.
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.
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.
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í
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í.
Přečtěte si také