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 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.
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)
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 Sandbox | Acceso mediante FileManager | Permisos |
|---|---|---|
| Documents | .documentDirectory | Lectura y escritura |
| Bundle | Bundle.main.bundlePath | Solo lectura |
| Library | .libraryDirectory | Lectura y escritura |
| tmp | NSTemporaryDirectory() | Lectura y escritura |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Lectura y escritura |
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.
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.
// 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.
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.
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.
Preguntas frecuentes
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.
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.
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.
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.
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
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.
Lea también