Sandbox — mi ez, az izoláció elve és a fájlrendszer

Szerző: IT Sectr Megjelenés: 2026-07-09 Olvasási idő: 10 perc

Sandbox — egy iOS-alkalmazás izolált végrehajtási környezete, amely korlátozza a hozzáférést a fájlrendszerhez, hálózathoz, hardvererőforrásokhoz és más alkalmazások adataihoz. Minden alkalmazás a telepítéskor saját Sandbox környezetet kap, és minden fájlművelete automatikusan ebbe az izolált területbe kerül átirányításra. Az Apple App Sandbox Design Guide (2026) szerint a homokozó architektúrája három védelmi szinten alapul: fájlrendszer-izoláció, folyamatközi kommunikáció ellenőrzése és hardvererőforrások megosztása explicit engedélykéréssel entitlements segítségével.

Főbb pontok

  • Sandbox — izolált fájlrendszer és végrehajtási környezet, egyedi minden iOS-alkalmazáshoz.
  • Minden alkalmazásnak saját Sandbox könyvtára van a Documents, Library, tmp és Bundle alkönyvtárakkal.
  • Hozzáférés más alkalmazásokhoz tilos: a Sandboxon kívüli olvasás, írás és kódvégrehajtás a rendszer által blokkolva van.
  • Entitlements és Capabilities kibővítik a Sandbox-ot: az App Groups, iCloud, Security-Scoped Bookmarks explicit engedélyt igényelnek.
  • UIDocumentPicker és Share Extension — az egyetlen módok a fájlok cseréjére izolált alkalmazások között.

Mi az a Sandbox

Sandbox — egy kötelező hozzáférés-ellenőrzési rendszer (Mandatory Access Control), amely az iOS kernel szintjén van megvalósítva (XNU — kernel extension Sandbox.kext). Minden alkalmazás indításkor egyedi UUID Sandbox profilt kap, amely meghatározza, hogy mely rendszererőforrásokhoz engedélyezett a hozzáférés.

A Sandbox architektúrája három kulcsfontosságú összetevőt foglal magában: File System Isolation (minden alkalmazás csak a saját konténerét látja), Network Access Control (a helyi hálózatra irányuló kérések korlátozhatók) és Inter-Process Communication (a közvetlen IPC tilalma más alkalmazásokkal). Az Apple az iOS 2.0-ban vezette be a Sandbox-ot, és azóta minden nagyobb verzióban jelentősen szigorította a korlátozásokat.

A Sandbox nem opcionális — az App Store összes alkalmazása homokozóban fut. A fejlesztő nem kapcsolhatja ki a Sandbox-ot vagy kerülheti meg a korlátozásait. A tiltott erőforráshoz való hozzáférési kísérlet EPERM kóddal (Operation not permitted) és rendszernaplóba történő bejegyzéssel végződik.

swift
import Foundation

// Kísérlet másik alkalmazás fájljának elérésére — nil-t ad vissza
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — A Sandbox blokkolja a hozzáférést

// Helyes hozzáférés — a saját Sandbox-on belül
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)

Az alkalmazás homokozójának szerkezete

Minden iOS-alkalmazás Sandbox-ja több előre meghatározott könyvtárat tartalmaz, amelyek a Foundation API-n keresztül érhetők el. A fizikai adathordozón lévő hely — /var/mobile/Containers/Data/Application/{UUID}/, de a fejlesztőknek nem szabad közvetlenül használniuk ezt az elérési utat: az minden újraindításkor változik a különböző iOS-verziókban.

A Sandbox fő könyvtárai: Bundle (.app — csak olvasható, végrehajtható kódot és erőforrásokat tartalmaz), Documents (felhasználói adatok, iCloud-ba biztonsági mentés), Library (Caches, Preferences, Application Support — eltérő biztonsági mentési szabályokkal), tmp (ideiglenes fájlok, amelyeket a rendszer töröl helyhiány esetén). Minden könyvtárnak saját életciklusa és tárolási politikája van.

A Sandbox fizikai elérési útja NSHomeDirectory() vagy FileManager.url(for: .documentDirectory) segítségével szerezhető meg. Az Apple az URL-alapú API használatát ajánlja, mivel az elvonatkoztatja a fájlrendszer belső szerkezetét, és stabil marad a macOS Sandbox asztali változásainál.

Sandbox könyvtárElérés FileManager segítségévelEngedélyek
Documents.documentDirectoryOlvasás és írás
BundleBundle.main.bundlePathCsak olvasás
Library.libraryDirectoryOlvasás és írás
tmpNSTemporaryDirectory()Olvasás és írás
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Olvasás és írás

Hozzáférés a homokozón kívüli fájlokhoz

Közvetlen hozzáférés más alkalmazások fájlrendszeréhez iOS-ben teljesen blokkolva van. Még ha a fejlesztő ismeri is egy másik alkalmazás konténerének UUID-jét, a Sandbox kernel szinten hibát ad vissza olvasási vagy írási kísérletnél. Ez az alapvető különbség az iOS és a macOS között, ahol a Sandbox rugalmasabb.

Az Apple három legitim mechanizmust kínál az alkalmazások közötti adatcserére: UIDocumentPickerViewController (a felhasználó a rendszerfelületen keresztül választ ki egy fájlt, az alkalmazás Security-Scoped URL-t kap), Share Extension (bővítmény adatok másik alkalmazásba történő továbbításához) és App Groups (megosztott könyvtár azonos fejlesztő alkalmazásai számára).

UIDocumentPicker — az egyetlen mód a más alkalmazásokból származó fájlok elérésére előzetes konfiguráció nélkül. A felhasználó explicit módon kiválaszt egy fájlt a szabványos rendszerválasztón keresztül, és az iOS ideiglenes Security-Scoped URL-t biztosít az alkalmazásnak. A hozzáférés a választó bezárásáig vagy a stopAccessingSecurityScopedResource meghívásáig érvényes.

Security-Scoped Bookmarks

Security-Scoped Bookmark — egy iOS mechanizmus, amely lehetővé teszi a Sandboxon kívüli fájlhoz való hozzáférés megőrzését az alkalmazás indításai között. Amikor a felhasználó kiválaszt egy fájlt a UIDocumentPicker-en keresztül, az alkalmazás létrehozhat egy bookmark-ot a Security-Scoped URL-ből, és elmentheti azt a UserDefaults-ba vagy más tárolóba.

A következő indításkor az alkalmazás visszaállítja a hozzáférést a URLByResolvingBookmarkData segítségével, amely visszaad egy Security-Scoped URL-t. Ezután a fájl olvasása előtt meg kell hívni a startAccessingSecurityScopedResource-ot, és a munka befejezése után a stopAccessingSecurityScopedResource-ot. A hívások egyensúlya kötelező — minden start-hoz tartoznia kell egy megfelelő stop-nak, különben a rendszer kimeríti a Security-Scoped erőforrások korlátját.

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

// Bookmark adatok feloldása URL-címre
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // A bookmark elavult, újat kell létrehozni
    }
    
    return url
}

Fontos korlátozás: A Security-Scoped Bookmarks nem működnek a saját Sandbox-on belüli fájlokra — csak a UIDocumentPicker-en vagy iCloud Drive-on keresztül kapott fájlokra. A bookmark Security-Scoped adatokat tartalmaz, amelyek lehetővé teszik a rendszer számára, hogy azonosítsa, melyik alkalmazás és melyik fájlhoz kér hozzáférést. Ha az alkalmazás tanúsítványa lejár vagy megváltozik, a bookmark érvénytelenné válik.

Sandbox és App Groups

App Groups — iOS mechanizmus, amely lehetővé teszi, hogy ugyanazon fejlesztő több alkalmazása (és azok bővítményei) rendelkezzenek megosztott Sandbox könyvtárral. Az engedélyezéshez hozzá kell adni a Capability App Groups-ot az Xcode-ban, és meg kell adni ugyanazt a csoportazonosítót az összes célalkalmazáshoz.

A megosztott App Groups könyvtár minden egyes alkalmazás Sandbox-ján kívül található, de a csoport összes alkalmazásának teljes hozzáférése van olvasásra és írásra. Ez lehetővé teszi a fájlok, adatbázisok (Core Data Store URL-lel az App Group-ban) és UserDefaults (initWithSuiteName segítségével) megosztását a főalkalmazás, a Today Widget, a Watch Extension és a Share Extension között.

Az Apple az App Groups használatát ajánlja az állapot szinkronizálásához az alkalmazás és bővítményei között. Például a Today Widget olvashat adatokat a megosztott App Groups könyvtárból, amelybe a főalkalmazás írja a naprakész adatokat. Minden alkalmazás azonban továbbra is el van szigetelve más App Groups-októl — csak az azonos csoportazonosítóval rendelkező alkalmazások férhetnek hozzá.

A homokozó korlátozásai iOS-ben

A Sandbox iOS-ben számos szigorú korlátozást ír elő, amelyeket figyelembe kell venni a fejlesztés során. A főbbek: a dinamikus kód tilalma (kód betöltése és végrehajtása a Sandboxon kívül), a közvetlen hozzáférés tilalma a címjegyzékhez, naptárhoz és fényképekhez a felhasználó engedélye nélkül (Privacy framework), valamint a gyermekfolyamatok létrehozásának korlátozása (fork, exec tilos).

Hálózat: az alkalmazások TCP/UDP-n keresztül bármely távoli szerverhez csatlakozhatnak, de a localhost-hoz való hozzáférés korlátozott — más alkalmazások nem csatlakozhatnak az Ön alkalmazásán belüli szerverhez (kivéve a debug build-eket). A multicast és broadcast UDP szintén blokkolva van az App Store alkalmazások számára.

Hardvererőforrások: a kamerához, mikrofonhoz, geolokációhoz, Bluetooth-hoz és HealthKit-hez való hozzáférés explicit felhasználói engedélyt igényel rendszerpárbeszédablakon keresztül. Minden erőforrástípushoz az iOS külön entitlement-et és Info.plist kulcsot használ az ok leírásával (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Az engedélykérés az ok leírása nélkül az Info.plist-ben az alkalmazás megszűnéséhez vezet.

  • Dinamikus kód — tilos: JavaScriptCore JS-hez WebView-ban, de nem tetszőleges gépi kód
  • Gyermekfolyamatok — fork, exec, system nem érhetők el Sandbox-ból
  • Hozzáférés eszközökhöz — kamera, mikrofon, GPS rendszerpárbeszédablakot igényel
  • Helyi hálózat — multicast és broadcast UDP blokkolva az App Store számára
  • Titkosítási kulcsok — Keychain elérhető, de csak saját alkalmazáshoz (kSecAttrAccessGroup App Group-hoz)

Gyakran Ismételt Kérdések

Mi az a Sandbox iOS-ben?

Sandbox — egy iOS-alkalmazás izolált végrehajtási környezete, amely korlátozza a hozzáférést a fájlrendszerhez, hálózathoz és más alkalmazások adataihoz. Minden alkalmazásnak egyedi Sandbox konténere van, amelynek hozzáférését az iOS kernel szintjén a Sandbox.kext vezérli.

Milyen fájlok érhetők el az alkalmazás Sandbox-jában?

Az alkalmazás hozzáfér: Documents (felhasználói adatok), Library (Caches, Preferences, Application Support), tmp (ideiglenes fájlok) és Bundle (csak olvasás). Az App Groups könyvtár az azonos fejlesztői csoport alkalmazásai számára érhető el.

Hogyan lehet hozzáférni egy másik alkalmazás fájljaihoz?

A UIDocumentPickerViewController segítségével — a felhasználó a rendszerfelületen keresztül választ ki egy fájlt. Az iOS egy Security-Scoped URL-t biztosít, amely a stopAccessingSecurityScopedResource meghívásáig érhető el. Alternatív — Share Extension az alkalmazások közötti adatátvitelhez.

Mi az a Security-Scoped Bookmark?

Security-Scoped Bookmark — olyan adat, amely megőrzi a hozzáférést egy Sandboxon kívüli fájlhoz az alkalmazás indításai között. A UIDocumentPicker-ből kapott Security-Scoped URL-ből jön létre a bookmarkData segítségével. A következő indításkor a bookmark a URLByResolvingBookmarkData segítségével állítható vissza.

Ki lehet kapcsolni a Sandbox-ot iOS-ben?

Nem, a Sandbox nem kapcsolható ki az App Store-ból származó alkalmazások esetében. Jailbreak eszközökön lehetséges a kikapcsolás, de ez nem kompatibilis az App Store-ban való közzététellel. A fejlesztők tesztelhetnek Sandbox nélkül a szimulátoron, de a valódi eszközök mindig alkalmazzák a Sandbox-ot.

Összefoglalás

  • Sandbox — az iOS alapvető biztonsági rendszere, amely minden alkalmazást kernel szinten izolál Mandatory Access Control segítségével.
  • Sandbox szerkezete tartalmazza a Documents, Library, tmp és Bundle könyvtárakat különböző hozzáférési jogosultságokkal és biztonsági mentési szabályzatokkal.
  • Közvetlen hozzáférés más alkalmazások fájlrendszeréhez teljesen blokkolva — csak a UIDocumentPicker és App Groups legitim.
  • Security-Scoped Bookmarks tartós hozzáférést biztosítanak a Sandboxon kívüli, rendszerfelületeken keresztül kapott fájlokhoz.
  • App Groups megosztott Sandbox teret hoz létre egy fejlesztő alkalmazásai és bővítményei számára.
  • Sandbox korlátozásai magukban foglalják a dinamikus kód, gyermekfolyamatok, multicast hálózat tilalmát és kötelező rendszerpárbeszédablakokat a hardvererőforrásokhoz.
  • Az összes App Store alkalmazás Sandbox-ban fut — ez nem opcionális, hanem kötelező architekturális jellemzője az iOS-nek.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is