Temporary Directory (tmp) é um diretório na sandbox de aplicativos iOS para armazenar dados de curtíssimo prazo que são necessários apenas durante a sessão atual do aplicativo. De acordo com o Apple File System Programming Guide (2024), o sistema pode limpar o tmp a cada término do aplicativo ou reinicialização do dispositivo. Ao contrário do Caches Directory, os arquivos temporários no tmp não se destinam a persistir entre inicializações — o desenvolvedor deve excluí-los explicitamente após o uso para não desperdiçar espaço em disco.
Pontos principais
Temporary Directory (também conhecido como tmp) é um diretório dentro da sandbox de aplicativos iOS projetado para armazenar dados cujo tempo de vida é limitado à sessão atual. É o armazenamento mais efêmero entre todos os diretórios da sandbox.
O iOS fornece o tmp para operações que exigem armazenamento intermediário de arquivos: baixar um arquivo antes de movê-lo para Documents, criar uma cópia temporária antes de exportar, armazenar em buffer dados de streaming. Após a conclusão da operação, os arquivos temporários devem ser excluídos.
De acordo com a Documentação do Apple Developer (2024), o diretório tmp é único porque seu caminho pode mudar entre as inicializações do aplicativo. O iOS gera um novo caminho para o tmp a cada inicialização — isso garante que os dados da sessão anterior não sejam lidos acidentalmente. O desenvolvedor nunca deve salvar o caminho do tmp entre inicializações.
Importante: ao contrário do Caches Directory, onde os dados podem sobreviver a várias inicializações, o tmp não garante a persistência de dados entre sessões a longo prazo. É a maneira mais confiável de armazenar dados verdadeiramente temporários.
Em Swift, para obter o caminho para o tmp, usa-se a função global NSTemporaryDirectory() ou FileManager.temporaryDirectory. Estas são as APIs mais simples entre todos os diretórios da sandbox.
import Foundation
// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Option 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C usa a mesma função global NSTemporaryDirectory(). O resultado é uma string com o caminho completo para o diretório temporário do aplicativo.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Uma diferença importante de outros diretórios: NSTemporaryDirectory() não requer a especificação de um domínio ou máscara de busca — é uma função global. No entanto, o caminho pode mudar na próxima inicialização, portanto nunca o salve no UserDefaults ou em qualquer outro armazenamento persistente.
Temporary Directory é destinada a um conjunto estritamente definido de cenários. Os desenvolvedores frequentemente confundem tmp com Caches, colocando no tmp dados que deveriam durar mais de uma sessão. Vamos ver os casos de uso corretos.
Arquivos criados durante a exportação de dados: uma cópia temporária de um relatório antes de enviá-lo por e-mail, um arquivo compactado antes do upload, um arquivo intermediário de conversão de formato. Após a conclusão da exportação, o arquivo deve ser excluído.
Buffers temporários para gravação de áudio, vídeo ou dados de streaming processados em tempo real. Por exemplo, gravação de voz antes de salvar no armazenamento permanente, ou buffer de fluxo de vídeo durante o streaming.
| Cenário | Diretório | Justificativa |
|---|---|---|
| Exportar PDF antes de enviar | tmp | Arquivo não necessário após envio |
| Cache de imagens | Caches | Útil entre sessões |
| Baixar arquivo antes de mover | tmp | Armazenamento intermediário |
| Logs de sessão | tmp | Relevantes apenas na sessão |
| Editar documento | tmp | Versão antes de salvar |
Se os dados são necessários apenas aqui e agora — use tmp. Se podem ser úteis na próxima sessão — use Caches. Se a perda de dados é inaceitável — use Documents.
iOS gerencia o ciclo de vida do tmp de forma diferente dos outros diretórios da sandbox. Entender esse ciclo é fundamental para projetar corretamente o armazenamento de arquivos no aplicativo.
A cada inicialização, o iOS pode alocar um novo caminho para o tmp. O caminho anterior se torna inacessível, embora os arquivos físicos possam permanecer no disco até a reinicialização do dispositivo. É por isso que a Apple recomenda fortemente não salvar o caminho do tmp entre sessões.
De acordo com o Apple Tech Note TN2150 (2024), o sistema pode limpar o tmp nos seguintes casos: reinicialização do dispositivo, limite de espaço em disco atingido, descarregamento do aplicativo (Offload). Ao contrário do Caches, o tmp não se destina a armazenar dados mesmo entre várias inicializações — é o armazenamento menos confiável da sandbox.
O desenvolvedor deve excluir explicitamente os arquivos temporários após concluir uma operação usando FileManager.removeItem(at:). Arquivos não excluídos no tmp se acumulam e desperdiçam espaço em disco — o iOS não garante sua limpeza automática no futuro próximo.
Comparar tmp e Caches ajuda os desenvolvedores a tomar a decisão correta ao escolher um diretório para armazenamento. Escolher incorretamente pode levar à perda prematura de dados ou ao consumo desnecessário de espaço.
| Parâmetro | Temporary Directory | Caches Directory |
|---|---|---|
| Tempo de vida | Apenas sessão atual | Entre sessões (sem garantias) |
| Mudança de caminho | Pode mudar a cada inicialização | Caminho estável |
| Limpeza automática | Ao reiniciar, ao descarregar | Quando falta espaço |
| Exclusão pelo desenvolvedor | Obrigatória após operação | Recomendada ao exceder limite |
| Uso | Operações intermediárias | Cache persistente |
Uma regra prática: escolha tmp para dados que serão excluídos em segundos ou minutos após a criação. Escolha Caches para dados que são úteis para manter por horas ou dias entre sessões, mas que podem ser regenerados.
Trabalhar com Temporary Directory requer disciplina: como os dados no tmp são efêmeros e seu acúmulo pode levar ao desperdício de espaço, os desenvolvedores devem seguir várias práticas importantes.
FileManager.removeItem(at:) deve ser chamado imediatamente após concluir uma operação com um arquivo temporário. Use defer em Swift para garantir a exclusão mesmo quando ocorrer um erro.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits
Se os dados podem ser necessários uma hora após a criação — salve-os em Caches ou Application Support. O tmp é projetado para operações de minutos, não para armazenamento.
Seguir essas regras garante que os arquivos temporários não se acumulem, o espaço em disco seja usado de forma eficiente e o aplicativo lide corretamente com qualquer cenário de limpeza do sistema de arquivos iOS.
Perguntas frequentes
Normalmente o caminho não muda dentro de uma única sessão, mas o iOS não garante isso. Em casos raros, o sistema pode alterar o tmp quando o aplicativo passa do fundo para o primeiro plano. É por isso que a Apple recomenda chamar NSTemporaryDirectory() sempre que precisar do caminho, em vez de armazená-lo em uma variável.
Os arquivos se acumularão e ocuparão espaço em disco. O iOS pode limpar o tmp ao reiniciar o dispositivo, mas até lá o aplicativo desperdiçará espaço em disco. Com um acúmulo significativo, o usuário pode ver nas configurações de armazenamento que o aplicativo está ocupando muito espaço.
Sim, você pode usar DataProtectionType com NSFileProtectionComplete para arquivos temporários contendo dados sensíveis. No entanto, lembre-se: se o arquivo for lido apenas na sessão atual e depois excluído, a criptografia pode ser excessiva. Avalie a necessidade de criptografia com base no tipo de dados.
Use ProcessInfo.processInfo.globallyUniqueString para gerar um identificador único, ou UUID().uuidString. O FileManager também fornece o método urlForCreatingTemporaryFile, que gera automaticamente um nome único no tmp. Isso garante a ausência de colisões durante gravações paralelas.
Indiretamente — sim. A Apple presta atenção à quantidade total de dados que o aplicativo armazena em disco. Se o tmp contiver gigabytes de arquivos não excluídos, o revisor pode rejeitar o aplicativo. O limite recomendado para o tmp é de no máximo 100 MB a qualquer momento. Limpe o tmp regularmente e verifique seu tamanho através do FileManager.
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