Guías de Levo · Desarrolladores: Apple

Cómo borrar DerivedData y si es seguro hacerlo

El popover de Levo con los datos de compilación de Xcode marcados en la lista Ready to free, con su tamaño y el motivo

Sí, es seguro. DerivedData solo contiene resultados de compilación, índices y registros que Xcode genera a partir de tu código, así que borrarlo te cuesta una compilación lenta y nada más. Cierra Xcode antes, y no lo borres mientras haya una compilación o un archivado en marcha.

Qué contieneDóndeQué pasa si se borra
Productos de compilaciónDerivedData/<Project>-<hash>/BuildSe rehacen en la siguiente compilación
Almacén del índice…/Index.noindexXcode vuelve a indexar, así que la búsqueda y el autocompletado van lentos un rato
Registros…/LogsLos registros de compilación antiguos desaparecen del Report navigator
Paquetes de Swift…/SourcePackagesLos paquetes se descargan de nuevo, así que necesitas conexión
Caché de módulosDerivedData/ModuleCache.noindexSe rehace; la comparten todos los proyectos

Cómo hacerlo tú mismo

La carpeta es ~/Library/Developer/Xcode/DerivedData, con una subcarpeta por proyecto que lleva su nombre más un hash. Elige el método que encaje con lo que quieres.

  1. Un proyecto, desde Xcode. Elige Product › Clean Build Folder (⇧⌘K). Borra los productos de compilación de ese proyecto pero deja su índice.
  2. Un proyecto, en Finder. Abre Xcode › Settings › Locations, haz clic en la pequeña flecha junto a Derived Data y mueve la carpeta de ese proyecto a la Papelera.
  3. Todo, en Terminal. Con Xcode cerrado:
du -sh ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Developer/Xcode/DerivedData/*

La carpeta en sí puede quedarse. Si falta, Xcode la vuelve a crear. En compilaciones por línea de comandos que usan -derivedDataPath, borra esa carpeta en su lugar.

Espera si hay una compilación, un archivado o un test de interfaz en marcha, o si vas en un avión y usas paquetes de Swift: SourcePackages también se borra y hay que volver a descargarlo. Para conservarlo, borra solo las carpetas Build e Index.noindex.

Si un proyecto se comporta de forma rara después de borrarlo, restablece también los paquetes con File › Packages › Reset Package Caches. Lo mismo vale para las cachés de SwiftPM y CocoaPods.

Cuando borrarlo no soluciona el problema

Los desarrolladores borran DerivedData para arreglar una compilación atascada, y a menudo funciona porque la causa es una caché de módulos o un índice desfasados. Cuando no funciona, el problema está en otro sitio: un paquete que se resolvió a una versión equivocada, una carpeta Pods desfasada o un ajuste de firma. Prueba después a restablecer los paquetes como explica la guía de cachés de paquetes.

Si la carpeta vuelve una y otra vez a 30 GB o más, mira qué carpetas de proyecto son las más grandes: du -sh ~/Library/Developer/Xcode/DerivedData/* | sort -h. Cada rama o clon de un proyecto tiene su propia carpeta, porque el hash sale de la ruta del proyecto. Diez copias de trabajo de una app son diez copias.

También puedes mover DerivedData a otro sitio, a un disco externo, en Xcode › Settings › Locations. Funciona, pero en un disco más lento las compilaciones son bastante más lentas. Para la mayoría, borrarlo de forma periódica compensa más.

Cómo lo hace Levo

Levo muestra la carpeta DerivedData de cada proyecto dentro del grupo de datos de compilación de Xcode, con su tamaño y la fecha de la última compilación. Select › Smartly marca primero las carpetas de proyectos que no has tocado o cuyo código ya no existe; la del proyecto que compilaste esta mañana se queda sin marcar.

Mientras Xcode, xcodebuild o los servicios de compilación están en marcha, Levo marca la fila como bloqueada y explica por qué. Desmarcas lo que quieras conservar y luego pulsas Clean up. En Levo para desarrolladores de iOS y Mac tienes la lista completa de lo que busca.

Preguntas frecuentes

¿Es seguro borrar DerivedData?

Sí. Contiene resultados de compilación, índices y registros generados a partir de tu código. Xcode lo vuelve a crear, así que la primera compilación después será más lenta.

¿Dónde está DerivedData en el Mac?

En ~/Library/Developer/Xcode/DerivedData. Abre los ajustes de Xcode, ve a Locations y haz clic en la flecha junto a Derived Data para verlo en Finder.

¿Pierdo los puntos de interrupción o los esquemas si borro DerivedData?

No. Se guardan en tu proyecto o workspace, no en DerivedData. Pierdes los registros de compilación antiguos y el índice en caché.

¿Por qué Xcode vuelve a llenar DerivedData una y otra vez?

Cada compilación escribe ahí, una carpeta por proyecto, además del índice. Los proyectos grandes y las muchas ramas suman decenas de gigas, así que borrarlo cada pocas semanas es normal.