On-Demand Resources: qué es, mecanismo de solicitud y almacenamiento de recursos

Autor: IT Sectr Publicado: 2026-04-17 Tiempo de lectura: 9 min

On-Demand Resources es la tecnología de Apple para la carga diferida del contenido de la aplicación. En lugar de incluir todos los recursos en el paquete de instalación, los desarrolladores los alojan en los servidores de App Store y los solicitan según sea necesario. Según Apple ODR Guide, esto reduce el tamaño de la instalación inicial y permite añadir nuevo contenido sin actualizar la versión de la aplicación.

Puntos clave

  • On-Demand Resources — un mecanismo para cargar recursos bajo demanda después de la instalación de la aplicación
  • Los recursos se almacenan en los servidores de Apple y se solicitan a través de NSBundleResourceRequest
  • Las etiquetas agrupan recursos por bloques funcionales de la aplicación
  • La precarga permite cargar recursos anticipadamente para mejorar la experiencia de usuario
  • Las cuotas de almacenamiento son limitadas y requieren monitoreo por parte del desarrollador

Qué son los On-Demand Resources en iOS

On-Demand Resources (ODR) es un sistema de gestión de contenido integrado en iOS, tvOS y macOS. Permite al desarrollador dividir los recursos de la aplicación en obligatorios (incluidos en el paquete de instalación) y bajo demanda (almacenados en App Store y descargados cuando sea necesario).

Conceptos clave de ODR

El sistema ODR opera con tres entidades clave: etiquetas, paquetes de recursos y solicitudes. Una etiqueta es un identificador de cadena que agrupa un conjunto de archivos. Un paquete de recursos es un conjunto de datos asociado a una etiqueta. Una solicitud es una llamada programática a NSBundleResourceRequest que inicia la carga del paquete.

Ciclo de vida de la solicitud de recursos

La carga de recursos pasa por varias etapas: inicialización de la solicitud con las etiquetas especificadas, verificación de disponibilidad en el almacenamiento local, descarga desde los servidores de Apple si está ausente, notificación a la aplicación cuando esté lista y liberación del recurso después de su uso. El sistema gestiona automáticamente el almacenamiento en caché y la eliminación de recursos no utilizados.

EtapaAcción del sistemaTiempo de ejecución
InicializaciónCreación de NSBundleResourceRequest con una etiquetaInstantáneo
Verificación de cachéBúsqueda del recurso en el almacenamiento local0.1–0.5 s
DescargaDescarga desde CDN de AppleDepende del tamaño
NotificaciónLlamada al completion handler o delegadoInstantáneo
LiberaciónMarcar el recurso como eliminable por el sistemaA solicitud de iOS

Cómo funciona ODR en iOS

El mecanismo ODR se basa en un servicio en segundo plano que gestiona las solicitudes de recursos desde el almacenamiento en la nube de App Store. Cuando la aplicación solicita una etiqueta, el sistema verifica si el recurso existe en la caché local. Si no es así, comienza la descarga a través de una sesión URL en segundo plano con soporte de reanudación para conexiones interrumpidas.

Gestión de solicitudes a través de NSBundleResourceRequest

swift
import Foundation

class ResourceManager {
    let odrRequest = NSBundleResourceRequest(tags: ["level-3"])

    func loadLevel3() {
        odrRequest.conditionallyBeginAccessingResources { available in
            if available {
                self.startLevel3()
            } else {
                self.odrRequest.beginAccessingResources { error in
                    guard error == nil else { return }
                    self.startLevel3()
                }
            }
        }
    }

    func releaseResources() {
        odrRequest.endAccessingResources()
    }
}

El método conditionallyBeginAccessingResources verifica la disponibilidad del recurso en la caché sin carga inmediata. Si el indicador de disponibilidad es positivo, la aplicación continúa sin demora. Si el recurso está ausente, beginAccessingResources inicia la descarga con indicación de progreso a través de la propiedad progress.

Carga en segundo plano y prioridades

iOS gestiona las prioridades de carga de recursos ODR según la actividad actual de la aplicación. Cuando la aplicación está en primer plano, la carga se realiza con alta prioridad. En segundo plano, iOS puede retrasar la carga o pausarla cuando la batería esté baja.

  • Alta prioridad — carga inmediata para recursos necesarios en este momento
  • Baja prioridad — carga diferida para precarga y almacenamiento en caché preliminar
  • Segundo plano — carga solo con Wi-Fi activo y batería suficiente

Tipos de recursos y etiquetas ODR

Los recursos ODR pueden incluir imágenes, videos, archivos de audio, sprites, datos de niveles y cualquier otro archivo no crítico para el inicio de la aplicación. Cada recurso está vinculado a una o más etiquetas que determinan su pertenencia a un bloque funcional.

Etiquetado de contenido en Xcode

En Xcode, las etiquetas se configuran a través del inspector Resource Tags en la pestaña Target Membership. El desarrollador especifica para cada archivo del proyecto si se incluye en el paquete principal o se carga por etiqueta. Un archivo puede pertenecer a varias etiquetas, lo que permite reutilizar recursos en diferentes secciones de la aplicación.

xml
<!-- Ejemplo de configuración de Resource Tags en Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Categorías de etiquetas por tiempo de vida

Apple distingue tres categorías de etiquetas ODR según el tiempo que un recurso debe permanecer en el dispositivo. Las etiquetas de instalación inicial se cargan con la aplicación y nunca son eliminadas por el sistema. El orden de precarga de etiquetas determina la secuencia de carga en segundo plano inmediatamente después de la instalación. Las etiquetas principales se solicitan bajo demanda y pueden ser eliminadas por iOS cuando falta espacio.

Además de las categorías, cada etiqueta puede tener una prioridad de descarga. Las etiquetas con prioridad alta se cargan antes que las de baja prioridad, incluso si se solicitaron después. Esto permite al desarrollador controlar el orden de aparición del contenido: primero los recursos críticos para la pantalla principal, luego los materiales adicionales para secciones profundas de la aplicación.

  • Etiquetas de instalación inicial — se cargan durante la primera instalación, no se eliminan por el sistema
  • Etiquetas precargadas — se descargan en segundo plano después de la instalación para mejorar la UX
  • Etiquetas bajo demanda — se solicitan programáticamente, pueden ser eliminadas por iOS cuando falta espacio

Configuración de On-Demand Resources en Xcode

La configuración de ODR en Xcode incluye tres etapas: categorización de recursos por etiquetas, configuración de parámetros de descarga en Info.plist e implementación programática de solicitudes a través de NSBundleResourceRequest. La mayor parte del trabajo se realiza en el lado de la compilación.

Categorización en Target Membership

swift
// Verificación del estado y monitoreo del progreso de ODR
func monitorODRProgress(tag: String) {
    let request = NSBundleResourceRequest(tags: [tag])
    let observer = request.progress.observe(\.fractionCompleted) { progress, _ in
        DispatchQueue.main.async {
            let percent = Int(progress.fractionCompleted * 100)
            print("ODR: \(percent)% cargado")
        }
    }
}

El progreso de descarga se rastrea a través de la propiedad progress de la clase NSProgress con soporte de observación KVO. La aplicación puede mostrar un indicador de carga al usuario durante la descarga de recursos. Una vez completada la descarga, los recursos están disponibles en el paquete principal de la aplicación a través de los mecanismos estándar FileManager y NSDataAsset.

Parámetros de cuotas y limitaciones

Las cuotas de ODR dependen de la versión de iOS. A partir de iOS 13, un dispositivo puede almacenar hasta 20 GB de recursos bajo demanda por cuenta. Este espacio se comparte entre todas las aplicaciones instaladas en el dispositivo: si una aplicación ocupa mucho espacio, queda menos para las demás.

El monitoreo del espacio utilizado se realiza a través de NSBundleResourceRequest. La aplicación puede verificar el almacenamiento ODR disponible y decidir qué recursos cargar primero en consecuencia. Se recomienda implementar un mecanismo de respaldo: si el almacenamiento ODR está lleno, usar recursos de calidad reducida del paquete principal.

Cuando se excede la cuota, el sistema elimina los recursos con etiquetas bajo demanda en orden de menor uso reciente, comenzando por los más antiguos. El administrador de recursos en el código de la aplicación puede rastrear el uso actual del almacenamiento ODR a través de la propiedad NSBundleResourceRequest.

Los desarrolladores deben considerar que iOS puede decidir eliminar los recursos bajo demanda en cualquier momento: la aplicación debe manejar correctamente las situaciones en las que un recurso previamente cargado de repente no está disponible. Se recomienda interceptar los errores de acceso a recursos y volver a solicitarlos a través de beginAccessingResources. Para los recursos críticos sin los cuales la aplicación no puede funcionar, use etiquetas de instalación inicial que no son eliminadas por el sistema.

Ventajas y limitaciones de ODR

On-Demand Resources brindan al desarrollador una herramienta flexible para gestionar el tamaño de la aplicación, pero imponen una serie de limitaciones relacionadas con la disponibilidad de la red y las políticas de almacenamiento de iOS.

Ventajas del uso de ODR

La principal ventaja de ODR es una reducción radical del tamaño de la instalación inicial. Los juegos con varios niveles, las aplicaciones con contenido de video o grandes conjuntos de imágenes pueden cargar contenido por partes. El usuario obtiene acceso a la funcionalidad básica de inmediato, mientras que los recursos adicionales se descargan en segundo plano.

Limitaciones de la tecnología

ODR requiere una conexión constante a internet para cargar recursos en el primer acceso. Los usuarios en áreas con mala cobertura pueden experimentar retrasos y errores de descarga. Además, Apple no garantiza que los recursos descargados permanezcan en el dispositivo: cuando falta espacio, iOS puede eliminar las etiquetas bajo demanda sin previo aviso.

  • Requisito de red — la primera solicitud de recursos requiere conexión a internet
  • Eliminación automática — iOS puede limpiar la caché cuando falta espacio en el dispositivo
  • Complejidad de depuración — reproducir problemas de carga requiere simular diversas condiciones de red
  • Tamaño de etiqueta — Apple recomienda no superar los 512 MB por etiqueta para un rendimiento óptimo
  • Manejo de errores — la aplicación debe manejar correctamente los fallos de carga y reintentar las solicitudes

Preguntas frecuentes

¿Se puede usar ODR para añadir contenido dinámicamente sin actualizar la aplicación?

ODR permite añadir y modificar recursos sin publicar una nueva versión en App Store. Simplemente actualice los archivos en el servidor de Apple a través de Xcode y asígnelos a las mismas etiquetas. En la próxima solicitud, la aplicación recibirá la versión más reciente del recurso. Esto es útil para contenido estacional, promociones temporales y pruebas A/B de nuevas imágenes y diseños.

¿Cómo gestiona iOS la eliminación de recursos ODR cuando falta espacio?

El sistema elimina los recursos con etiqueta bajo demanda cuando necesita liberar espacio para otras aplicaciones. Los recursos de etiquetas de instalación inicial no se eliminan. El orden de eliminación se determina mediante el algoritmo LRU (Least Recently Used): los primeros en eliminarse son los recursos a los que no se ha accedido durante más tiempo.

¿Cuál es el tamaño máximo de los recursos ODR para una sola aplicación?

Desde iOS 13, el límite total de almacenamiento ODR es de 20 GB por usuario de Apple ID. El tamaño de una sola etiqueta no debe exceder 512 MB para un rendimiento óptimo de descarga. Cuando se supera el límite, las solicitudes fallan con NSBundleResourceRequestLowDiskSpaceError.

¿Funciona ODR en modo sin conexión después de la descarga inicial?

Sí, después de la descarga, el recurso se guarda en la caché local y está disponible en modo sin conexión sin necesidad de conexión a internet. Los problemas solo surgen si iOS ha eliminado el recurso por falta de espacio y el usuario intenta acceder a él sin red.

¿En qué se diferencia ODR de la descarga simple de archivos a través de URLSession?

ODR está integrado con la infraestructura de App Store: los recursos se alojan en la CDN de Apple, son gestionados por el sistema de caché y no requieren que el desarrollador configure su propio servidor. URLSession requiere infraestructura de servidor, control de versiones y gestión manual de la caché. ODR también maneja automáticamente la reanudación de descargas en caso de interrupción de la conexión.

Resumen

  • On-Demand Resources — una tecnología para la carga diferida de contenido en aplicaciones iOS y tvOS
  • El sistema se basa en etiquetas que agrupan recursos y solicitudes a través de NSBundleResourceRequest
  • Se admiten todos los tipos de archivos: imágenes, videos, audio, sprites y datos de niveles
  • Categorías de etiquetas — instalación inicial, precargadas y bajo demanda con diferentes políticas de almacenamiento
  • Límite de almacenamiento — 20 GB por Apple ID, hasta 512 MB por etiqueta
  • El tamaño de instalación se reduce trasladando recursos del paquete principal a los servidores de Apple
  • Recomendación — usar ODR para juegos, aplicaciones con contenido multimedia y proyectos con estructura multinivel

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