Az App Group egy iOS-mechanizmus, amely közös tárolót hoz létre az alkalmazás és bővítményei közötti adatcseréhez. Enélkül minden folyamat (főalkalmazás, widget, share extension) elkülönített homokozóban működik, és nem fér hozzá a szomszédos komponens adataihoz. A Apple Developer Documentation, 2026 szerint az App Group ezt a problémát az entitlements-ben megadott egységes csoportazonosító segítségével oldja meg. Ez egy alapvető eszköz a konzisztens felhasználói élmény megteremtéséhez az iOS-ökoszisztémában.
Főbb pontok
App Group egy iOS operációs rendszer mechanizmusa, amely közös tárolóterületet biztosít egy fejlesztő több folyamata számára. Enélkül minden bővítmény a saját homokozójában működik, és nem tudja olvasni a másik komponens által írt adatokat. Az App Group megoldja ezt az elkülönítést azáltal, hogy létrehoz egy könyvtárat a fájlrendszerben, amely minden megfelelő entitlements-szel rendelkező folyamat számára elérhető.
A csoportazonosító a group. előtaggal kezdődik, és a projekt entitlements fájljában van megadva. Xcode-ban ez az azonosító a Capabilities-en keresztül kerül hozzáadásra — a rendszer automatikusan belefoglalja az alkalmazás aláírásába. A beállítás után a csoport minden tagja hozzáfér a megosztott könyvtárhoz a Library/Application Support/ útvonalon a tárolón belül.
Az Apple WWDC 2020 Session 10026 szerint az App Group három kulcsfontosságú forgatókönyvet fed le: beállítások szinkronizálása NSUserDefaults-on keresztül, megosztott hozzáférés fájlokhoz FileManageren keresztül, és a Core Data megosztott használata egyetlen tárhellyel. Minden forgatókönyvhöz elegendő a csoportazonosító megadása a megfelelő API-ban.
Az iOS létrehozza a közös tárolót bármely com.apple.security.application-groups entitlementtel rendelkező folyamat első futtatásakor. Fizikailag a tároló egy rendszerkönyvtárban található — az útvonala eltér a főalkalmazás és a bővítmények homokozójától, de minden jogosult folyamat rendelkezik olvasási és írási jogosultsággal.
Az Apple az App Group biztonságát a team ID és a kódaláírás kapcsolatán keresztül garantálja. Az a folyamat, amely nincs ugyanazzal a fejlesztői tanúsítvánnyal aláírva, nem férhet hozzá a csoport tárolójához. Ez megakadályozza az adatszivárgást a különböző fejlesztők alkalmazásai között.
Az azonosító formátuma: group.<team-id>.<name>. Például group.ABC123DEFG.widget-data. Egy eszközön több csoport is létrehozható, mindegyik saját résztvevői készlettel. Egy alkalmazás egyszerre több App Grouphoz is tartozhat — ez hasznos a különböző bővítmények adatainak szétválasztásához.
// Szerezd meg az App Group tároló URL-jét
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Hozz létre egy fájlt a megosztott tárolóban
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
A FileManager biztosítja a containerURL(forSecurityApplicationGroupIdentifier:) metódust, amely visszaadja a megosztott könyvtár URL-jét. Fontos, hogy ezt a metódust minden folyamatban külön hívjuk meg — az útvonal fizikailag ugyanaz, de minden folyamat a saját biztonsági prizmáján keresztül látja.
Az App Group bekapcsolása a Xcode-ban a Capabilities-nél kezdődik — az App Groups kapcsoló entitlementet ad a projekthez. Az Apple Developer Portal szintén megköveteli, hogy az alkalmazásazonosító tartalmazza ezt a capability-t. Enélkül a kódaláírás nem fog működni valós eszközön.
Nyissa meg a projektet Xcode-ban, válassza ki az alkalmazás targetjét, és lépjen a Signing & Capabilities fülre. Nyomja meg a + gombot, és válassza az App Groups lehetőséget. Hozzon létre egy új csoportot, vagy válasszon ki egy meglévőt. Ismételje meg ugyanazokat a lépéseket minden olyan bővítmény esetében, amelynek hozzá kell férnie a közös tárolóhoz. Minden résztvevőnek ugyanazt a csoportazonosítót kell használnia.
A Capabilities bekapcsolása után az Xcode automatikusan létrehozza a .entitlements fájlt a com.apple.security.application-groups kulccsal és az azonosítók tömbjével. Győződjön meg arról, hogy minden szükséges bővítmény rendelkezik ezzel a fájllal a megfelelő team ID-vel a csoportazonosítóban.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Ha projektje több bővítményt tartalmaz (Today Widget, Share Extension, Notification Service), mindegyiknek saját entitlements fájllal kell rendelkeznie ugyanazzal a csoporttal. Az entitlements hiánya bármely targetnél gyakori oka annak, hogy a bővítmény nem látja a megosztott adatokat.
A legegyszerűbb módja az adatok szinkronizálásának az alkalmazás és bővítményei között — UserDefaults a suite name megadásával. A szokásos UserDefaults.standard helyett létrehoz egy példányt az App Group azonosítóval, és minden folyamat ugyanazokat a beállításokat olvassa.
Az Apple Human Interface Guidelines szerint ez a mechanizmus alkalmas az állapot szinkronizálására: kiválasztott téma, kedvenc elemek, onbording jelzők. Azonban nem nagy adatmennyiségekhez vagy egyidejű írási műveletekhez készült — ehhez használjon fájlokat vagy Core Data-t.
// Írás a UserDefaults App Group-ba (főalkalmazás)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// Olvasás a UserDefaults App Group-ból (widget bővítmény)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
Vegye figyelembe: a suiteName-nel létrehozott UserDefaults-példány minden folyamatban külön jön létre, de egyetlen plist-fájlból olvas a közös tárolóban. A synchronize() metódus garantálja az azonnali lemezre írást — iOS 13+ esetén elhagyható, mivel a rendszer időszakosan szinkronizálja az adatokat.
Összetettebb forgatókönyvek esetén az App Group hozzáférést biztosít a megosztott fájlrendszerhez. Bármely fájl, amely a tároló könyvtárában jön létre, elérhető a csoport összes folyamata számára. Ez lehetővé teszi egy megosztott Core Data adatbázis, képgyorsítótár vagy ideiglenes fájlok implementálását.
A megosztott Core Data-tárhely használatához hozzon létre egy NSPersistentContainer-t az App Group könyvtárában található .sqlite fájl URL-jével. Győződjön meg arról, hogy egyszerre csak egy folyamat ír az adatbázisba — az egyidejű írás károsíthatja az adatokat. Tipikus architektúra: a főalkalmazás ír, a bővítmények olvasnak.
// Core Data beállítása App Group tárolóval
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "SharedModel")
guard let appGroupURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.shared")
else { return container }
let storeURL = appGroupURL.appendingPathComponent("SharedModel.sqlite")
container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeURL)]
container.loadPersistentStores { _, error in
if let error = error { fatalError(error.localizedDescription) }
}
return container
}()
Alternatív megközelítés — képek fájl-gyorsítótára. Az NSCache csak a memóriában él, de az App Groupon keresztül a gyorsítótárazott képeket lemezre mentheti a megosztott könyvtárba. A widget bővítmény hozzáfér ugyanazokhoz a fájlokhoz, és naprakész adatokat jelenít meg további hálózati betöltés nélkül.
| Forgatókönyv | Ajánlott API | Adatmennyiség |
|---|---|---|
| Beállítások és jelzők | UserDefaults suiteName | 1 KB-ig |
| Képgyorsítótár | FileManager + NSCache | 100 MB-ig |
| Strukturált adatok | Core Data store | 500 MB-ig |
| Ideiglenes fájlok | FileManager temporary | 50 MB-ig |
A megosztott fájlokkal való munka során vegye figyelembe, hogy a rendszer bármikor eltávolíthatja a bővítményt a memóriából. Használja az NSFileCoordinator-t a hozzáférés koordinálásához, hogy elkerülje az adatok sérülését a különböző folyamatok egyidejű írásakor.
Gyakran Ismételt Kérdések
Az App Group egy iOS-mechanizmus, amely közös tárolót hoz létre az alkalmazás és bővítményei közötti adattároláshoz. Lehetővé teszi az azonos csoportazonosítóval rendelkező folyamatok számára, hogy fájlokat, UserDefaults-beállításokat és Core Data-adatokat cseréljenek egyetlen könyvtáron keresztül a fájlrendszerben.
Nyissa meg a target Capabilities részét Xcode-ban, kapcsolja be az App Groups-ot, és adjon hozzá egy azonosítót a group.* formátumban. Ezután ismételje meg ugyanazokat a lépéseket minden olyan bővítmény esetében, amelynek hozzá kell férnie a közös tárolóhoz. Győződjön meg arról, hogy minden résztvevő ugyanazt a csoportazonosítót használja.
Az iOS-bővítmények minden típusa támogatja az App Group-ot: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard és mások. Minden bővítménynek rendelkeznie kell egy külön entitlements fájllal ugyanazzal a csoportazonosítóval, mint a főalkalmazásnak.
Igen, de csak akkor, ha az alkalmazások ugyanazzal a fejlesztői tanúsítvánnyal vannak aláírva, és ugyanaz a team ID-juk. Az Apple a kódaláíráson keresztül garantálja a biztonságot: két különböző fejlesztő alkalmazása nem férhet hozzá ugyanahhoz a tárolóhoz még azonos csoportazonosító esetén sem.
Használja a UserDefaults-ot suite name-nel kis beállításokhoz, a FileManager-t fájlokhoz és a Core Data-t strukturált adatokhoz. Mindezek az API-k az App Group könyvtárral működnek — elegendő a csoportazonosító megadása az inicializáláskor. Core Data esetén győződjön meg arról, hogy a tároló URL-je a megosztott könyvtárra mutat.
Ö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