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 — 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.
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)
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ár | Elérés FileManager segítségével | Engedélyek |
|---|---|---|
| Documents | .documentDirectory | Olvasás és írás |
| Bundle | Bundle.main.bundlePath | Csak olvasás |
| Library | .libraryDirectory | Olvasás és írás |
| tmp | NSTemporaryDirectory() | Olvasás és írás |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Olvasás és írás |
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 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.
// 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.
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 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.
Gyakran Ismételt Kérdések
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.
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.
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.
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.
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
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.
Olvassa el is