Sandbox: qué es, principio de aislamiento y sistema de archivos

Autor: IT Sectr Publicado: 2026-07-09 Tiempo de lectura: 10 min

Sandbox es un entorno de ejecución aislado para aplicaciones de iOS que limita el acceso al sistema de archivos, la red, los recursos de hardware y los datos de otras aplicaciones. Cada aplicación recibe su propio entorno Sandbox al instalarse, y todas sus operaciones de archivos se redirigen automáticamente a esta zona aislada. Según la Apple App Sandbox Design Guide (2026), la arquitectura del sandbox se basa en tres niveles de protección: aislamiento del sistema de archivos, control de la comunicación entre procesos y separación de los recursos de hardware con solicitud explícita de permisos mediante entitlements.

Lo esencial

  • Sandbox — sistema de archivos aislado y entorno de ejecución, único para cada aplicación de iOS.
  • Cada aplicación tiene su propio directorio Sandbox con las subcarpetas Documents, Library, tmp y Bundle.
  • El acceso a otras aplicaciones está prohibido: el sistema bloquea la lectura, escritura y ejecución de código fuera del Sandbox.
  • Entitlements y Capabilities amplían el Sandbox: App Groups, iCloud y Security-Scoped Bookmarks requieren permiso explícito.
  • UIDocumentPicker y Share Extension son las únicas formas de intercambiar archivos entre aplicaciones aisladas.

Qué es el Sandbox

Sandbox es un sistema de control de acceso obligatorio (Mandatory Access Control) implementado a nivel del kernel de iOS (XNU — extensión de kernel Sandbox.kext). Cada aplicación recibe un perfil Sandbox UUID único al iniciarse, que determina a qué recursos se le permite acceder.

La arquitectura del Sandbox incluye tres componentes clave: File System Isolation (cada aplicación solo ve su propio contenedor), Network Access Control (las solicitudes a la red local pueden estar restringidas) e Inter-Process Communication (prohibición de IPC directo con otras aplicaciones). Apple introdujo el Sandbox en iOS 2.0 y desde entonces ha reforzado significativamente las restricciones en cada versión principal.

El Sandbox no es opcional — todas las aplicaciones de la App Store funcionan en el sandbox. El desarrollador no puede desactivar el Sandbox ni eludir sus restricciones. El intento de acceder a un recurso prohibido termina con un error de código EPERM (Operation not permitted) y una entrada en el registro del sistema.

swift
import Foundation

// Intento de acceso al archivo de otra aplicación: devuelve nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil: Sandbox bloquea el acceso

// Acceso correcto: dentro del propio Sandbox
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

let myFileURL = documentsURL.appendingPathComponent("notes.txt")
try "Hello, Sandbox!".write(to: myFileURL, atomically: true, encoding: .utf8)

Estructura del sandbox de la aplicación

El Sandbox de cada aplicación en iOS contiene varios directorios predefinidos accesibles a través de la API de Foundation. La ubicación en el soporte físico es /var/mobile/Containers/Data/Application/{UUID}/, pero los desarrolladores no deben usar esta ruta directamente: cambia en cada reinicio del dispositivo en las distintas versiones de iOS.

Los directorios principales del Sandbox: Bundle (.app — solo lectura, contiene el código ejecutable y los recursos), Documents (datos del usuario, se respaldan en iCloud), Library (Caches, Preferences, Application Support — con distintas reglas de copia de seguridad), tmp (archivos temporales, que el sistema elimina cuando falta espacio). Cada directorio tiene su propio ciclo de vida y política de almacenamiento.

La ruta física del Sandbox se puede obtener mediante NSHomeDirectory() o FileManager.url(for: .documentDirectory). Apple recomienda usar la API basada en URL, ya que abstrae la estructura interna del sistema de archivos y se mantiene estable ante cambios del macOS Sandbox en el escritorio.

Directorio del SandboxAcceso mediante FileManagerPermisos
Documents.documentDirectoryLectura y escritura
BundleBundle.main.bundlePathSolo lectura
Library.libraryDirectoryLectura y escritura
tmpNSTemporaryDirectory()Lectura y escritura
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Lectura y escritura

Acceso a archivos fuera del sandbox

El acceso directo al sistema de archivos de otras aplicaciones en iOS está completamente bloqueado. Aunque el desarrollador conozca el UUID del contenedor de otra aplicación, el Sandbox a nivel del kernel devuelve un error al intentar leer o escribir. Esta es una diferencia fundamental entre iOS y macOS, donde el Sandbox es más flexible.

Apple ofrece tres mecanismos legítimos para el intercambio de datos entre aplicaciones: UIDocumentPickerViewController (el usuario selecciona un archivo mediante la interfaz del sistema y la aplicación recibe una URL Security-Scoped), Share Extension (una extensión para pasar datos a otra aplicación) y App Groups (un directorio compartido para aplicaciones del mismo desarrollador).

UIDocumentPicker es la única forma de acceder a archivos de otras aplicaciones sin configuración previa. El usuario selecciona explícitamente un archivo a través del selector estándar del sistema, e iOS proporciona a la aplicación una URL Security-Scoped temporal. El acceso dura hasta que se cierra el selector o hasta que se llama a stopAccessingSecurityScopedResource.

Security-Scoped Bookmarks

Un Security-Scoped Bookmark es un mecanismo de iOS que permite conservar el acceso a un archivo fuera del Sandbox entre los lanzamientos de la aplicación. Cuando el usuario selecciona un archivo mediante UIDocumentPicker, la aplicación puede crear un bookmark a partir de la URL Security-Scoped y guardarlo en UserDefaults u otro almacenamiento.

En el siguiente lanzamiento, la aplicación restaura el acceso mediante URLByResolvingBookmarkData, que devuelve una URL Security-Scoped. Después hay que llamar a startAccessingSecurityScopedResource antes de leer el archivo y a stopAccessingSecurityScopedResource al terminar. El equilibrio de llamadas es obligatorio — cada start debe tener su correspondiente stop; de lo contrario, el sistema agota el límite de recursos Security-Scoped.

swift
// Crear Security-Scoped Bookmark
func createBookmark(for url: URL) -> Data? {
    return try? url.bookmarkData(
        options: .minimalBookmark,
        includingResourceValuesForKeys: nil,
        relativeTo: nil
    )
}

// Resolver los datos del bookmark a URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // El bookmark está obsoleto, hay que crear uno nuevo
    }
    
    return url
}

Limitación importante: los Security-Scoped Bookmarks no funcionan para archivos dentro del propio Sandbox, sino solo para archivos obtenidos mediante UIDocumentPicker o iCloud Drive. El bookmark contiene datos Security-Scoped que permiten al sistema identificar qué aplicación solicita acceso a qué archivo. Si el certificado de la aplicación caduca o cambia, el bookmark deja de ser válido.

Sandbox y App Groups

App Groups es un mecanismo de iOS que permite a varias aplicaciones (y sus extensiones) de un mismo desarrollador compartir un directorio Sandbox común. Para activarlo hay que añadir la Capability App Groups en Xcode e indicar el mismo identificador de grupo para todas las aplicaciones objetivo.

El directorio compartido de App Groups está fuera del Sandbox de cada aplicación individual, pero todas las aplicaciones del grupo tienen acceso completo de lectura y escritura. Esto permite intercambiar archivos, bases de datos (Core Data con el Store URL en el App Group) y UserDefaults (mediante initWithSuiteName) entre la aplicación principal, el Today Widget, la Watch Extension y la Share Extension.

Apple recomienda usar App Groups para la sincronización de estado entre la aplicación y sus extensiones. Por ejemplo, el widget Today Widget puede leer datos del directorio compartido de App Groups, donde la aplicación principal escribe los datos actualizados. Al mismo tiempo, cada aplicación sigue aislada de otros App Groups — solo las aplicaciones con el mismo identificador de grupo tienen acceso.

Limitaciones del sandbox en iOS

El Sandbox en iOS impone una serie de restricciones estrictas que hay que tener en cuenta durante el desarrollo. Las principales: prohibición de código dinámico (cargar y ejecutar código fuera del Sandbox), prohibición del acceso directo a la agenda de contactos, el calendario y las fotos sin permiso del usuario (Privacy framework), y restricciones para crear procesos hijos (fork y exec están prohibidos).

Red: las aplicaciones pueden conectarse a cualquier servidor remoto mediante TCP/UDP, pero el acceso a localhost está restringido — otras aplicaciones no pueden conectarse a un servidor dentro de tu aplicación (excepto en compilaciones de depuración). El UDP multicast y broadcast también se bloquea para las aplicaciones de la App Store.

Recursos de hardware: el acceso a la cámara, el micrófono, la geolocalización, Bluetooth y HealthKit requiere permiso explícito del usuario mediante el diálogo del sistema. Para cada tipo de recurso, iOS usa un entitlement independiente y una clave de Info.plist con la descripción del motivo (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Solicitar permiso sin describir el motivo en Info.plist provoca el cierre de la aplicación.

  • Código dinámico — prohibido: JavaScriptCore para JS en WebView, pero no código máquina arbitrario
  • Procesos hijos — fork, exec y system no están disponibles desde el Sandbox
  • Acceso a dispositivos — cámara, micrófono y GPS requieren un diálogo del sistema
  • Red local — el UDP multicast y broadcast está bloqueado para la App Store
  • Claves de cifrado — Keychain está disponible, pero solo para tu propia aplicación (kSecAttrAccessGroup para App Group)

Preguntas frecuentes

¿Qué es el Sandbox en iOS?

Sandbox es un entorno de ejecución aislado para aplicaciones de iOS que limita el acceso al sistema de archivos, la red y los datos de otras aplicaciones. Cada aplicación tiene un contenedor Sandbox único, cuyo acceso se controla a nivel del kernel de iOS mediante Sandbox.kext.

¿Qué archivos están disponibles en el Sandbox de la aplicación?

La aplicación tiene acceso a: Documents (datos del usuario), Library (Caches, Preferences, Application Support), tmp (archivos temporales) y Bundle (solo lectura). El directorio de App Group está disponible para las aplicaciones del mismo grupo de desarrollador.

¿Cómo obtener acceso a los archivos de otra aplicación?

Mediante UIDocumentPickerViewController — el usuario selecciona un archivo a través de la interfaz del sistema. iOS proporciona una URL Security-Scoped, válida hasta que se llama a stopAccessingSecurityScopedResource. La alternativa es una Share Extension para transferir datos entre aplicaciones.

¿Qué es un Security-Scoped Bookmark?

Un Security-Scoped Bookmark son Data que conservan el acceso a un archivo fuera del Sandbox entre los lanzamientos de la aplicación. Se crea a partir de una URL Security-Scoped (obtenida de UIDocumentPicker) mediante bookmarkData. En el siguiente lanzamiento, el bookmark se restaura con URLByResolvingBookmarkData.

¿Se puede desactivar el Sandbox en iOS?

No, el Sandbox no se puede desactivar para las aplicaciones de la App Store. En dispositivos con jailbreak es posible desactivarlo, pero esto es incompatible con la publicación en la App Store. Los desarrolladores pueden probar sin Sandbox en el simulador, pero los dispositivos reales siempre aplican el Sandbox.

Resumen

  • Sandbox — el sistema de seguridad fundamental de iOS que aísla cada aplicación a nivel del kernel con Mandatory Access Control.
  • La estructura del Sandbox incluye los directorios Documents, Library, tmp y Bundle con distintos derechos de acceso y políticas de copia de seguridad.
  • El acceso directo al sistema de archivos de otras aplicaciones está completamente bloqueado — solo UIDocumentPicker y App Groups son legítimos.
  • Los Security-Scoped Bookmarks proporcionan acceso persistente a archivos fuera del Sandbox obtenidos a través de interfaces del sistema.
  • App Groups crean un espacio Sandbox compartido para un conjunto de aplicaciones y extensiones de un mismo desarrollador.
  • Las restricciones del Sandbox incluyen la prohibición de código dinámico, procesos hijos, redes multicast y diálogos obligatorios del sistema para los recursos de hardware.
  • Todas las aplicaciones de la App Store funcionan en el Sandbox — no es una característica opcional, sino arquitectónica y obligatoria de iOS.

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