App Group: vad är det, skapa en delad container och konfigurera åtkomst

Författare: IT Sectr Publicerad: 2026-06-17 Lästid: 8 min

App Group är en iOS-mekanism som skapar en delad container för datautbyte mellan appen och dess tillägg. Utan den arbetar varje process (huvudapp, widget, share extension) i en isolerad sandlåda och har inte tillgång till data från närliggande komponent. Enligt Apple Developer Documentation, 2026 löser App Group detta problem genom en unik gruppidentifierare som anges i entitlements. Det är ett grundläggande verktyg för att skapa en konsekvent användarupplevelse i iOS-ekosystemet.

Huvudpunkter

  • App Group — en delad katalog i iOS-filsystemet, tillgänglig för appen och dess tillägg.
  • Identifier bildas enligt mönstret group.* och läggs till i Capabilities för Xcode-projektet.
  • UserDefaults med suite name möjliggör synkronisering av inställningar mellan processer utan extra kod.
  • Core Data via App Group tillåter tillägg att läsa och skriva data i den delade databasen med korrekt konfiguration av Store URL.
  • Säkerhet garanteras genom att endast processer med samma team ID och entitlement har åtkomst till containern.

Vad är App Group?

App Group är en mekanism i iOS-operativsystemet som tillhandahåller ett delat lagringsområde för flera processer från en utvecklare. Utan den arbetar varje tillägg i sin egen sandlåda och kan inte läsa data som skrivits av en annan komponent. App Group löser denna isolering genom att skapa en katalog i filsystemet som är tillgänglig för alla processer med korrekta entitlements.

Gruppidentifieraren börjar med prefixet group. och anges i projektets entitlements-fil. I Xcode läggs denna identifierare till via Capabilities — systemet inkluderar den automatiskt i appens signatur. Efter konfiguration får alla medlemmar i gruppen tillgång till den delade katalogen på sökvägen Library/Application Support/ inuti containern.

Enligt Apple WWDC 2020 Session 10026 täcker App Group tre nyckelscenarier: synkronisering av inställningar via NSUserDefaults, delad åtkomst till filer via FileManager och delad användning av Core Data med ett enda lager. För varje scenario räcker det att ange gruppidentifieraren i motsvarande API.

Hur fungerar den delade App Group-containern

iOS skapar den delade containern vid första körningen av en process som har entitlement com.apple.security.application-groups. Fysiskt finns containern i en systemkatalog — dess sökväg skiljer sig från sandlådan för huvudappen och tilläggen, men alla auktoriserade processer har läs- och skrivrättigheter.

Åtkomsträttigheter och säkerhet

Apple garanterar säkerheten för App Group genom kopplingen mellan team ID och kodsignatur. En process som inte är signerad med samma utvecklarcertifikat kan inte få åtkomst till gruppens container. Detta förhindrar dataläckage mellan appar från olika utvecklare.

Gruppidentifierare

Identifierarens format: group.<team-id>.<name>. Till exempel group.ABC123DEFG.widget-data. På en enhet kan flera grupper skapas, var och en med sin egen uppsättning deltagare. En app kan tillhöra flera App Groups samtidigt — detta är användbart för att separera data från olika tillägg.

swift
// Hämta App Group-containerns URL
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Skapa en fil i den delade containern
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

FileManager tillhandahåller metoden containerURL(forSecurityApplicationGroupIdentifier:) som returnerar URL:en till den delade katalogen. Det är viktigt att anropa denna metod i varje process separat — sökvägen är fysiskt densamma, men varje process ser den genom sitt eget säkerhetsperspektiv.

Konfigurera App Group i Xcode

Att aktivera App Group i Xcode börjar med Capabilities — omkopplaren App Groups lägger till entitlement i projektet. Apple Developer Portal kräver också att appens identifierare innehåller denna capability. Utan den kommer kodsignaturen inte att fungera på en verklig enhet.

Steg-för-steg-konfiguration

Öppna projektet i Xcode, välj appens target och gå till fliken Signing & Capabilities. Tryck på + och välj App Groups. Skapa en ny grupp eller välj en befintlig. Upprepa samma steg för varje tillägg som ska ha åtkomst till den delade containern. Alla deltagare måste använda samma gruppidentifierare.

Kontrollera entitlements

Efter aktivering av Capabilities skapar Xcode automatiskt filen .entitlements med nyckeln com.apple.security.application-groups och en array av identifierare. Se till att alla nödvändiga tillägg har denna fil med korrekt team ID i gruppidentifieraren.

xml
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
    <string>group.com.example.shared</string>
</array>

Om ditt projekt har flera tillägg (Today Widget, Share Extension, Notification Service) bör var och en ha en egen entitlements-fil med samma grupp. Saknade entitlements för något target är en vanlig orsak till att ett tillägg inte ser delad data.

Använda UserDefaults med App Group

Det enklaste sättet att synkronisera data mellan appen och tilläggen — UserDefaults med angivande av suite name. Istället för standard UserDefaults.standard skapar du en instans med App Group-identifieraren och alla processer läser samma inställningar.

Enligt Apple Human Interface Guidelines är denna mekanism lämplig för att synkronisera status: valt tema, favoritobjekt, onbording-flaggor. Den är dock inte avsedd för stora datamängder eller konkurrerande skrivoperationer — för det använder du filer eller Core Data.

swift
// Skriv till UserDefaults App Group (huvudapp)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// Läs från UserDefaults App Group (widgettillägg)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

Observera: UserDefaults-instansen med suiteName skapas i varje process separat, men läser från en plist-fil i den delade containern. Metoden synchronize() garanterar omedelbar skrivning till disk — i iOS 13+ kan den utelämnas eftersom systemet synkroniserar data periodiskt.

Delad åtkomst till filer och Core Data

För mer komplexa scenarier ger App Group åtkomst till det delade filsystemet. Alla filer som skapas i containerns katalog är tillgängliga för alla processer i gruppen. Detta möjliggör implementering av en delad Core Data-databas, bildcache eller temporära filer.

Konfigurera Core Data med App Group

För att använda delad Core Data-lagring, skapa en NSPersistentContainer med URL:en till .sqlite-filen i App Group-katalogen. Se till att endast en process skriver till databasen åt gången — konkurrerande skrivning kan skada data. Typisk arkitektur: huvudappen skriver, tilläggen läser.

swift
// Konfigurera Core Data med 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
}()

Ett alternativt tillvägagångssätt — bildcache på disk. NSCache lever bara i minnet, men via App Group kan du spara cachade bilder på disk i den delade katalogen. Widget-tillägget får åtkomst till samma filer och visar aktuell data utan extra nätverksladdning.

ScenarioRekommenderat APIDatastorlek
Inställningar och flaggorUserDefaults suiteNameupp till 1 KB
BildcacheFileManager + NSCacheupp till 100 MB
Strukturerad dataCore Data storeupp till 500 MB
Temporära filerFileManager temporaryupp till 50 MB

När du arbetar med delade filer, tänk på att systemet kan avlasta tillägget när som helst. Använd NSFileCoordinator för åtkomstkoordinering för att undvika dataskador vid samtidig skrivning av olika processer.

Vanliga frågor

Vad är App Group i iOS?

App Group är en iOS-mekanism som skapar en delad container för datalagring mellan appen och dess tillägg. Den tillåter processer med samma gruppidentifierare att utbyta filer, UserDefaults-inställningar och Core Data-data via en enda katalog i filsystemet.

Hur skapar jag en App Group i Xcode?

Öppna targetets Capabilities i Xcode, aktivera App Groups och lägg till en identifierare i formatet group.*. Upprepa sedan samma steg för varje tillägg som ska ha åtkomst till den delade containern. Se till att alla deltagare använder samma gruppidentifierare.

Vilka tillägg kan använda App Group?

Alla typer av iOS-tillägg stöder App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard och andra. Varje tillägg bör ha en separat entitlements-fil med samma gruppidentifierare som huvudappen.

Kan App Group användas mellan olika appar?

Ja, men endast om apparna är signerade med samma utvecklarcertifikat och har samma team ID. Apple garanterar säkerhet genom kodsignatur: två appar från olika utvecklare kan inte komma åt samma container ens med samma gruppidentifierare.

Hur synkroniserar jag data via App Group mellan appen och widgeten?

Använd UserDefaults med suite name för små inställningar, FileManager för filer och Core Data för strukturerad data. Alla dessa API:er fungerar med App Group-katalogen — det räcker att ange gruppidentifieraren vid initiering. För Core Data, se till att lagrings-URL:en pekar på den delade katalogen.

Sammanfattning

  • App Group är det enda sättet att organisera datautbyte mellan en iOS-app och dess tillägg via en delad container i filsystemet.
  • Gruppidentifieraren har formatet group.<team-id>.<name> och läggs till via Xcode Capabilities med en obligatorisk entitlements-fil för varje target.
  • UserDefaults med suite name är den enklaste metoden för att synkronisera inställningar och flaggor mellan processer utan filhantering.
  • Core Data med App Group kräver att lagrings-URL:en anges inuti containern och åtkomstkoordinering mellan processer för att undvika databasskador.
  • FileManager.containerURL returnerar sökvägen till den delade katalogen som är densamma för alla processer med korrekta entitlements.
  • Datasäkerhet garanteras genom kontroll av team ID och kodsignatur — endast appar från samma utvecklare har åtkomst till den delade containern.
  • För konkurrerande skrivning i delade filer, använd NSFileCoordinator, och för synkronisering av ändringar mellan processer — Darwin Notifications eller CFNotificationCenter.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också