App Group is een iOS-mechanisme dat een gedeelde container creëert voor gegevensuitwisseling tussen de app en zijn extensies. Zonder dit werkt elk proces (hoofdapp, widget, share extension) in een geïsoleerde sandbox en heeft het geen toegang tot gegevens van een naburig component. Volgens Apple Developer Documentation, 2026 lost App Group dit probleem op via een unieke groep-ID die in entitlements wordt vermeld. Dit is een fundamenteel hulpmiddel voor het creëren van een consistente gebruikerservaring in het iOS-ecosysteem.
Belangrijkste punten
App Group is een mechanisme van het iOS-besturingssysteem dat een gedeelde opslagruimte biedt voor meerdere processen van dezelfde ontwikkelaar. Zonder dit werkt elke extensie in zijn eigen sandbox en kan het geen gegevens lezen die door een ander component zijn geschreven. App Group lost deze isolatie op door een map in het bestandssysteem te maken die toegankelijk is voor alle processen met correcte entitlements.
De groep-ID begint met het voorvoegsel group. en wordt vermeld in het entitlements-bestand van het project. In Xcode wordt deze ID toegevoegd via Capabilities — het systeem neemt het automatisch op in de handtekening van de app. Na configuratie krijgen alle leden van de groep toegang tot de gedeelde map op het pad Library/Application Support/ in de container.
Volgens Apple WWDC 2020 Session 10026 dekt App Group drie belangrijke scenario's: synchronisatie van instellingen via NSUserDefaults, gedeelde toegang tot bestanden via FileManager en gedeeld gebruik van Core Data met één opslag. Voor elk scenario volstaat het om de groep-ID in de betreffende API op te geven.
iOS maakt de gedeelde container bij de eerste start van elk proces dat de entitlement com.apple.security.application-groups heeft. Fysiek bevindt de container zich in een systeemmap — het pad verschilt van de sandbox van de hoofdapp en extensies, maar alle geautoriseerde processen hebben lees- en schrijfrechten.
Apple garandeert de veiligheid van App Group via de koppeling van team-ID en codehandtekening. Een proces dat niet met hetzelfde ontwikkelaarscertificaat is ondertekend, heeft geen toegang tot de containervan de groep. Dit voorkomt gegevenslekkage tussen apps van verschillende ontwikkelaars.
Formaat van de ID: group.<team-id>.<name>. Bijvoorbeeld group.ABC123DEFG.widget-data. Op één apparaat kunnen meerdere groepen worden aangemaakt, elk met een eigen set deelnemers. Eén app kan tegelijkertijd tot meerdere App Groups behoren — dit is handig voor het scheiden van gegevens van verschillende extensies.
// Haal de URL van de App Group-container op
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Maak een bestand in de gedeelde container
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
FileManager biedt de methode containerURL(forSecurityApplicationGroupIdentifier:) die de URL van de gedeelde map retourneert. Het is belangrijk deze methode in elk proces afzonderlijk aan te roepen — het pad is fysiek hetzelfde, maar elk proces ziet het door zijn eigen veiligheidsprisma.
Het inschakelen van App Group in Xcode begint met Capabilities — de schakelaar App Groups voegt entitlement toe aan het project. Apple Developer Portal vereist ook dat de app-ID deze capability bevat. Zonder dit werkt de codehandtekening niet op een echt apparaat.
Open het project in Xcode, selecteer het target van de app en ga naar het tabblad Signing & Capabilities. Klik op + en kies App Groups. Maak een nieuwe groep of selecteer een bestaande. Herhaal dezelfde stappen voor elke extensie die toegang moet hebben tot de gedeelde container. Alle deelnemers moeten dezelfde groep-ID gebruiken.
Na het inschakelen van Capabilities maakt Xcode automatisch het bestand .entitlements aan met de sleutel com.apple.security.application-groups en een array van IDs. Zorg ervoor dat alle benodigde extensies dit bestand hebben met de juiste team-ID in de groep-ID.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Als uw project meerdere extensies heeft (Today Widget, Share Extension, Notification Service), moet elk een eigen entitlements-bestand hebben met dezelfde groep. Ontbrekende entitlements bij een target is een veelvoorkomende reden waarom een extensie geen gedeelde gegevens ziet.
De eenvoudigste manier om gegevens te synchroniseren tussen de app en extensies — UserDefaults met opgave van suite name. In plaats van de standaard UserDefaults.standard maakt u een instantie met de App Group-ID en alle processen lezen dezelfde instellingen.
Volgens de Apple Human Interface Guidelines is dit mechanisme geschikt voor het synchroniseren van status: geselecteerd thema, favoriete items, onbording-vlaggen. Het is echter niet bedoeld voor grote hoeveelheden gegevens of gelijktijdige schrijfbewerkingen — gebruik daarvoor bestanden of Core Data.
// Schrijf naar UserDefaults App Group (hoofdapp)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// Lees uit UserDefaults App Group (widgetextensie)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
Let op: de UserDefaults-instantie met suiteName wordt in elk proces afzonderlijk gemaakt, maar leest uit één plist-bestand in de gedeelde container. De methode synchronize() garandeert onmiddellijk schrijven naar schijf — in iOS 13+ kan deze worden weggelaten omdat het systeem gegevens periodiek synchroniseert.
Voor complexere scenario's biedt App Group toegang tot het gedeelde bestandssysteem. Elk bestand dat in de containermap wordt gemaakt, is toegankelijk voor alle processen van de groep. Dit maakt het mogelijk een gedeelde Core Data-database, afbeeldingencache of tijdelijke bestanden te implementeren.
Om een gedeelde Core Data-opslag te gebruiken, maakt u een NSPersistentContainer met de URL van het .sqlite-bestand in de App Group-map. Zorg ervoor dat slechts één proces tegelijk in de database schrijft — gelijktijdig schrijven kan gegevens beschadigen. Typische architectuur: de hoofdapp schrijft, extensies lezen.
// Core Data instellen met App Group-container
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
}()
Een alternatieve benadering — bestandscache voor afbeeldingen. NSCache leeft alleen in het geheugen, maar via App Group kunt u gecachede afbeeldingen op schijf opslaan in de gedeelde map. De widgetextensie krijgt toegang tot dezelfde bestanden en toont actuele gegevens zonder extra laden vanuit het netwerk.
| Scenario | Aanbevolen API | Gegevensgrootte |
|---|---|---|
| Instellingen en vlaggen | UserDefaults suiteName | tot 1 KB |
| Afbeeldingencache | FileManager + NSCache | tot 100 MB |
| Gestructureerde gegevens | Core Data store | tot 500 MB |
| Tijdelijke bestanden | FileManager temporary | tot 50 MB |
Houd er bij het werken met gedeelde bestanden rekening mee dat het systeem de extensie op elk moment kan verwijderen. Gebruik NSFileCoordinator voor toegangscoördinatie om beschadiging van gegevens bij gelijktijdig schrijven door verschillende processen te voorkomen.
Veelgestelde vragen
App Group is een iOS-mechanisme dat een gedeelde container creëert voor gegevensopslag tussen de app en zijn extensies. Het stelt processen met dezelfde groep-ID in staat bestanden, UserDefaults-instellingen en Core Data-gegevens uit te wisselen via een enkele map in het bestandssysteem.
Open de Capabilities van het target in Xcode, schakel App Groups in en voeg een ID toe in het formaat group.*. Herhaal vervolgens dezelfde stappen voor elke extensie die toegang moet hebben tot de gedeelde container. Zorg ervoor dat alle deelnemers dezelfde groep-ID gebruiken.
Alle typen iOS-extensies ondersteunen App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard en andere. Elke extensie moet een apart entitlements-bestand hebben met dezelfde groep-ID als de hoofdapp.
Ja, maar alleen als de apps zijn ondertekend met hetzelfde ontwikkelaarscertificaat en dezelfde team-ID hebben. Apple garandeert veiligheid via codehandtekening: twee apps van verschillende ontwikkelaars hebben zelfs met dezelfde groep-ID geen toegang tot dezelfde container.
Gebruik UserDefaults met suite name voor kleine instellingen, FileManager voor bestanden en Core Data voor gestructureerde gegevens. Al deze API's werken met de App Group-map — het volstaat de groep-ID op te geven bij initialisatie. Zorg voor Core Data dat de opslag-URL naar de gedeelde map verwijst.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook