我可以安全删除Xcode Derived数据文件夹的内容吗?


293

我的磁盘空间不足,并通过第三方实用程序检查了〜/ Library / Developer / Xcode / DerivedData目录是否占用了大约22GB的磁盘空间。

我搜索了stackoverflow,发现了这篇文章

如何安全地在〜/ Library / Developer / Xcode / DerivedData目录中删除?

该问题的可接受答案表明,我不应该触摸/从该目录中删除文件夹。所以我所做的是

  • 为我在Appstore上可用的应用程序找到了一个现有的构建项目文件夹
  • 从派生目录中删除文件夹
  • 推出了XCode 5
  • 打开那个项目
  • 干净的构建
  • 在模拟器上测试并编译
  • 重新存档
  • 一切正常。什么都没坏。

除非我在该帖子的答案中遗漏了某些内容,否则我想通过询问有经验的开发人员来确保,如果我从DerivedData中删除所有文件夹,那么在构建,测试和编译这些项目时不会对我造成伤害。


所引用问题的公认答案是stackoverflow.com/a/7284632/8047,它没有说不从DerivedData中删除...尽管存档对于以后调试东西很重要,但这是一个不同的目录。
Dan Rosenstark '16

Answers:


372

是的,您可以直接从DerivedData子文件夹中删除所有文件(Not DerivedData Folder)

这不会影响您的项目工作。DerivedData文件夹的内容是在构建期间生成的,您可以根据需要将其删除。这不是问题。

DerivedData当您再次构建项目时,将重新创建的内容。

Xcode8 +更新

从Xcode8中,从窗口选项卡中删除了项目选项,因此您仍然可以使用第一种方法:

Xcode -> Preferences -> location -> click on small arrow button as i explain in my first answer.

Xcode7.3更新 要删除特定项目的DeriveData,您只需要执行以下步骤:

前往Window -> Project

在此处输入图片说明

您可以找到项目列表,也可以转到DerivedData文件夹,也可以直接删除单个项目的DerivedData

在此处输入图片说明


我不在Xcode5上工作,但是在4.6.3中,您可以找到DerivedData下图所示的文件夹:

在此处输入图片说明

单击首选项后。

在此处输入图片说明

你得到这个窗口

在此处输入图片说明


1
非常感谢。“派生数据”内容是否基本上像Xcode的缓存和不需要的文件一样?因此,为什么可以删除它以清除空间?
Supertecnoboff 2015年

1
@gone您在说什么?生成的文件必须放在某个地方。
Droppy

2
好吧,对于CMake和其他make系统,即使是没有源代码的版本,生成的文件等仍位于项目路径中,如果我删除文件夹结构或在执行清理操作时将其清除,则会将其删除。由于每周大约要标记100个作业,因此我会记住要手动删除的大量文件,并使用XCode UI分别删除每个项目的数据。因此,尽管我现在已经在我的.bashrc中实现了William的别名,但我还是保留了我以前的评论。
消失了

XCode 8再次改变了事情(一直以来都是痛苦的)。现在,我们需要手动转到位于的文件夹/Users/YourUsername/Library/Developer/Xcode/DerivedData并将其全部删除。如您曾编辑过的XCode 7,我想你可能要再次编辑它的XCode 8
sweta.me

1
您可以查看我的完整答案,在相同的旧答案中仍然有多个答案仍可以使用,并且可以从“位置”标签中找到。:)
Nitin Gohel '17

124

我经常清理得很清楚,以至于我没有别名。它可以解决构建问题。我在/Users/Myusername/.bash_profile中具有以下内容

alias purgeallbuilds='rm -rf ~/Library/Developer/Xcode/DerivedData/*'

然后在终端中,键入purgeallbuilds,并删除DerivedData的所有子文件夹。


24
您可以删除DerivedData文件夹本身。它将被重新创建。
尼克·洛克伍德

1
当我删除此文件夹时,在Xcode 8中构建立即失败。一旦添加回去,一切又恢复了。
2016年

这是非常有用的提示。我通常每半年就会遇到空间不足的情况,很难记住应该清除哪些文件夹。别名绝对方便。
奥利弗·张

35

XCODE 10更新

在标签上:

  1. 点击Xcode
  2. 偏好
  3. 位置->派生数据

您可以访问所有派生数据,并通过删除它们来清除它们。


“派生数据”部分仅定义派生数据的路径。我看不到任何地方可以查看和删除它们。为什么不只是通过命令行呢?
AlxVallejo

2
@AlxVallejo在路径地址的末尾,您将看到一个图标,该图标会将您带到文件夹。点击它并删除该文件夹,它将重新创建。
Umit Kaya

34

XCODE 7.2更新

(也适用于7.1.1)

  1. 单击窗口,然后单击项目,然后删除派生数据

像这样:

在此处输入图片说明

然后在这里删除它:

在此处输入图片说明


希望有帮助!


2
这样一来,您便可以手动将其删除,但其他帖子中使用的方法是一次删除DerivedData文件夹中的内容
XIII

23
 $ du -h -d=1 ~/Library/Developer/Xcode/*

显示至少两个文件夹很大:

 1.5G   /Users/horace/Library/Developer/Xcode/DerivedData
 9.4G   /Users/horace/Library/Developer/Xcode/iOS DeviceSupport

随意删除文件夹中的内容:

 rm -rf ~/Library/Developer/Xcode/DerivedData/*

还有一些:

 open ~/Library/Developer/Xcode/iOS\ DeviceSupport/

2
废话...从设备支持文件夹的旧版本iOS中删除文件释放了28GB ...
kareem

17

刚刚使用一个小脚本创建了一个github存储库,该脚本创建了一个RAM磁盘。如果将DerivedData文件夹指向/Volumes/ramdisk,则弹出磁盘后所有文件都将消失。

它加快了编译速度,也消除了这个问题

XC启动回购

最好使用DTerm启动


11

XCode 8:删除当前项目的派生数据:

点击产品菜单

按住Option键

单击清理生成文件夹


当我按住选项键时,“清理构建”选项将变灰。:/
AlxVallejo

4

XCODE 10更新

单击以在状态栏上的Xcode,然后选择首选项

在弹出窗口中,选择最后一段之前的位置

您可以使用右小图标访问“ 派生数据”文件夹

在此处输入图片说明


2

〜/库/开发人员/ Xcode / DerivedData


默认是 我使用它~/tmp/DerivedData可以更轻松地访问内置文件/捆绑包。
Droppy

1

是的,可以安全删除,我的脚本搜索并删除找到的每个实例,可以轻松地将其修改为本地目录

#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
IFS=$'\n\t'

for drive in Swap Media OSX_10.11.6/$HOME
do
   pushd /Volumes/${drive}  &> /dev/null
   gfind . -depth -name 'DerivedData'|xargs -I '{}' /bin/rm -fR '{}'
   popd &> /dev/null
done


-1

我会说这很安全-我经常通过这种方式删除许多iOS项目的文件夹内容。而且,我在构建或提交到App Store方面没有任何问题。该过程将删除Xcode 5和Xcode 6的派生数据并清除项目的缓存资产。

有时,仅在“派生数据”目录上调用rm -rf会留下一个或两个缠绵的文件,但是我的脚本会循环运行,直到删除所有文件。


啊。错别字。我的意思是“提供”
clearlight'2

啊,我要链接到我在回答另一个问题时提供的脚本。这样,如果我想更新脚本,则只需要在一个地方进行编辑。您可以点击链接吗?
Sheamus

我现在看到了代码。之前没有看到链接(如果有的话),谢谢。
2015年

-1

“派生数据”的内容在构建期间生成。您可以安全地删除它。请按照以下步骤删除“派生数据”:

  1. 选择Xcode->首选项。

步骤1

  1. 这将打开弹出窗口。选择“ 位置 ”标签。在位置子标签中,您可以看到“ 衍生数据 ”。单击路径旁边的箭头图标。

第2步

  1. 这将打开包含“派生数据”的文件夹,右键单击并删除文件夹。

第三步

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.