我何时可以安全地删除Xcode DerivedData文件夹?

时间:2019-11-19 05:35:51

标签: ios xcode build configuration xcodebuild

我一直在从事iOS项目。关于Xcode Derived Data文件夹的内容是由构建系统生成的,有很多Stackoverflow帖子,例如 ie how to remove derived data folderis it safe to remove derived data folder等,但是我没有寻找。我的问题是知道什么时候应该删除派生数据文件夹,什么时候不应该删除?换句话说,这种导出的数据在什么条件下变得不可重用?为什么?在项目的资源或配置更改或其他任何更改之后,那些派生数据会变得过时吗?在删除派生数据后,我经常看到许多问题已解决,但我们通常不尝试了解问题的根本原因。

我能简单地说,在.xcodeproj文件更改之前,可以安全地重用派生数据吗?


问题背景 :在我的项目中,我有一个证明构建系统,因此每个CL都需要在获得证明之前通过证明构建合并到远程分支。因此,当我应该(或不应该)重用派生的数据文件夹以使证明构建系统具有高性能时,我需要知道对架构师的风险。

4 个答案:

答案 0 :(得分:1)

派生数据也可能占用大量空间。在每个应用构建过程中都会生成派生数据。派生数据包含中间构建结果和生成的索引,这些结果有助于加快构建时间。 您可以将派生数据视为Web浏览器中的缓存数据/图像,大多数情况下,Web浏览器在第一次浏览网页时以及下次访问同一Web时会自动将数据/图像保存到硬盘中。页面,页面加载速度更快,因为Web浏览器将使用硬盘中的缓存数据/图像。

当您应该删除派生数据时,我只想提及几种情况:

  • 我多次遇到此问题,因为Xcode的调试器停止工作 突然,所以解决了这个问题,我删除了派生数据并开始 工作正常。
  • 每当您在构建项目时遇到问题时,最好删除派生数据并重新构建。
  • 删除派生数据会导致建筑项目的轻微延迟 第一次,但是会删除该项目的所有旧设置。
  • 删除派生数据可以提高系统的性能,因为它拥有大量的存储空间,这可能很长了。
  • 最后但并非最不重要的一点是,有时是不合逻辑的错误, 您要做的就是删除衍生数据,并且错误消失了。

很乐意提供帮助!

答案 1 :(得分:1)

您可能希望在--p时清除派生数据


  1. 当您从远程存储库中提取代码时,因为它可能包含您可能在其他模块/项目中使用的新文件/已删除文件。

考虑您的工作区中有两个项目(例如ProjectA和ProjectB)。

1) You already build your app and their derived data is available.
3) Now consider there is reference to some `Class` of Project A in Project B. You have used static function form  ProjectA classes.
2) Now you pull code from remote repo and it contains changes for Project A only.
3) In this pull, the used static function form ProjectA gets deleted.
3) When you build app again, only Project A gets complied again but not Project B because it has no code change. Inshort, when there is change in code XCode complies that module again not complete app.
4) Now you will you get build issue as dependencies are not correct now. Project B has no idea what happened.
5) So in this case, you should clean derived data.

  1. 正确的代码覆盖率报告。

代码覆盖率报告到默认的派生数据目录,该目录位于〜/ Library / Developer / Xcode / DerivedData。 您可以清除代码coverge报告表单DerivedData并重新整理它。


如果我错了,请纠正我。根据我的理解。

如果我发现更多原因,将更新此答案。

答案 2 :(得分:1)

可悲的是,删除DerivedData已成为尝试解决构建问题的全部方法。如您所知,您可以随时毫无问题地删除DerivedData(除非您正在构建)。关于何时安全的细微差别更加复杂。在实践中,我通常发现内部版本之间的代码进行重大更改可能会出现问题。同样,更改Xcode版本也会遇到问题。这里的关键词是 can ,但这并不意味着会。

我不知道有什么确切的方法可以知道何时清除,这就是为什么我认为您发现大多数人通常会问“有人删除了DerivedData是某人构建时的第一个问题”问题。

恕我直言,我认为Xcode在DerivedData中有一些微妙的缓存,因为在无法跟踪的怪异情况下,我的构建失败了。如果Xcode有一些与此缓存相关的细微错误,我不会感到惊讶。通常,我只信任项目的DerivedData的命令行删除。如果我格外小心,我还将清除所有关联的库/框架以及ModuleCache(在DerivedData中)。 /var/folders中也有一些伏都教徒。不知道情况是否仍然如此,但是我发现自己在那里外科手术压制东西。是的,不好。但是我也是那种编辑project.pbxproj文件来修复它的人,所以我想我要格外小心。

让我问你这个问题。更重要的是什么? “防弹”还是建造时间?我一直致力于维护或升级一些应用程序的构建系统。我一直将所有工作作为干净的构建。这始终是从源代码管理中重新提取的,然后在工作空间中具有已定义的DerivedData(这些是Jenkins构建的,并配置为使用干净的工作空间)。这几乎避免了与需要删除DerivedData有关的构建问题。我已经看到由于某些Xcode伏都教,发生了太多奇怪的问题。如果发生构建错误,最好不要添加红色鲱鱼。

如果确实发现构建以及所需的任何测试花费的时间太长,则可以开始设计其他策略来帮助使其更易于管理。这变得非常依赖项目。例如,在我正在从事的项目中,我将所有库都移至了预构建版本。出于某种原因,他们在安装过程中设置了必须构建所有第3方库(如openssl)的位置。这也意味着开发人员在首次构建或清理的任何时候都会遭受构建损失。

答案 3 :(得分:0)

我什么时候可以删除派生数据?

如果您碰巧在多个计算机(物理或虚拟)上运行多个构建代理,则每个代理都应自己进行清理。清除派生数据可能会增加第二天每个项目的首次构建时间,但是这是一个小缺点。您还可以通过杀死DerivedData的巨大食欲来收回自由空间。带回家的实用建议-定期在CI框中清理Xcode派生数据,您可以创建一个cron作业来做到这一点,使其在午夜之后运行一段时间并执行此简单的shell命令。

rm -rf /Users/username/Library/Developer/Xcode/DerivedData/*

要在开发计算机上日常使用,请在bash配置文件中创建类型别名。

typealias xcode-clean-derived="rm -rf /Users/i4niac/Library/Developer/Xcode/DerivedData/*"

来源: https://mgrebenets.github.io/mobile%20ci/2015/02/01/xcode-derived-data

相关问题