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 ä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.
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.
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.
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.
// 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.
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.
Ö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.
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.
<!-- 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.
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.
// 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.
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.
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.
// 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.
| Scenario | Rekommenderat API | Datastorlek |
|---|---|---|
| Inställningar och flaggor | UserDefaults suiteName | upp till 1 KB |
| Bildcache | FileManager + NSCache | upp till 100 MB |
| Strukturerad data | Core Data store | upp till 500 MB |
| Temporära filer | FileManager temporary | upp 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
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.
Ö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.
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.
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.
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
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.
Läs också