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 é 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.
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)
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 Sandbox | Obtenção via FileManager | Permissões |
|---|---|---|
| Documents | .documentDirectory | Leitura e escrita |
| Bundle | Bundle.main.bundlePath | Somente leitura |
| Library | .libraryDirectory | Leitura e escrita |
| tmp | NSTemporaryDirectory() | Leitura e escrita |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Leitura e escrita |
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.
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.
// 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.
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.
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.
Perguntas frequentes
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.
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.
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.
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.
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
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.
Leia também