Guias do Levo · Desenvolvedores: Apple

Como apagar o DerivedData, e é seguro?

A lista Ready to free do Levo com os dados de build do Xcode abertos e, abaixo, os arquivos de simuladores, emuladores e Device support

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á dentroOndeO que acontece se apagar
Produtos de buildDerivedData/<Project>-<hash>/BuildRefeitos na próxima build
Índice…/Index.noindexO Xcode reindexa, então busca e autocompletar ficam lentos por um tempo
Logs…/LogsOs logs de builds antigas somem do navegador de Relatórios
Pacotes Swift…/SourcePackagesOs pacotes são baixados de novo, então você precisa de rede
Cache de módulosDerivedData/ModuleCache.noindexRefeito, 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.

  1. Um projeto, pelo Xcode. Escolha Product › Clean Build Folder (⇧⌘K). Isso limpa os produtos de build do projeto, mas mantém o índice.
  2. 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.
  3. 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.