App Group ist ein iOS-Mechanismus, der einen gemeinsamen Container für den Datenaustausch zwischen einer App und ihren Erweiterungen erstellt. Ohne ihn arbeitet jeder Prozess (Haupt-App, Widget, Share Extension) in einer isolierten Sandbox und hat keinen Zugriff auf die Daten einer benachbarten Komponente. Laut Apple Developer Documentation, 2026 löst App Group dieses Problem durch eine eindeutige Gruppenkennung, die in den Berechtigungen angegeben wird. Es ist ein grundlegendes Werkzeug zur Schaffung einer konsistenten Benutzererfahrung im iOS-Ökosystem.
Wichtige Punkte
App Group ist ein Mechanismus des iOS-Betriebssystems, der einen gemeinsamen Speicherbereich für mehrere Prozesse desselben Entwicklers bereitstellt. Ohne ihn arbeitet jede Erweiterung in ihrer eigenen Sandbox und kann keine Daten lesen, die von einer anderen Komponente geschrieben wurden. App Group löst diese Isolation, indem es ein Verzeichnis im Dateisystem erstellt, das für alle Prozesse mit den korrekten Berechtigungen zugänglich ist.
Die Gruppenkennung beginnt mit dem Präfix group. und wird in der Berechtigungsdatei des Projekts angegeben. In Xcode wird diese Kennung über Capabilities hinzugefügt — das System bindet sie automatisch in die Signatur der App ein. Nach der Konfiguration erhalten alle Gruppenmitglieder Zugriff auf das gemeinsame Verzeichnis unter Library/Application Support/ im Container.
Laut Apple WWDC 2020 Session 10026 deckt App Group drei wichtige Szenarien ab: Synchronisierung von Einstellungen über NSUserDefaults, gemeinsame Dateinutzung über FileManager und gemeinsame Core Data mit einem einzigen Speicher. Jedes Szenario erfordert lediglich die Angabe der Gruppenkennung in der entsprechenden API.
iOS erstellt den gemeinsamen Container beim ersten Start eines Prozesses mit der Berechtigung com.apple.security.application-groups. Physisch befindet sich der Container in einem Systemverzeichnis — sein Pfad unterscheidet sich von der Sandbox der Haupt-App und der Erweiterungen, aber alle autorisierten Prozesse haben Lese- und Schreibrechte.
Apple gewährleistet die Sicherheit von App Group durch die Kombination von Team-ID und Code-Signatur. Ein Prozess, der nicht mit demselben Entwicklerzertifikat signiert ist, kann nicht auf den Gruppencontainer zugreifen. Dies verhindert Datenlecks zwischen Apps verschiedener Entwickler.
Das Format der Kennung ist: group.<team-id>.<name>. Zum Beispiel group.ABC123DEFG.widget-data. Auf einem Gerät können mehrere Gruppen erstellt werden, jede mit ihrem eigenen Mitgliedersatz. Eine einzelne App kann gleichzeitig mehreren App Groups angehören — dies ist nützlich, um Daten verschiedener Erweiterungen zu trennen.
// Get the App Group container URL
guard let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }
// Create a file in the shared container
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)
FileManager bietet die Methode containerURL(forSecurityApplicationGroupIdentifier:), die die URL des gemeinsamen Verzeichnisses zurückgibt. Es ist wichtig, diese Methode in jedem Prozess separat aufzurufen — der Pfad ist physisch derselbe, aber jeder Prozess sieht ihn durch seine eigene Sicherheitsperspektive.
Die Aktivierung von App Group in Xcode beginnt mit den Capabilities — der App Groups-Schalter fügt die Berechtigung zum Projekt hinzu. Das Apple Developer Portal erfordert ebenfalls, dass die App-Kennung diese Fähigkeit enthält. Ohne sie funktioniert die Code-Signatur auf einem echten Gerät nicht.
Öffnen Sie Ihr Projekt in Xcode, wählen Sie das App-Target aus und gehen Sie zum Tab Signing & Capabilities. Klicken Sie auf + und wählen Sie App Groups. Erstellen Sie eine neue Gruppe oder wählen Sie eine vorhandene aus. Wiederholen Sie die gleichen Schritte für jede Erweiterung, die Zugriff auf den gemeinsamen Container benötigt. Alle Teilnehmer müssen dieselbe Gruppenkennung verwenden.
Nach der Aktivierung von Capabilities erstellt Xcode automatisch eine .entitlements-Datei mit dem Schlüssel com.apple.security.application-groups und einem Array von Kennungen. Stellen Sie sicher, dass alle erforderlichen Erweiterungen diese Datei mit der korrekten Team-ID in der Gruppenkennung haben.
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
Wenn Ihr Projekt mehrere Erweiterungen hat (Today Widget, Share Extension, Notification Service), muss jede ihre eigene Berechtigungsdatei mit derselben Gruppe haben. Das Fehlen von Berechtigungen bei einem Target ist ein häufiger Grund, warum eine Erweiterung gemeinsame Daten nicht sehen kann.
Der einfachste Weg, Daten zwischen einer App und ihren Erweiterungen zu synchronisieren, ist UserDefaults mit einem Suite-Namen. Anstelle des Standard-UserDefaults.standard erstellen Sie eine Instanz mit der App Group-Kennung, und alle Prozesse lesen dieselben Einstellungen.
Laut den Apple Human Interface Guidelines eignet sich dieser Mechanismus zum Synchronisieren des Zustands: ausgewähltes Thema, Favoriten, Onboarding-Flags. Er ist jedoch nicht für große Datenmengen oder gleichzeitige Schreibvorgänge gedacht — dafür verwenden Sie Dateien oder Core Data.
// Write to UserDefaults App Group (main app)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()
// Read from UserDefaults App Group (widget extension)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false
Beachten Sie: Die UserDefaults-Instanz mit suiteName wird in jedem Prozess separat erstellt, liest aber aus derselben plist-Datei im gemeinsamen Container. Die Methode synchronize() garantiert sofortiges Schreiben auf die Festplatte — in iOS 13+ kann sie weggelassen werden, da das System die Daten regelmäßig synchronisiert.
Für komplexere Szenarien bietet App Group Zugriff auf ein gemeinsames Dateisystem. Jede Datei, die im Containerverzeichnis erstellt wird, ist für alle Prozesse der Gruppe zugänglich. Dies ermöglicht eine gemeinsame Core Data-Datenbank, einen Bildercache oder temporäre Dateien.
Um einen gemeinsamen Core Data-Speicher zu verwenden, erstellen Sie einen NSPersistentContainer mit der URL der .sqlite-Datei im App Group-Verzeichnis. Stellen Sie sicher, dass jeweils nur ein Prozess in die Datenbank schreibt — gleichzeitiges Schreiben kann die Daten beschädigen. Eine typische Architektur: Die Haupt-App schreibt, die Erweiterungen lesen.
// Setup Core Data with 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
}()
Ein alternativer Ansatz ist ein dateibasierter Bildercache. NSCache lebt nur im Speicher, aber über App Group können Sie zwischengespeicherte Bilder auf der Festplatte im gemeinsamen Verzeichnis speichern. Die Widget-Erweiterung kann auf dieselben Dateien zugreifen und aktuelle Daten ohne zusätzliche Netzwerk-Downloads anzeigen.
| Szenario | Empfohlene API | Datengröße |
|---|---|---|
| Einstellungen und Flags | UserDefaults suiteName | bis zu 1 KB |
| Bildercache | FileManager + NSCache | bis zu 100 MB |
| Strukturierte Daten | Core Data Store | bis zu 500 MB |
| Temporäre Dateien | FileManager temporär | bis zu 50 MB |
Beachten Sie bei der Arbeit mit gemeinsamen Dateien, dass das System die Erweiterung jederzeit beenden kann. Verwenden Sie NSFileCoordinator zur Koordination des Zugriffs, um Datenbeschädigungen bei gleichzeitigem Schreiben durch mehrere Prozesse zu vermeiden.
Häufig gestellte Fragen
App Group ist ein iOS-Mechanismus, der einen gemeinsamen Container zum Speichern von Daten zwischen einer App und ihren Erweiterungen erstellt. Er ermöglicht Prozessen mit derselben Gruppenkennung den Austausch von Dateien, UserDefaults-Einstellungen und Core Data-Daten über ein einziges Verzeichnis im Dateisystem.
Öffnen Sie die Capabilities des Targets in Xcode, aktivieren Sie App Groups und fügen Sie eine Kennung im Format group.* hinzu. Wiederholen Sie dann die gleichen Schritte für jede Erweiterung, die Zugriff auf den gemeinsamen Container benötigt. Stellen Sie sicher, dass alle Teilnehmer dieselbe Gruppenkennung verwenden.
Alle Arten von iOS-Erweiterungen unterstützen App Group: Today Widget (Widget-Erweiterung), Share Extension, Notification Service Extension, Custom Keyboard und andere. Jede Erweiterung muss eine separate Berechtigungsdatei mit derselben Gruppenkennung wie die Haupt-App haben.
Ja, aber nur wenn die Apps mit demselben Entwicklerzertifikat signiert sind und dieselbe Team-ID haben. Apple gewährleistet Sicherheit durch Code-Signatur: Zwei Apps verschiedener Entwickler können nicht auf denselben Container zugreifen, selbst mit einer identischen Gruppenkennung.
Verwenden Sie UserDefaults mit Suite-Namen für kleine Einstellungen, FileManager für Dateien und Core Data für strukturierte Daten. Alle diese APIs arbeiten mit dem App Group-Verzeichnis — geben Sie einfach die Gruppenkennung bei der Initialisierung an. Stellen Sie bei Core Data sicher, dass die Store-URL auf das gemeinsame Verzeichnis verweist.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch