App Group: qué es, creación de un contenedor compartido y configuración de acceso

Autor: IT Sectr Publicado: 2026-06-17 Tiempo de lectura: 8 min

App Group es un mecanismo de iOS que crea un contenedor compartido para el intercambio de datos entre una aplicación y sus extensiones. Sin él, cada proceso (aplicación principal, widget, share extension) funciona en un entorno aislado y no tiene acceso a los datos de un componente vecino. Según Apple Developer Documentation, 2026, App Group resuelve este problema mediante un identificador de grupo único especificado en los entitlements. Es una herramienta fundamental para crear una experiencia de usuario consistente en el ecosistema iOS.

Puntos clave

  • App Group — un directorio compartido en el sistema de archivos de iOS accesible para la aplicación y sus extensiones.
  • Identifier sigue el patrón group.* y se agrega en las Capabilities del proyecto Xcode.
  • UserDefaults con suite name permite sincronizar configuraciones entre procesos sin código adicional.
  • Core Data a través de App Group permite a las extensiones leer y escribir datos en una base de datos compartida con la configuración correcta de Store URL.
  • Seguridad está garantizada porque solo los procesos con el mismo team ID y entitlement pueden acceder al contenedor.

¿Qué es App Group?

App Group es un mecanismo del sistema operativo iOS que proporciona un área de almacenamiento compartida para múltiples procesos del mismo desarrollador. Sin él, cada extensión funciona en su propia zona aislada y no puede leer los datos escritos por otro componente. App Group resuelve este aislamiento creando un directorio en el sistema de archivos accesible para todos los procesos con los entitlements correctos.

El identificador de grupo comienza con el prefijo group. y se especifica en el archivo de entitlements del proyecto. En Xcode, este identificador se agrega a través de Capabilities — el sistema lo incluye automáticamente en la firma de la aplicación. Una vez configurado, todos los miembros del grupo obtienen acceso al directorio compartido en Library/Application Support/ dentro del contenedor.

Según Apple WWDC 2020 Session 10026, App Group cubre tres escenarios clave: sincronización de configuraciones mediante NSUserDefaults, uso compartido de archivos mediante FileManager y Core Data compartido con un único almacén. Cada escenario solo requiere especificar el identificador de grupo en la API correspondiente.

Cómo funciona el contenedor compartido de App Group

iOS crea el contenedor compartido la primera vez que se ejecuta cualquier proceso con el entitlement com.apple.security.application-groups. Físicamente, el contenedor se encuentra en un directorio del sistema — su ruta difiere del sandbox de la aplicación principal y las extensiones, pero todos los procesos autorizados tienen permisos de lectura y escritura.

Derechos de acceso y seguridad

Apple garantiza la seguridad de App Group mediante la combinación del team ID y la firma de código. Un proceso que no esté firmado con el mismo certificado de desarrollador no puede acceder al contenedor del grupo. Esto evita fugas de datos entre aplicaciones de diferentes desarrolladores.

Identificador de grupo

El formato del identificador es: group.<team-id>.<name>. Por ejemplo, group.ABC123DEFG.widget-data. Se pueden crear múltiples grupos en un dispositivo, cada uno con su propio conjunto de miembros. Una sola aplicación puede pertenecer a varios App Groups simultáneamente — esto es útil para separar datos de diferentes extensiones.

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 proporciona el método containerURL(forSecurityApplicationGroupIdentifier:), que devuelve la URL del directorio compartido. Es importante llamar a este método por separado en cada proceso — la ruta es físicamente la misma, pero cada proceso la ve a través de su propio prisma de seguridad.

Configuración de App Group en Xcode

Habilitar App Group en Xcode comienza con las Capabilities — el interruptor de App Groups agrega el entitlement al proyecto. Apple Developer Portal también requiere que el identificador de la aplicación incluya esta capability. Sin ella, la firma de código no funcionará en un dispositivo real.

Configuración paso a paso

Abra su proyecto en Xcode, seleccione el target de la aplicación y vaya a la pestaña Signing & Capabilities. Haga clic en + y elija App Groups. Cree o seleccione un grupo existente. Repita los mismos pasos para cada extensión que necesite acceso al contenedor compartido. Todos los participantes deben usar el mismo identificador de grupo.

Verificación de entitlements

Después de habilitar Capabilities, Xcode crea automáticamente un archivo .entitlements con la clave com.apple.security.application-groups y un array de identificadores. Asegúrese de que todas las extensiones necesarias tengan este archivo con el team ID correcto en el identificador de grupo.

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

Si su proyecto tiene varias extensiones (Today Widget, Share Extension, Notification Service), cada una debe tener su propio archivo de entitlements con el mismo grupo. La ausencia de entitlements en cualquier target es una razón común por la que una extensión no puede ver los datos compartidos.

Uso de UserDefaults con App Group

La forma más sencilla de sincronizar datos entre una aplicación y sus extensiones es UserDefaults con un suite name. En lugar del UserDefaults.standard estándar, crea una instancia con el identificador de App Group, y todos los procesos leen la misma configuración.

Según las Apple Human Interface Guidelines, este mecanismo es adecuado para sincronizar el estado: tema seleccionado, favoritos, indicadores de incorporación. Sin embargo, no está diseñado para grandes volúmenes de datos u operaciones de escritura concurrentes — para eso use archivos o 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

Tenga en cuenta: la instancia de UserDefaults con suiteName se crea por separado en cada proceso pero lee del mismo archivo plist en el contenedor compartido. El método synchronize() garantiza la escritura inmediata en disco — en iOS 13+ se puede omitir ya que el sistema sincroniza los datos periódicamente.

Acceso compartido a archivos y Core Data

Para escenarios más complejos, App Group proporciona acceso a un sistema de archivos compartido. Cualquier archivo creado en el directorio del contenedor es accesible para todos los procesos del grupo. Esto permite una base de datos Core Data compartida, caché de imágenes o archivos temporales.

Configuración de Core Data con App Group

Para usar un almacén de Core Data compartido, cree un NSPersistentContainer con la URL del archivo .sqlite ubicado en el directorio de App Group. Asegúrese de que solo un proceso escriba en la base de datos a la vez — la escritura concurrente puede dañar los datos. Una arquitectura típica: la aplicación principal escribe, las extensiones leen.

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

Un enfoque alternativo es un caché de imágenes basado en archivos. NSCache vive solo en memoria, pero a través de App Group puede guardar imágenes en caché en el disco en el directorio compartido. La extensión del widget accede a los mismos archivos y muestra datos actualizados sin descargas adicionales de red.

EscenarioAPI recomendadaTamaño de datos
Configuraciones y banderasUserDefaults suiteNamehasta 1 KB
Caché de imágenesFileManager + NSCachehasta 100 MB
Datos estructuradosCore Data storehasta 500 MB
Archivos temporalesFileManager temporalhasta 50 MB

Al trabajar con archivos compartidos, tenga en cuenta que el sistema puede finalizar la extensión en cualquier momento. Use NSFileCoordinator para coordinar el acceso y evitar la corrupción de datos cuando varios procesos escriben simultáneamente.

Preguntas frecuentes

¿Qué es App Group en iOS?

App Group es un mecanismo de iOS que crea un contenedor compartido para almacenar datos entre una aplicación y sus extensiones. Permite que los procesos con el mismo identificador de grupo intercambien archivos, configuraciones de UserDefaults y datos de Core Data a través de un único directorio en el sistema de archivos.

¿Cómo crear un App Group en Xcode?

Abra las Capabilities del target en Xcode, active App Groups y agregue un identificador en el formato group.*. Luego repita los mismos pasos para cada extensión que necesite acceso al contenedor compartido. Asegúrese de que todos los participantes usen el mismo identificador de grupo.

¿Qué extensiones pueden usar App Group?

Todos los tipos de extensiones de iOS admiten App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard y otras. Cada extensión debe tener un archivo de entitlements separado con el mismo identificador de grupo que la aplicación principal.

¿Se puede usar App Group entre diferentes aplicaciones?

Sí, pero solo si las aplicaciones están firmadas con el mismo certificado de desarrollador y tienen el mismo team ID. Apple garantiza la seguridad mediante la firma de código: dos aplicaciones de diferentes desarrolladores no pueden acceder al mismo contenedor incluso con un identificador de grupo idéntico.

¿Cómo sincronizar datos mediante App Group entre una aplicación y un widget?

Use UserDefaults con suite name para configuraciones pequeñas, FileManager para archivos y Core Data para datos estructurados. Todas estas API funcionan con el directorio de App Group — solo especifique el identificador de grupo durante la inicialización. Para Core Data, asegúrese de que la URL del almacén apunte al directorio compartido.

Resumen

  • App Group es la única forma de organizar el intercambio de datos entre una aplicación iOS y sus extensiones a través de un contenedor compartido en el sistema de archivos.
  • El identificador de grupo sigue el formato group.<team-id>.<name> y se agrega a través de las Capabilities de Xcode con un archivo de entitlements obligatorio para cada target.
  • UserDefaults con suite name es el método más simple para sincronizar configuraciones y banderas entre procesos sin necesidad de gestionar archivos.
  • Core Data con App Group requiere especificar la URL del almacén dentro del contenedor y coordinar el acceso entre procesos para evitar daños en la base de datos.
  • FileManager.containerURL devuelve la ruta al directorio compartido, que es la misma para todos los procesos con entitlements correctos.
  • La seguridad de los datos está garantizada por la verificación del team ID y la firma de código — solo las aplicaciones del mismo desarrollador tienen acceso al contenedor compartido.
  • Para escrituras concurrentes en archivos compartidos, use NSFileCoordinator, y para sincronizar cambios entre procesos, use Darwin Notifications o CFNotificationCenter.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también