On-Demand Resources: o que é, mecanismo de solicitação e armazenamento de recursos

Autor: IT Sectr Publicado: 2026-04-17 Tempo de leitura: 9 min

On-Demand Resources é a tecnologia da Apple para carregamento diferido do conteúdo do aplicativo. Em vez de incluir todos os recursos no pacote de instalação, os desenvolvedores os hospedam nos servidores da App Store e os solicitam conforme necessário. De acordo com Apple ODR Guide, isso reduz o tamanho da instalação inicial e permite adicionar novo conteúdo sem atualizar a versão do aplicativo.

Pontos principais

  • On-Demand Resources — um mecanismo para carregar recursos sob demanda após a instalação do aplicativo
  • Os recursos são armazenados nos servidores da Apple e solicitados via NSBundleResourceRequest
  • As tags agrupam recursos por blocos funcionais do aplicativo
  • O pré-carregamento permite carregar recursos antecipadamente para melhorar a UX
  • As cotas de armazenamento são limitadas e exigem monitoramento pelo desenvolvedor

O que são On-Demand Resources no iOS

On-Demand Resources (ODR) é um sistema de gerenciamento de conteúdo integrado ao iOS, tvOS e macOS. Ele permite que o desenvolvedor divida os recursos do aplicativo em obrigatórios (incluídos no pacote de instalação) e sob demanda (armazenados na App Store e baixados quando necessário).

Conceitos-chave do ODR

O sistema ODR opera com três entidades principais: tags, pacotes de recursos e solicitações. Uma tag é um identificador de string que agrupa um conjunto de arquivos. Um pacote de recursos é um conjunto de dados associado a uma tag. Uma solicitação é uma chamada programática para NSBundleResourceRequest que inicia o carregamento do pacote.

Ciclo de vida da solicitação de recursos

O carregamento de recursos passa por várias etapas: inicialização da solicitação com as tags especificadas, verificação de disponibilidade no armazenamento local, download dos servidores da Apple se ausente, notificação ao aplicativo quando pronto e liberação do recurso após o uso. O sistema gerencia automaticamente o cache e a remoção de recursos não utilizados.

EtapaAção do sistemaTempo de execução
InicializaçãoCriação de NSBundleResourceRequest com uma tagInstantâneo
Verificação de cacheBusca do recurso no armazenamento local0.1–0.5 s
DownloadDownload da CDN da AppleDepende do tamanho
NotificaçãoChamada ao completion handler ou delegadoInstantâneo
LiberaçãoMarcação do recurso como removível pelo sistemaSob solicitação do iOS

Como o ODR funciona no iOS

O mecanismo ODR é baseado em um serviço em segundo plano que gerencia as solicitações de recursos do armazenamento em nuvem da App Store. Quando o aplicativo solicita uma tag, o sistema verifica se o recurso existe no cache local. Se não — ele inicia o download através de uma sessão URL em segundo plano com suporte a retomada para conexões interrompidas.

Gerenciamento de solicitações via 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()
    }
}

O método conditionallyBeginAccessingResources verifica a disponibilidade do recurso no cache sem carregamento imediato. Se o indicador de disponibilidade for positivo — o aplicativo continua sem atraso. Se o recurso estiver ausente, beginAccessingResources inicia o download com indicação de progresso através da propriedade progress.

Carregamento em segundo plano e prioridades

O iOS gerencia as prioridades de carregamento de recursos ODR com base na atividade atual do aplicativo. Quando o aplicativo está em primeiro plano, o carregamento é realizado com alta prioridade. Em segundo plano, o iOS pode atrasar o carregamento ou pausá-lo quando a bateria estiver baixa.

  • Alta prioridade — carregamento imediato para recursos necessários agora
  • Baixa prioridade — carregamento diferido para pré-carregamento e cache preliminar
  • Segundo plano — carregamento apenas com Wi-Fi ativo e bateria suficiente

Tipos de recursos e tags ODR

Os recursos ODR podem incluir imagens, vídeos, arquivos de áudio, sprites, dados de níveis e qualquer outro arquivo não crítico para a inicialização do aplicativo. Cada recurso está vinculado a uma ou mais tags que determinam sua pertinência a um bloco funcional.

Marcação de conteúdo no Xcode

No Xcode, as tags são configuradas através do inspetor Resource Tags na aba Target Membership. O desenvolvedor especifica para cada arquivo do projeto se ele está incluído no pacote principal ou é carregado por tag. Um arquivo pode pertencer a várias tags, permitindo a reutilização de recursos em diferentes seções do aplicativo.

xml
<!-- Exemplo de configuração de Resource Tags no Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Categorias de tags por tempo de vida

A Apple distingue três categorias de tags ODR com base em quanto tempo um recurso deve permanecer no dispositivo. As tags de instalação inicial são carregadas com o aplicativo e nunca são excluídas pelo sistema. A ordem de pré-carregamento de tags determina a sequência de carregamento em segundo plano imediatamente após a instalação. As tags principais são solicitadas sob demanda e podem ser excluídas pelo iOS quando o espaço está baixo.

Além das categorias, cada tag pode ter uma prioridade de download. Tags com prioridade alta são carregadas antes das de baixa prioridade, mesmo se forem solicitadas depois. Isso permite ao desenvolvedor controlar a ordem de aparecimento do conteúdo: primeiro os recursos críticos para a tela principal, depois os materiais adicionais para seções profundas do aplicativo.

  • Tags de instalação inicial — carregadas durante a primeira instalação, não removidas pelo sistema
  • Tags pré-carregadas — baixadas em segundo plano após a instalação para melhorar a UX
  • Tags sob demanda — solicitadas programaticamente, podem ser excluídas pelo iOS quando o espaço está escasso

Configuração de On-Demand Resources no Xcode

A configuração do ODR no Xcode inclui três etapas: categorização de recursos por tags, configuração de parâmetros de download no Info.plist e implementação programática de solicitações via NSBundleResourceRequest. A maior parte do trabalho é feita no lado da compilação.

Categorização no Target Membership

swift
// Verificação de status e monitoramento de progresso do 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)% carregado")
        }
    }
}

O progresso do download é rastreado através da propriedade progress da classe NSProgress com suporte a observação KVO. O aplicativo pode exibir um indicador de carregamento ao usuário durante o download dos recursos. Após a conclusão do download, os recursos estão disponíveis no pacote principal do aplicativo através dos mecanismos padrão FileManager e NSDataAsset.

Parâmetros de cotas e limitações

As cotas de ODR dependem da versão do iOS. A partir do iOS 13, um dispositivo pode armazenar até 20 GB de recursos sob demanda por conta. Este espaço é compartilhado entre todos os aplicativos instalados no dispositivo — se um aplicativo ocupar muito espaço, sobra menos para os outros.

O monitoramento do espaço usado é feito através do NSBundleResourceRequest. O aplicativo pode verificar o armazenamento ODR disponível e decidir quais recursos carregar primeiro de acordo. Recomenda-se implementar um mecanismo de fallback: se o armazenamento ODR estiver cheio, use recursos de qualidade reduzida do pacote principal.

Quando a cota é excedida, o sistema remove os recursos com tags sob demanda na ordem de menor uso recente, começando pelos mais antigos. O gerenciador de recursos no código do aplicativo pode rastrear o uso atual do armazenamento ODR através da propriedade NSBundleResourceRequest.

Os desenvolvedores devem considerar que o iOS pode decidir excluir recursos sob demanda a qualquer momento — o aplicativo deve lidar corretamente com situações em que um recurso previamente carregado de repente se torna indisponível. Recomenda-se interceptar erros de acesso a recursos e solicitá-los novamente através de beginAccessingResources. Para recursos críticos sem os quais o aplicativo não pode funcionar, use tags de instalação inicial que não são removidas pelo sistema.

Vantagens e limitações do ODR

On-Demand Resources oferecem ao desenvolvedor uma ferramenta flexível para gerenciar o tamanho do aplicativo, mas impõem uma série de limitações relacionadas à disponibilidade de rede e às políticas de armazenamento do iOS.

Vantagens do uso do ODR

A principal vantagem do ODR é a redução radical do tamanho da instalação inicial. Jogos com vários níveis, aplicativos com conteúdo de vídeo ou grandes conjuntos de imagens podem carregar conteúdo em partes. O usuário obtém acesso à funcionalidade básica imediatamente, enquanto os recursos adicionais são baixados em segundo plano.

Limitações da tecnologia

O ODR requer uma conexão constante com a internet para carregar recursos no primeiro acesso. Usuários em áreas com cobertura fraca podem enfrentar atrasos e erros de download. Além disso, a Apple não garante que os recursos baixados permaneçam no dispositivo — quando o espaço está baixo, o iOS pode excluir tags sob demanda sem aviso prévio.

  • Necessidade de rede — a primeira solicitação de recurso requer conexão com a internet
  • Exclusão automática — o iOS pode limpar o cache quando o espaço do dispositivo está baixo
  • Complexidade de depuração — reproduzir problemas de carregamento requer simular várias condições de rede
  • Tamanho da tag — a Apple recomenda não exceder 512 MB por tag para desempenho ideal
  • Tratamento de erros — o aplicativo deve lidar corretamente com falhas de carga e repetir solicitações

Perguntas frequentes

Pode-se usar ODR para adicionar conteúdo dinamicamente sem atualizar o aplicativo?

ODR permite adicionar e modificar recursos sem publicar uma nova versão na App Store. Basta atualizar os arquivos no servidor da Apple através do Xcode e atribuí-los às mesmas tags. Na próxima solicitação, o aplicativo receberá a versão mais recente do recurso. Isso é útil para conteúdo sazonal, promoções temporárias e testes A/B de novas imagens e layouts.

Como o iOS gerencia a exclusão de recursos ODR quando o espaço está baixo?

O sistema exclui recursos com tag sob demanda quando precisa liberar espaço para outros aplicativos. Os recursos de tags de instalação inicial não são excluídos. A ordem de exclusão é determinada pelo algoritmo LRU (Least Recently Used) — os primeiros a serem excluídos são os recursos que não foram acessados por mais tempo.

Qual é o tamanho máximo dos recursos ODR para um único aplicativo?

Desde o iOS 13, o limite total de armazenamento ODR é de 20 GB por usuário Apple ID. O tamanho de uma única tag não deve exceder 512 MB para um desempenho de download ideal. Quando o limite é excedido, as solicitações falham com NSBundleResourceRequestLowDiskSpaceError.

O ODR funciona offline após o download inicial?

Sim, após o download, o recurso é salvo no cache local e está disponível em modo offline sem conexão com a internet. Os problemas só surgem se o iOS excluiu o recurso devido à falta de espaço e o usuário tenta acessá-lo sem rede.

Como o ODR difere do download simples de arquivos via URLSession?

ODR está integrado com a infraestrutura da App Store: os recursos são hospedados na CDN da Apple, gerenciados pelo sistema de cache e não exigem que o desenvolvedor configure seu próprio servidor. URLSession requer infraestrutura de servidor, controle de versão e gerenciamento manual de cache. ODR também lida automaticamente com a retomada de download em caso de interrupção da conexão.

Resumo

  • On-Demand Resources — uma tecnologia para carregamento diferido de conteúdo em aplicativos iOS e tvOS
  • O sistema é baseado em tags que agrupam recursos e solicitações via NSBundleResourceRequest
  • Todos os tipos de arquivo são suportados: imagens, vídeos, áudio, sprites e dados de níveis
  • Categorias de tags — instalação inicial, pré-carregadas e sob demanda com diferentes políticas de armazenamento
  • Limite de armazenamento — 20 GB por Apple ID, até 512 MB por tag
  • O tamanho da instalação é reduzido movendo recursos do pacote principal para os servidores da Apple
  • Recomendação — usar ODR para jogos, aplicativos com conteúdo de mídia e projetos com estrutura multinível

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também