Guias do Levo · Desenvolvedores: Apple
Como apagar o DerivedData, e é seguro?

Sim, é seguro. O DerivedData guarda só saída de build, índices e logs que o Xcode gera a partir do seu código-fonte, então apagá-lo custa uma build lenta e mais nada. Feche o Xcode antes e não apague enquanto uma build ou um archive estiver rodando.
| O que há dentro | Onde | O que acontece se apagar |
|---|---|---|
| Produtos de build | DerivedData/<Project>-<hash>/Build | Refeitos na próxima build |
| Índice | …/Index.noindex | O Xcode reindexa, então busca e autocompletar ficam lentos por um tempo |
| Logs | …/Logs | Os logs de builds antigas somem do navegador de Relatórios |
| Pacotes Swift | …/SourcePackages | Os pacotes são baixados de novo, então você precisa de rede |
| Cache de módulos | DerivedData/ModuleCache.noindex | Refeito, compartilhado por todos os projetos |
Como fazer você mesmo
A pasta é ~/Library/Developer/Xcode/DerivedData, com uma subpasta por projeto, com o nome dele mais um hash. Escolha o método que combina com o que você quer.
- Um projeto, pelo Xcode. Escolha Product › Clean Build Folder (⇧⌘K). Isso limpa os produtos de build do projeto, mas mantém o índice.
- Um projeto, no Finder. Abra Xcode › Settings › Locations, clique na setinha ao lado de Derived Data e mova a pasta desse projeto para a Lixeira.
- Tudo, no Terminal. Com o Xcode fechado:
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*
A própria pasta pode ficar. O Xcode a recria se ela não existir. Para builds por linha de comando que usam -derivedDataPath, apague essa pasta.
Espere se uma build, um archive ou um teste de interface estiver rodando, ou se você estiver em um avião e usar pacotes Swift: o SourcePackages também some e precisa de download. Para mantê-lo, apague só as pastas Build e Index.noindex.
Se um projeto se comportar de forma estranha depois da limpeza, redefina também os pacotes com File › Packages › Reset Package Caches. O mesmo vale para os caches do SwiftPM e do CocoaPods.
Quando limpar não resolve o problema
Os desenvolvedores limpam o DerivedData para consertar uma build travada, e muitas vezes funciona porque a causa é um cache de módulos ou um índice desatualizado. Quando não funciona, o problema está em outro lugar: um pacote que foi resolvido para uma versão errada, uma pasta Pods desatualizada ou uma configuração de assinatura. Tente em seguida a redefinição de pacotes no guia de caches de pacotes.
Se a pasta voltar sempre a 30 GB ou mais, veja quais pastas de projeto são as maiores: du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h. Cada branch ou clone de um projeto ganha a própria pasta, porque o hash vem do caminho do projeto. Dez checkouts de um mesmo app são dez cópias.
Você também pode mover o DerivedData para outro lugar, como um disco externo, em Xcode › Settings › Locations. Funciona, mas as builds em um disco mais lento ficam visivelmente mais lentas. Para a maioria das pessoas, limpar de tempos em tempos é a melhor troca.
Como o Levo faz
O Levo mostra a pasta DerivedData de cada projeto como parte do grupo de dados de build do Xcode, com o tamanho e a data da última build. As pastas de projetos em que você não mexe, ou cuja pasta de código-fonte sumiu, são marcadas primeiro pelo Select › Smartly; a que você compilou esta manhã fica desmarcada.
Enquanto o Xcode, o xcodebuild ou os serviços de build estiverem rodando, o Levo marca a linha como bloqueada e explica o motivo. Você desmarca o que quiser manter e depois usa Clean up. Levo para desenvolvedores de iOS e Mac traz a lista completa do que ele procura.
Perguntas frequentes
É seguro apagar o DerivedData?
Sim. Ele guarda saída de build, índices e logs gerados a partir do seu código-fonte. O Xcode o refaz, então a primeira build depois é mais lenta.
Onde fica o DerivedData no Mac?
Em ~/Library/Developer/Xcode/DerivedData. Abra os Settings do Xcode, depois Locations, e clique na seta ao lado de Derived Data para revelá-lo no Finder.
Vou perder breakpoints ou schemes se apagar o DerivedData?
Não. Eles ficam guardados no seu projeto ou workspace, não no DerivedData. Você perde os logs de builds antigas e o índice em cache.
Por que o Xcode enche o DerivedData de novo?
Toda build grava ali, uma pasta por projeto, mais o índice. Projetos pesados e muitas branches somam dezenas de gigabytes, então limpar a cada poucas semanas é normal.