App Group: wat is het, maken van een gedeelde container en toegangsconfiguratie

Auteur: IT Sectr Gepubliceerd: 2026-06-17 Leestijd: 8 min

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 — een gedeelde map in het iOS-bestandssysteem, toegankelijk voor de app en zijn extensies.
  • Identifier wordt gevormd volgens het patroon group.* en wordt toegevoegd in de Capabilities van het Xcode-project.
  • UserDefaults met suite name maakt synchronisatie van instellingen tussen processen mogelijk zonder extra code.
  • Core Data via App Group stelt extensies in staat gegevens te lezen en te schrijven in de gedeelde database bij correcte configuratie van Store URL.
  • Veiligheid wordt gegarandeerd doordat alleen processen met dezelfde team-ID en entitlement toegang hebben tot de container.

Wat is App Group?

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.

Hoe werkt de gedeelde App Group-container

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.

Toegangsrechten en veiligheid

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.

Groep-ID

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.

swift
// 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.

App Group configureren in Xcode

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.

Stapsgewijze configuratie

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.

Entitlements controleren

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.

xml
<!-- 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.

UserDefaults gebruiken met App Group

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.

swift
// 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.

Gedeelde toegang tot bestanden en Core Data

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.

Core Data configureren met App Group

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.

swift
// 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.

ScenarioAanbevolen APIGegevensgrootte
Instellingen en vlaggenUserDefaults suiteNametot 1 KB
AfbeeldingencacheFileManager + NSCachetot 100 MB
Gestructureerde gegevensCore Data storetot 500 MB
Tijdelijke bestandenFileManager temporarytot 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

Wat is App Group in iOS?

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.

Hoe maak ik een App Group in Xcode?

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.

Welke extensies kunnen App Group 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.

Kan App Group tussen verschillende apps worden gebruikt?

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.

Hoe synchroniseer ik gegevens via App Group tussen de app en widget?

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

  • App Group is de enige manier om gegevensuitwisseling tussen een iOS-app en zijn extensies te organiseren via een gedeelde container in het bestandssysteem.
  • De groep-ID heeft het formaat group.<team-id>.<name> en wordt toegevoegd via Xcode Capabilities met een verplicht entitlements-bestand voor elk target.
  • UserDefaults met suite name is de eenvoudigste methode om instellingen en vlaggen tussen processen te synchroniseren zonder bestandsbeheer.
  • Core Data met App Group vereist het opgeven van de opslag-URL in de container en toegangscoördinatie tussen processen om databaserevaluatie te voorkomen.
  • FileManager.containerURL retourneert het pad naar de gedeelde map dat hetzelfde is voor alle processen met correcte entitlements.
  • Gegevensbeveiliging wordt gegarandeerd door verificatie van team-ID en codehandtekening — alleen apps van dezelfde ontwikkelaar hebben toegang tot de gedeelde container.
  • Voor gelijktijdig schrijven in gedeelde bestanden gebruikt u NSFileCoordinator en voor synchronisatie van wijzigingen tussen processen Darwin Notifications of CFNotificationCenter.

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.

Bespreek het project

Lees ook