SourceKitService消耗CPU并将Xcode研磨成停止

zee*_*ple 103 iphone xcode ios sourcekit swift

这不是Beta问题.我正在使用Xcode 6.0.1,即生产版本.我遇到的问题是,当我尝试构建或运行我正在处理的代码时,Xcode在很长一段时间内都没有响应,并且SourceKitService消耗了超过400%的CPU(根据Activity Monitor).这个问题在过去几天是新的,但奇怪的是,自从它于9月17日正式发布以来,我一直在使用Xcode 6.0.我升级到6.0.1,希望它能解决这个问题.

知道问题可能是什么?

LNI*_*LNI 144

今天早些时候在Xcode 6.1.1中遇到了这个问题(不是beta,正式发布的版本).我一直在Playground上运行一些代码,并怀疑这是原因.CPU被盯住了近100%,Xcode无法完成构建.

所以这就是我做的:

1.打开"Activity Monitor",显示SourceKitService为主CPU.

2.在"Activity Monitor"中,双击SourceKitService并单击"打开文件和端口"部分,该部分显示它正在处理/ Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache /目录下的文件对于特定文件夹.

3.删除指定的文件夹(从命令行,使用rm -rf).基于是否可以安全地删除Xcode Derived数据文件夹的内容来重新生成缓存.

4.再次使用Activity Monitor,强制退出SourceKitServer.在Xcode中看到了现在太熟悉的标志,说SourceKitService崩溃了(所以这就是为什么SourceKitService听起来很熟悉!).

5.重复步骤3.

Mac又是和平的.没有数据丢失,Xcode甚至不需要重新启动(我曾尝试过失败).底线是ModuleCache似乎在循环中获取SourceKitService并删除该文件夹似乎解决了它.希望这也适合你.

Bootnote:

顺便说一句,SourceKitService问题的原因是我的Swift类中的数组声明太长了.我在一个数组中有超过200个条目.将它减少到30并且错误消失了.因此,问题可能是由于苹果代码中的某种堆栈溢出(双关语意图)而引起的.

  • 在2016年我们无法处理200个元素的阵列会困扰其他人吗?我在80年代的Atari 600上使用了更长的BASIC阵列. (57认同)
  • 仍然在Xcode 9中有效.感谢Apple. (12认同)
  • 我在Swift中的一个长数组声明遇到了类似的问题,它在初始化期间依赖于类型推断.我发现通过显式注释类型解决了问题. (2认同)
  • 同样的问题.带字典的大数组.我只是将所有数据放在.PLIST文件中并读取它. (2认同)
  • 我现在遇到了同样的问题,正如@ jay492355所提到的,你需要明确地输入你的数组. (2认同)

jay*_*355 21

我看到了这个问题,因为我声明了一个包含大约60个元素的数组,如下所示:

let byteMap = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)]
Run Code Online (Sandbox Code Playgroud)

通过显式注释这样的类型:

let byteMap : [String: (Int, Int)] = [

["ECG" : (0,12)],
["PPG" : (12,3)],
["ECG" : (15,12)],
["PPG" : (27,3)],
["ECG" : (30,12)],
Run Code Online (Sandbox Code Playgroud)

我能够让它停下来.我认为它必须与Swift的类型推断和类型检查有关,当它遇到一个冗长的数组时会进入循环.

这是在Xcode 6.2中.我也删除了如上所述的ModuleCache,现在一切都很好.

  • 是的,这个问题很有名https://spin.atomicobject.com/2016/04/26/swift-long-compile-time/ (2认同)

Hon*_*ney 10

这个问题发生了10次,当我连接实际设备并且没有通过模拟器运行时发生了8次.

我不太确定我的解决方案是否合适,但对我来说,我认为问题是由于在模拟器和实际设备之间切换.这可能听起来很奇怪,但好像它在缓存文件之间产生了干扰.

什么解决了我的问题:

  • 清理构建文件夹:(在Xcode上)Alt + Shift + Command + K
  • 重置内容和设置:(在模拟器上)Command + Shift + K.
  • 等待时间比正常情况稍长,并且不断点击会使Xcode过载

所以基本上在尝试在任何新设备上运行之前,只需删除任何缓存.

编辑

我没有任何设备连接就遇到了问题.我刚退出Xcode并再次打开它,问题就消失了.在你获取/拉取合并新代码之后,不确定我的猜测是否可能是一些重新索引问题.


Den*_*Dog 6

XCode 10.0 中仍然出现该问题。您可以通过在源代码管理选项中禁用“显示源代码管理更改”来修复此问题。

在此输入图像描述