Sandbox — o que é, princípio de isolamento e sistema de arquivos

Autor: IT Sectr Publicado: 2026-07-09 Tempo de leitura: 10 min

Sandbox é um ambiente de execução isolado para aplicativos iOS que restringe o acesso ao sistema de arquivos, à rede, aos recursos de hardware e aos dados de outros aplicativos. Cada aplicativo recebe seu próprio ambiente Sandbox na instalação, e todas as suas operações de arquivo são redirecionadas automaticamente para essa área isolada. De acordo com o Apple App Sandbox Design Guide (2026), a arquitetura do sandbox é baseada em três níveis de proteção: isolamento do sistema de arquivos, controle da comunicação entre processos e separação dos recursos de hardware com solicitação explícita de permissões por meio de entitlements.

Principais pontos

  • Sandbox — sistema de arquivos isolado e ambiente de execução, exclusivo para cada aplicativo iOS.
  • Cada aplicativo tem seu próprio diretório Sandbox com as subpastas Documents, Library, tmp e Bundle.
  • O acesso a outros aplicativos é proibido: leitura, escrita e execução de código fora do Sandbox são bloqueadas pelo sistema.
  • Entitlements e Capabilities ampliam o Sandbox: App Groups, iCloud e Security-Scoped Bookmarks exigem permissão explícita.
  • UIDocumentPicker e Share Extension são as únicas formas de trocar arquivos entre aplicativos isolados.

O que é Sandbox

Sandbox é um sistema de controle de acesso obrigatório (Mandatory Access Control) implementado no nível do kernel do iOS (XNU — extensão de kernel Sandbox.kext). Cada aplicativo recebe um perfil Sandbox UUID exclusivo na inicialização, que determina a quais recursos o aplicativo tem permissão de acessar.

A arquitetura do Sandbox inclui três componentes principais: File System Isolation (cada aplicativo vê apenas seu próprio contêiner), Network Access Control (as solicitações à rede local podem ser restringidas) e Inter-Process Communication (proibição de IPC direto com outros aplicativos). A Apple introduziu o Sandbox no iOS 2.0 e, desde então, reforçou significativamente as restrições em cada versão principal.

O Sandbox não é opcional — todos os aplicativos da App Store funcionam no sandbox. O desenvolvedor não pode desativar o Sandbox nem contornar suas restrições. A tentativa de acessar um recurso proibido termina com o código de erro EPERM (Operation not permitted) e uma entrada no registro do sistema.

swift
import Foundation

// Tentativa de acessar o arquivo de outro aplicativo — retorna nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — o Sandbox bloqueia o acesso

// Acesso correto — dentro do próprio 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)

Estrutura do sandbox do aplicativo

O Sandbox de cada aplicativo no iOS contém vários diretórios predefinidos acessíveis por meio da API Foundation. A localização no suporte físico é /var/mobile/Containers/Data/Application/{UUID}/, mas os desenvolvedores não devem usar esse caminho diretamente: ele muda a cada reinicialização do dispositivo em versões diferentes do iOS.

Os principais diretórios do Sandbox: Bundle (.app — somente leitura, contém o código executável e os recursos), Documents (dados do usuário, com backup no iCloud), Library (Caches, Preferences, Application Support — com regras de backup diferentes), tmp (arquivos temporários, excluídos pelo sistema quando falta espaço). Cada diretório tem seu próprio ciclo de vida e política de armazenamento.

O caminho físico do Sandbox pode ser obtido por meio de NSHomeDirectory() ou FileManager.url(for: .documentDirectory). A Apple recomenda usar a API baseada em URL, pois ela abstrai a estrutura interna do sistema de arquivos e permanece estável quando o macOS Sandbox muda no desktop.

Diretório do SandboxObtenção via FileManagerPermissões
Documents.documentDirectoryLeitura e escrita
BundleBundle.main.bundlePathSomente leitura
Library.libraryDirectoryLeitura e escrita
tmpNSTemporaryDirectory()Leitura e escrita
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Leitura e escrita

Acesso a arquivos fora do sandbox

O acesso direto ao sistema de arquivos de outros aplicativos no iOS é completamente bloqueado. Mesmo que o desenvolvedor conheça o UUID do contêiner de outro aplicativo, o Sandbox no nível do kernel retorna um erro ao tentar ler ou escrever. Essa é uma diferença fundamental entre iOS e macOS, onde o Sandbox é mais flexível.

A Apple oferece três mecanismos legítimos para troca de dados entre aplicativos: UIDocumentPickerViewController (o usuário seleciona um arquivo pela interface do sistema e o aplicativo recebe uma URL Security-Scoped), Share Extension (uma extensão para enviar dados a outro aplicativo) e App Groups (um diretório compartilhado para aplicativos do mesmo desenvolvedor).

UIDocumentPicker é a única forma de acessar arquivos de outros aplicativos sem configuração prévia. O usuário seleciona explicitamente um arquivo pelo seletor padrão do sistema, e o iOS fornece ao aplicativo uma URL Security-Scoped temporária. O acesso dura até o fechamento do seletor ou até que stopAccessingSecurityScopedResource seja chamado.

Security-Scoped Bookmarks

Um Security-Scoped Bookmark é um mecanismo do iOS que permite preservar o acesso a um arquivo fora do Sandbox entre as inicializações do aplicativo. Quando o usuário seleciona um arquivo pelo UIDocumentPicker, o aplicativo pode criar um bookmark a partir da URL Security-Scoped e salvá-lo em UserDefaults ou outro armazenamento.

Na próxima inicialização, o aplicativo restaura o acesso por meio de URLByResolvingBookmarkData, que retorna uma URL Security-Scoped. Em seguida, é necessário chamar startAccessingSecurityScopedResource antes de ler o arquivo e stopAccessingSecurityScopedResource após terminar. O equilíbrio de chamadas é obrigatório — cada start deve ter um stop correspondente, caso contrário o sistema esgota o limite de recursos Security-Scoped.

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

// Resolver os dados do bookmark em URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // O bookmark está desatualizado, é necessário criar um novo
    }
    
    return url
}

Limitação importante: os Security-Scoped Bookmarks não funcionam para arquivos dentro do próprio Sandbox — apenas para arquivos obtidos por meio de UIDocumentPicker ou iCloud Drive. O bookmark contém dados Security-Scoped que permitem ao sistema identificar qual aplicativo está solicitando acesso a qual arquivo. Se o certificado do aplicativo expirar ou mudar, o bookmark se torna inválido.

Sandbox e App Groups

App Groups é um mecanismo do iOS que permite a vários aplicativos (e suas extensões) de um mesmo desenvolvedor compartilhar um diretório Sandbox comum. Para ativá-lo, é necessário adicionar a Capability App Groups no Xcode e indicar o mesmo identificador de grupo para todos os aplicativos de destino.

O diretório compartilhado de App Groups fica fora do Sandbox de cada aplicativo individual, mas todos os aplicativos do grupo têm acesso total de leitura e escrita. Isso permite compartilhar arquivos, bancos de dados (Core Data com o Store URL no App Group) e UserDefaults (via initWithSuiteName) entre o aplicativo principal, o Today Widget, a Watch Extension e a Share Extension.

A Apple recomenda usar App Groups para a sincronização de estado entre o aplicativo e suas extensões. Por exemplo, o widget Today Widget pode ler dados do diretório compartilhado de App Groups, onde o aplicativo principal grava dados atualizados. Ao mesmo tempo, cada aplicativo continua isolado de outros App Groups — apenas aplicativos com o mesmo identificador de grupo têm acesso.

Limitações do sandbox no iOS

O Sandbox no iOS impõe uma série de restrições rígidas que devem ser consideradas durante o desenvolvimento. As principais: proibição de código dinâmico (carregar e executar código fora do Sandbox), proibição de acesso direto à agenda de contatos, calendário e fotos sem permissão do usuário (Privacy framework) e restrições para criar processos filhos (fork e exec são proibidos).

Rede: os aplicativos podem se conectar a qualquer servidor remoto via TCP/UDP, mas o acesso ao localhost é restrito — outros aplicativos não podem se conectar a um servidor dentro do seu aplicativo (exceto em compilações de depuração). O UDP multicast e broadcast também é bloqueado para aplicativos da App Store.

Recursos de hardware: o acesso à câmera, ao microfone, à geolocalização, ao Bluetooth e ao HealthKit exige permissão explícita do usuário por meio do diálogo do sistema. Para cada tipo de recurso, o iOS usa um entitlement separado e uma chave Info.plist com a descrição do motivo (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Solicitar permissão sem a descrição do motivo no Info.plist causa o encerramento do aplicativo.

  • Código dinâmico — proibido: JavaScriptCore para JS em WebView, mas não código de máquina arbitrário
  • Processos filhos — fork, exec e system não estão disponíveis a partir do Sandbox
  • Acesso a dispositivos — câmera, microfone e GPS exigem um diálogo do sistema
  • Rede local — UDP multicast e broadcast bloqueado para a App Store
  • Chaves de criptografia — Keychain está disponível, mas apenas para o seu próprio aplicativo (kSecAttrAccessGroup para App Group)

Perguntas frequentes

O que é Sandbox no iOS?

Sandbox é um ambiente de execução isolado para aplicativos iOS que restringe o acesso ao sistema de arquivos, à rede e aos dados de outros aplicativos. Cada aplicativo tem um contêiner Sandbox exclusivo, cujo acesso é controlado no nível do kernel do iOS por meio do Sandbox.kext.

Quais arquivos estão disponíveis no Sandbox do aplicativo?

O aplicativo tem acesso a: Documents (dados do usuário), Library (Caches, Preferences, Application Support), tmp (arquivos temporários) e Bundle (somente leitura). O diretório App Group está disponível para aplicativos do mesmo grupo de desenvolvedor.

Como obter acesso aos arquivos de outro aplicativo?

Por meio de UIDocumentPickerViewController — o usuário seleciona um arquivo pela interface do sistema. O iOS fornece uma URL Security-Scoped, disponível até que stopAccessingSecurityScopedResource seja chamado. A alternativa é uma Share Extension para transferir dados entre aplicativos.

O que é um Security-Scoped Bookmark?

Um Security-Scoped Bookmark é Data que preserva o acesso a um arquivo fora do Sandbox entre as inicializações do aplicativo. Ele é criado a partir de uma URL Security-Scoped (obtida do UIDocumentPicker) via bookmarkData. Na próxima inicialização, o bookmark é restaurado por meio de URLByResolvingBookmarkData.

É possível desativar o Sandbox no iOS?

Não, o Sandbox não pode ser desativado para aplicativos da App Store. Em dispositivos com jailbreak é possível desativá-lo, mas isso é incompatível com a publicação na App Store. Os desenvolvedores podem testar sem Sandbox no simulador, mas os dispositivos reais sempre aplicam o Sandbox.

Resumo

  • Sandbox — o sistema de segurança fundamental do iOS que isola cada aplicativo no nível do kernel com Mandatory Access Control.
  • A estrutura do Sandbox inclui os diretórios Documents, Library, tmp e Bundle com direitos de acesso e políticas de backup diferentes.
  • O acesso direto ao sistema de arquivos de outros aplicativos é totalmente bloqueado — apenas UIDocumentPicker e App Groups são legítimos.
  • Os Security-Scoped Bookmarks fornecem acesso persistente a arquivos fora do Sandbox obtidos por meio de interfaces do sistema.
  • App Groups criam um espaço Sandbox compartilhado para um conjunto de aplicativos e extensões de um mesmo desenvolvedor.
  • As restrições do Sandbox incluem a proibição de código dinâmico, processos filhos, redes multicast e diálogos obrigatórios do sistema para recursos de hardware.
  • Todos os aplicativos da App Store funcionam no Sandbox — não é uma característica opcional, mas uma característica arquitetônica obrigatória do iOS.

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