7

我很好 Xcode 8.3.2 和 SourceKitService 正在使用我所有的 CPU。我在这里阅读了很多关于 stackoverflow 的问题,但我找不到真正的解决方案。

我尝试了什么:

  • 清理项目数据:cmd+shift+alt+K
  • 删除派生数据文件夹
  • 重启 Xcode
  • 从 git 重新下载项目代码

没有任何效果。我知道这个问题可能与某些代码有关,但我怎样才能发现问题出在哪里?我的项目很大...

目前 Xcode 无法使用...

谢谢你的帮助

4

4 回答 4

8

这并不是真正的“修复”,因为它也会对依赖向他们展示实时问题的人有害。但是,如果您转到 Preferences->General 并关闭“Show live issues”,那么 xcode 在凉爽的春日就像兔子一样运行。我更喜欢不时强制退出 SourceKit 服务。

于 2017-09-18T14:59:30.223 回答
2

SourceKit 一直很耗 CPU 和 RAM,速度慢并且容易崩溃。使用 Xcode 9(根据我的经验)会更好一些。

一个大问题是 Swift 中的许多表达式都有大量的重载。为了使类型推断起作用,所有这些都必须经过测试。这也是为什么 Swift 代码的编译时间通常稍长的原因。

一旦 SourceKit 开始处理此类表达式,其他一切都必须等待。

您可以通过避免长表达式来帮助 SourceKit,尤其是在使用二元运算符和链mapflatMap以及filter对集合和序列的操作时,因为解析此类表达式的返回类型的时间复杂度是指数级的。

您可以尝试通过声明变量的类型(let a: X = expr而不是let a = expr)来减少较长的类型推断时间。以我的经验,这也有助于链map和链(filter而不是)的闭包。flatMap{ param -> Result in ...}{ param in }

您可以使用-Xfrontend -debug-time-function-bodiesOther Swift Flags 构建设置中的标志来获取 Xcode 中构建报告中每个函数的编译时间,这可以帮助您识别编译器和 SourceKit 需要很长时间处理的表达式。详细说明可以在这篇博文中找到。

除此之外,我不知道任何其他解决方案。

于 2017-08-05T17:12:34.757 回答
2

我已经使用了很长时间的一个非常好的解决方案是使用Build Time Analyzer for Swift工具来分析我的代码库并显示所有需要大量时间来处理和编译的方法和函数的详细列表。

在此处输入图像描述

然后我会重构必要的文件和声明并再次测量我的结果。重复此操作,直到您获得非常好的和快速的编译时间结果。

还有一个不错的列表,其中包含有关 Swift 编译时间的建议。

于 2017-08-09T16:20:08.737 回答
0

我在具有多个情节提要的应用程序上看到了类似的问题,有趣的是,Xcode 仅在其中一个情节提要上遇到了问题。在那个故事板上工作真的很难,因为 CPU 会全力以赴。

我们的解决方案是找到该故事板,并将其进一步拆分为更小的故事板。这可以通过选择几个场景然后Editor -> Refactor to Storyboard...在菜单上轻松完成。

在此处输入图像描述

此更改使使用新的较小故事板变得更加容易。

于 2017-08-09T16:08:14.320 回答