App Group : création d’un conteneur partagé et configuration d’accès

Auteur : IT Sectr Publié le : 2026-06-17 Temps de lecture : 8 min

App Group est un mécanisme iOS qui crée un conteneur partagé pour l’échange de données entre une application et ses extensions. Sans lui, chaque processus (application principale, widget, extension de partage) fonctionne dans un bac à sable isolé et n’a pas accès aux données d’un composant voisin. Selon Apple Developer Documentation, 2026, App Group résout ce problème grâce à un identifiant de groupe unique spécifié dans les droits. C’est un outil fondamental pour créer une expérience utilisateur cohérente dans l’écosystème iOS.

Points clés

  • App Group — un répertoire partagé sur le système de fichiers iOS accessible à l’application et à ses extensions.
  • Identifiant suit le modèle group.* et est ajouté dans les Capabilities du projet Xcode.
  • UserDefaults avec suite name permet de synchroniser les paramètres entre les processus sans code supplémentaire.
  • Core Data via App Group permet aux extensions de lire et d’écrire des données dans une base de données partagée avec une configuration Store URL correcte.
  • Sécurité est garantie car seuls les processus avec le même team ID et les mêmes droits peuvent accéder au conteneur.

Qu’est-ce qu’App Group ?

App Group est un mécanisme du système d’exploitation iOS qui fournit une zone de stockage partagée pour plusieurs processus du même développeur. Sans lui, chaque extension fonctionne dans son propre bac à sable et ne peut pas lire les données écrites par un autre composant. App Group résout cet isolement en créant un répertoire sur le système de fichiers accessible à tous les processus avec les droits appropriés.

L’identifiant de groupe commence par le préfixe group. et est spécifié dans le fichier de droits du projet. Dans Xcode, cet identifiant est ajouté via Capabilities — le système l’inclut automatiquement dans la signature de l’application. Après configuration, tous les membres du groupe ont accès au répertoire partagé sous Library/Application Support/ dans le conteneur.

Selon Apple WWDC 2020 Session 10026, App Group couvre trois scénarios clés : la synchronisation des paramètres via NSUserDefaults, le partage de fichiers via FileManager et Core Data partagé avec un seul magasin. Chaque scénario nécessite simplement de spécifier l’identifiant de groupe dans l’API correspondante.

Comment fonctionne le conteneur partagé d’App Group

iOS crée le conteneur partagé lors de la première exécution d’un processus avec le droit com.apple.security.application-groups. Physiquement, le conteneur se trouve dans un répertoire système — son chemin diffère du bac à sable de l’application principale et des extensions, mais tous les processus autorisés ont des permissions de lecture et d’écriture.

Droits d’accès et sécurité

Apple garantit la sécurité d’App Group par la combinaison du team ID et de la signature de code. Un processus non signé avec le même certificat de développeur ne peut pas accéder au conteneur du groupe. Cela empêche les fuites de données entre les applications de différents développeurs.

Identifiant de groupe

Le format de l’identifiant est : group.<team-id>.<name>. Par exemple, group.ABC123DEFG.widget-data. Plusieurs groupes peuvent être créés sur un même appareil, chacun avec son propre ensemble de membres. Une seule application peut appartenir à plusieurs App Groups simultanément — cela est utile pour séparer les données de différentes extensions.

swift
// 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 fournit la méthode containerURL(forSecurityApplicationGroupIdentifier:) qui retourne l’URL du répertoire partagé. Il est important d’appeler cette méthode séparément dans chaque processus — le chemin est physiquement le même, mais chaque processus le voit à travers son propre prisme de sécurité.

Configuration d’App Group dans Xcode

L’activation d’App Group dans Xcode commence par les Capabilities — l’interrupteur App Groups ajoute le droit au projet. Apple Developer Portal exige également que l’identifiant de l’application inclue cette capacité. Sans cela, la signature de code ne fonctionnera pas sur un appareil réel.

Configuration étape par étape

Ouvrez votre projet dans Xcode, sélectionnez la cible de l’application et allez dans l’onglet Signing & Capabilities. Cliquez sur + et choisissez App Groups. Créez un nouveau groupe ou sélectionnez un groupe existant. Répétez les mêmes étapes pour chaque extension qui a besoin d’accéder au conteneur partagé. Tous les participants doivent utiliser le même identifiant de groupe.

Vérification des droits

Après avoir activé les Capabilities, Xcode crée automatiquement un fichier .entitlements avec la clé com.apple.security.application-groups et un tableau d’identifiants. Assurez-vous que toutes les extensions nécessaires ont ce fichier avec le bon team ID dans l’identifiant de groupe.

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

Si votre projet a plusieurs extensions (Today Widget, Share Extension, Notification Service), chacune doit avoir son propre fichier de droits avec le même groupe. L’absence de droits sur une cible est une raison courante pour laquelle une extension ne voit pas les données partagées.

Utilisation de UserDefaults avec App Group

La façon la plus simple de synchroniser les données entre une application et ses extensions est UserDefaults avec un suite name. Au lieu de UserDefaults.standard standard, vous créez une instance avec l’identifiant App Group, et tous les processus lisent les mêmes paramètres.

Selon les Apple Human Interface Guidelines, ce mécanisme convient pour synchroniser l’état : thème sélectionné, favoris, indicateurs d’intégration. Cependant, il n’est pas conçu pour de grands volumes de données ou des opérations d’écriture simultanées — pour cela, utilisez des fichiers ou Core Data.

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

Remarque : l’instance UserDefaults avec suiteName est créée séparément dans chaque processus mais lit à partir du même fichier plist dans le conteneur partagé. La méthode synchronize() garantit une écriture immédiate sur le disque — dans iOS 13+, elle peut être omise car le système synchronise les données périodiquement.

Accès partagé aux fichiers et à Core Data

Pour des scénarios plus complexes, App Group fournit un accès à un système de fichiers partagé. Tout fichier créé dans le répertoire du conteneur est accessible à tous les processus du groupe. Cela permet une base de données Core Data partagée, un cache d’images ou des fichiers temporaires.

Configuration de Core Data avec App Group

Pour utiliser un magasin Core Data partagé, créez un NSPersistentContainer avec l’URL du fichier .sqlite situé dans le répertoire App Group. Assurez-vous qu’un seul processus écrit dans la base de données à la fois — l’écriture simultanée peut corrompre les données. Une architecture typique : l’application principale écrit, les extensions lisent.

swift
// 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
}()

Une approche alternative est un cache d’images basé sur des fichiers. NSCache vit uniquement en mémoire, mais via App Group, vous pouvez enregistrer les images mises en cache sur le disque dans le répertoire partagé. L’extension widget peut accéder aux mêmes fichiers et afficher des données à jour sans téléchargements réseau supplémentaires.

ScénarioAPI recommandéeTaille des données
Paramètres et indicateursUserDefaults suiteNamejusqu’à 1 Ko
Cache d’imagesFileManager + NSCachejusqu’à 100 Mo
Données structuréesMagasin Core Datajusqu’à 500 Mo
Fichiers temporairesFileManager temporairejusqu’à 50 Mo

Lorsque vous travaillez avec des fichiers partagés, gardez à l’esprit que le système peut terminer l’extension à tout moment. Utilisez NSFileCoordinator pour coordonner l’accès et éviter la corruption des données lorsque plusieurs processus écrivent simultanément.

Questions fréquentes

Qu’est-ce qu’App Group dans iOS ?

App Group est un mécanisme iOS qui crée un conteneur partagé pour stocker des données entre une application et ses extensions. Il permet aux processus avec le même identifiant de groupe d’échanger des fichiers, des paramètres UserDefaults et des données Core Data via un seul répertoire sur le système de fichiers.

Comment créer un App Group dans Xcode ?

Ouvrez les Capabilities de la cible dans Xcode, activez App Groups et ajoutez un identifiant au format group.*. Répétez ensuite les mêmes étapes pour chaque extension qui a besoin d’accéder au conteneur partagé. Assurez-vous que tous les participants utilisent le même identifiant de groupe.

Quelles extensions peuvent utiliser App Group ?

Tous les types d’extensions iOS prennent en charge App Group : Today Widget (extension widget), Share Extension, Notification Service Extension, Custom Keyboard et autres. Chaque extension doit avoir un fichier de droits séparé avec le même identifiant de groupe que l’application principale.

Peut-on utiliser App Group entre différentes applications ?

Oui, mais uniquement si les applications sont signées avec le même certificat de développeur et ont le même team ID. Apple garantit la sécurité via la signature de code : deux applications de développeurs différents ne peuvent pas accéder au même conteneur même avec un identifiant de groupe identique.

Comment synchroniser les données via App Group entre une application et un widget ?

Utilisez UserDefaults avec suite name pour les petits paramètres, FileManager pour les fichiers et Core Data pour les données structurées. Toutes ces API fonctionnent avec le répertoire App Group — il suffit de spécifier l’identifiant de groupe lors de l’initialisation. Pour Core Data, assurez-vous que l’URL du magasin pointe vers le répertoire partagé.

Résumé

  • App Group est le seul moyen d’organiser l’échange de données entre une application iOS et ses extensions via un conteneur partagé sur le système de fichiers.
  • L’identifiant de groupe suit le format group.<team-id>.<name> et est ajouté via les Capabilities Xcode avec un fichier de droits obligatoire pour chaque cible.
  • UserDefaults avec suite name est la méthode la plus simple pour synchroniser les paramètres et les indicateurs entre les processus sans gérer de fichiers.
  • Core Data avec App Group nécessite de spécifier l’URL du magasin dans le conteneur et de coordonner l’accès entre les processus pour éviter la corruption de la base de données.
  • FileManager.containerURL retourne le chemin vers le répertoire partagé, qui est le même pour tous les processus avec les droits corrects.
  • La sécurité des données est assurée par la vérification du team ID et de la signature de code — seules les applications du même développeur ont accès au conteneur partagé.
  • Pour les écritures simultanées dans des fichiers partagés, utilisez NSFileCoordinator, et pour synchroniser les changements entre les processus, utilisez Darwin Notifications ou CFNotificationCenter.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi