SourceKitService已终止


242

我在Xcode上遇到问题,错误“ Source Kit Service Terminated”弹出,并且所有语法突出显示和代码完成在Swift中都消失了。我怎样才能解决这个问题?

这是一个示例图像:

在此处输入图片说明


1
这似乎是Xcode beta的问题。重新启动Xcode为我解决了这个问题,尽管在重新打开项目时出现了错误,然后停止了。
ThomasW

4
我刚开始遇到这个问题...然后我在swift文件中发现了语法错误。解决此问题后,编辑器将重新开始工作。
布雷迪2014年

80
我想为此立即解决...
圣诞老人

2
该错误确实是由Swift内部的语法错误引起的。如果您删除语法错误,该错误将消失:)
Steffen Brem 2014年

2
它不仅无法在6.1中解决,而且即使是最微小的“错误”(甚至都不是错误)也会发生。您通常可以在仍然输入时触发它。当我到达“结构”中的“结构”时,我就实现了它。我猜它真的很想告诉我一些东西,然后再得到“ ct”!
Maury Markowitz 2014年

Answers:


114

我的答案(Xcode6-Beta7)只是删除Derived Data文件夹。

Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.

希望这对某人有帮助。显然有很多原因可以导致此崩溃。


谢谢,此问题已解决。
Noura

4
看来这解决了问题,但也使用Xcode 6.1 GM。
Flovdis 2014年

7
这修复了大约10分钟,然后我更改了变量的名称,它回来了!
hariseldon78 2014年

1
不是永久性的修复,而是增强答案..创建一个shell脚本并在rm -frd〜/ Library / Developer / Xcode / DerivedData / * rm -frd〜/ Library / Caches / com.apple.dt发生时运行它。 Xcode / *
2015年

2
没有解决我的问题
Shirish Kumar

35

我相信我可能已经找到了更通用的解决方案。以下是我用来鼓励Xcode不产生SourceKitService Terminated错误的步骤。


我出现的症状:

  • 当我启动一个新的游乐场时,我将收到一个关于无法与游乐场进行通信的错误消息(Error running playground: Failed prepare for communication with playground.请参见twitter上的此图像)
  • 当我将游乐场从切换OS X到时iOS,我会收到另一个错误(不幸的是我没有写下那个错误)。
  • 当我开始在基于iOS的Swift项目中键入内容,尝试在任何UIKit特定类上使用代码完成/智能提示时,我会SourceKitService Terminated在此线程中收到问题。

调试过程:

  • 我通过谷歌寻找SourceKitService开始,这很少。
  • 然后,我在使用Xcode时开始监视Console.app。这显示了几个错误:
    • IDEPlaygroundDocument: Error encountered running playground
    • com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.

我为纠正此问题所做的工作。

如果您只是在Swift项目的上下文中遇到问题,请先尝试单独解决。如果这不起作用,请尝试下面的所有步骤。

  1. 打开项目,并将目标的部署目标更改为<= 7.1。

更冗长和复杂的过程。(前3个步骤肯定没有帮助,但是我做到了,因此请在此处记录下来)

  1. 完全删除系统上Xcode的所有副本。
  2. 重启你的电脑。
  3. 仅重新安装Xcode6-beta。
  4. 验证您在操场和/或项目中仍然存在问题。
  5. 打开iOS模拟器。
  6. 硬件->设备->管理设备
  7. 卸下所有设备。
  8. 重新创建所需的所有设备。我将iOS版本附加到名称的末尾,仅仅是因为。
  9. 重新启动Xcode和模拟器。
  10. 从切换OS X到时,请确保至少游乐场不再引发问题iOS
  11. 打开项目,并将目标的部署目标更改为<= 7.1。

分析

看来问题出在Xcode6无法正确找到并连接到模拟器。我无法确定为什么会这样,但这使我可以继续使用Swift进行开发。这可能与模拟器二进制文件似乎已经移动的事实有关。


2
发生了类似的问题:“未安装所选设备的运行时。” 为iPhonesimulator运行操场时出错。步骤5.〜9。解决了这个问题。
大麦

注意-Xcode 6 Beta 3已完全为我解决了该问题。不知道如何或为什么。希望其他人也是如此。
安德鲁·蒙希扎德

2
感谢您的这些步骤。我将部署目标从7.0调整为7.1,目前看来已经解决了该问题。
尼克,

将部署目标设置为7.1对我有用,但是我将框架目标与应用程序目标一起使用,因此导致编译失败,这确实很糟糕。但是即使颜色恢复了,我也没有任何代码建议!
所罗门

1
遵循了所有这些步骤,但是对我来说不起作用。:-/
Rohit Goyal,2015年

32

您只需要删除“ ModuleCache”,这是Xcode用于自动完成的某种缓存。

将以下行复制并粘贴到终端中:

rm -rf〜/库/开发人员/ Xcode / DerivedData / ModuleCache


1
这为我做到了。有一段时间,我只能在活动方案中选择IOS设备时才能突出显示和自动完成。
Wez 2014年

1
这也对我有用。根据发行说明这里 的一些,这是固定在Xcode 6.1.1 GM种子
雅各布·哈丁

years,几年后,Xcode绝对不是固定的。每次单击符号时,使用Xcode 8.1(8B62)并仍获取SourceKitServer崩溃。清除了派生数据,删除了ModuleCache。重新启动Xcode。重新安装了Xcode。在计算机上安装了Xcode 。同样的事情发生。Xcode是一个可怜的烂摊子。
Womble

27

键入后,SourceKitService在我的系统上崩溃

extension foo {

我正在使用Xcode 6 beta 6,无论我将其键入一个空文件还是将其添加到现有文件中都没有关系。源包含一个extension块时,它将立即崩溃。即使在新创建的项目上也会发生这种情况。

我的“解决方案”是避免扩展当前正在使用的源代码。我注释掉一个类块的结尾和扩展块的开头。一旦完成我在课堂上的工作,我就再次评论他们:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}

只是一个注释-扩展在beta 5中没有这样做。这是beta6的新“功能”。
Gene De Lisa 2014年

任何其他解决方法,因为我的项目中有大量扩展。现在无法使用此Xcode。
Bagusflyer 2014年

这个这个这个大这个。我发现这就是我最近的项目所困扰的。立即提交错误报告。
Ben Kreeger 2014年

2
对我来说也是个大问题。我已经将扩展名移动到自己的文件中,在类中编写了代码,然后将它们复制粘贴到扩展名中。这种漏掉的方式有点令人困惑。
2014年

9

插入touchesMoved函数后,它开始在我的spritekit项目中发生。此函数使用强制展开,这似乎会引起问题:

override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)

删除感叹号并因此停止强制展开后,SourceKitService停止崩溃。

希望这可以帮助!


为我工作!非常感谢(希望他们能解决这个问题!)
napolux14年

9

我在Apple的开发人员论坛上找到了一种解决方案(需要登录,因此我也将在此处进行说明)。

TLDR:请勿@protocol在Objective-C中将与相同的导入到Swift桥接头中@interface。例如,Facebook SDK同时具有协议和名为“ FBGraphObject”的接口。

这是论坛帖子:

添加Facebook SDK会导致SourceKitService崩溃。如果您想使用beta 3并且需要Facebook SDK,我发现并为我工作的一种解决方法是重构Facebook SDK的@protocol FBGraphObject并将其重命名为@protocol FBGraphObjectProtocol之类的东西,因为@interface FBGraphObject也存在,并且显然是SourceKit不喜欢

肯定是一个临时解决方案,只是为了保持功能正常,您必须使用Cocoapods或以其他方式自己构建Facebook SDK,而不是使用框架库。

暂时,您需要确保没有冲突的@protocol和@interface声明,并且其中包括您可能正在使用的第三方库。

今天这让我付出了代价,希望对您有所帮助!


e.parto发表于20147月10日


非常感谢。它解决了我的问题。
维克多·拉琴科

如果您使用Jon Sterling的轻量级不变性模式(jonmsterling.com/posts/…),则此错误会浮出水面,因为它建议与实现共享名称的协议。重命名协议为我解决了这个问题,没有任何不良影响。
erikprice 2014年

Facebook SDK已为我解决了这一问题3.17.1
KVISH

这为我解决了!感谢👏🏻-
罗马

8

在项目中使用Swift之外的其他名称。“快速”保留。


10
我也收到此警告,但是我的项目名称根本不包含Swift这个词,因此这不是“ the”解决方案,而仅仅是“ a”解决方案。不,我还没有弄清楚我的问题是什么。
Andrew Monshizadeh 2014年

1
@AndrewMonshizadeh同样的问题,没有对Swift的引用,但是在出现此错误之前,我几乎不能键入一个或两个字符。
BytesGuy 2014年

1
进一步的调查使我确定,当我尝试在的子类上使用代码完成功能时,收到了SourceKitService Terminated错误UIView
Andrew Monshizadeh 2014年

4
这不是问题的原因。我不知道为什么要反对。
圣诞老人

1
NRitH,当使用Xcode 6 beta 1时,我遇到了这个问题,并且更改项目是对我有用的修复程序。可能有许多错误会触发此错误。您可能正在使用Xcode的较新版本,并且他们可能已修复了该错误。
Marius Fanu 2014年

8

在Xcode 6 Beta 3中,我每隔几秒钟就会遇到这个问题,即使在全新的项目中,它仍然持续存在。我将部署目标从8.0更改为7.1,并且已停止。


5

您的项目名称是Swift?看到该消息,构建也将失败(<unknown>:0: error: module name "Swift" is reserved for the standard library)。尝试使用其他项目名称,例如SwiftTest。会的。


3

为了解决这个问题,您的Swift代码可能存在一些奇怪的问题。例如,由于您处于复制和粘贴的中间,因此具有多个IBOutlets定义。通常,这只是无法处理的语法错误。


2
我看到来自Xcode项目模板的未经修改的代码存在此问题,因此我认为这与Swift代码无关。
ThomasW

这可能是由多个具有相同名称的IBOutlet引起的。
托尼

3

我发现通过显式(静态)键入变量类型,而不是推断它们,可以为我解决问题。


3

如果Xcode是打开的,请退出。然后从终端运行:

defaults delete com.apple.dt.Xcode

这会将Xcode恢复为默认设置。打开Xcode,一切都会再次正常运行。


2

对我来说(xcode 6.1)的原因是我忘了将子类用于协议。

例如,这是错误的:

protocol SomeProtocol { ... }
class A :NSObject, SomeProtocol {
...
}
class B : A {
...
}

没关系:

protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}

与被遗忘的协议有相同的问题。感谢您的意见。似乎xcode的发行版本仍然可以像beta =一样工作)
John Kakon 2014年

谢谢!我为此一直发疯。您的解决方案解决了我的问题。我希望这将是固定的,觉得奇怪,要加在每个子类中的协议..
艾尔文

1

仅由这两行组成的程序(在Swift语法上可能是错误的)足以在此处引起“ SourceKitService Terminated”错误:

var x = 42
println("Hello", x)

使用let代替var使编辑器再次正常运行。Xcode 6.0版(6A215l)


我通常怀疑当Xcode无法处理某些语法错误时会出现此错误-在实际代码中或在进行构建时(例如在项目名称中具有快速名称)
Lyndsey Scott

我的意思是,该错误可能是由语法错误引起的,并且由于您的代码具有明显的语法错误,因此符合我的理论。
林德西·斯科特

“ SourceKitService Terminated”作为对语法错误的响应没有任何意义。这是我指出的错误。这是有问题的错误。
亚历山大

是。这就是“ bug”一词的意思。此错误似乎是由语法错误触发的。希望苹果公司会尽快修复它。
Lyndsey Scott

1

今天遇到了同样的问题,问题出在println,我只是尝试使用旧的NSLog样式来打印值:

// something like this
println("value = %@", valueObj)

我们如何快速组成字符串的方式已经从printf样式演变为嵌入式样式,因此现在您将值直接嵌入到格式字符串中,如下所示:

"Here goes \(YOUR_VARIABLE)"

因此,对于上面的示例,解决方案是:

println("value =\(valueObj)")

嘿,@ downwoter,这个答案出了什么问题?对我来说似乎很好。我知道我们仍然可以在Swift中使用NSLog,但是从Swift开始,println就是这样做的方法。这个答案直接与问题有关,所描述的行使SourceKit服务崩溃。
MANIAK_dobrii 2014年

我有一个与println()类似的问题,试图打印未命名的元组
thisispete 2014年

1

对于在beta 2中创建的项目,我在Xcode6 beta 3中存在相同的问题。

这是因为快速语言(即数组声明语法)发生了新的重大变化。

检查由于Beta 3中的重大更改而导致的影响的代码。

http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf

我的例子之一是:

我不得不改变:

var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;

var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController

结论:好像源代码中有错误,在某些情况下,此错误是Xcode产生的。

修复错误之前的解决方法:手动检查错误:)

祝好运!


1

对我来说,解决方案刚好是更换模拟器。我在模拟器上使用的是iPhone 5S,当我将其切换到iPhone 5时,一切运行正常。希望将来的版本将完全修复它。


我发现iPhone 5模拟器永远是最好的选择,其他每一次都崩溃
Daniel Galasko 2014年

@DanielGalasko有趣。我通常使用iPhone 5S,对我来说非常稳定。
Fomentia 2014年

如果您使用的是Xcode 6.1,那么据我所知:)
Daniel Galasko 2014年

我撤回我的声明,该声明仍然
无效

1

我发现从终端删除派生数据可以解决此问题,直到下次崩溃为止。:S

它位于:/ Users / {用户名} / Library / Developer / Xcode / DerivedData / {Project Name}-{Random char sequence}

我希望这有帮助。


1

我想我已经找出了发生这种情况的原因之一(可能有很多)。

就我而言,我是通过具有以下其中一项的Bridging Header导入Objective-C文件的:

  1. 目标C导入的实现文件(.m)没有正确设置应用程序目标。
  2. Objective-C文件仅具有标头(.h)文件,而没有实现(.m)文件。(同样,我认为这是“没有适当的应用程序目标”设置的一部分,因为您只能在.m文件中设置目标,而不能在.h文件中设置目标)

在Objective-C文件上修复应用程序目标,或者一起删除桥接头中那些文件的导入,似乎可以解决此问题。

仅供参考-如果您需要设置没有实现(.m)文件的标头(.h)文件的目标,则可以按照以下简单步骤操作:无法在Xcode 4.5中更改目标成员资格可见性


1

只是为了在这里添加一个潜在的解决方案,我不小心将一个名为var的类命名为与它的类型相同的名称:

class var Settings:Settings {
        get { return classVarWorkAround.settings }
    }

当然,这会使SourceKit崩溃。愚蠢的语法错误,但万一其他人犯了同样的错误。

编辑:也根据@Portland Runner:

同样,如果将返回类型设置为func名称,则会收到错误消息。

func foo() ->foo{}

1
同样,如果将返回类型设置为func名称,则会收到错误消息。 func foo() ->foo{} (随时将其添加到您的答案中)
波特兰赛跑者2015年

0

当此错误开始弹出时,只需注释掉您编写的最后/最近的一段代码,然后等待一段时间。语法高亮应重新出现。这就是我解决问题的方法。

    func someFunc() -> (Int?, Int?, Int?) {
     var retVal1:Int? = nil
     var retVal2:Int? = nil
     var retVal3:Int? = nil

     //some other code

     //commenting out the line below helped me
     //(retVal1, retVal2, retVal3)
     return (retVal1, retVal2, retVal3)
    }

无论您执行任何操作,系统都会自行重新引导。您不必注释掉该行,它仍将很快再次开始运行。当然也崩溃了。
Maury Markowitz 2014年

0

向Apple报告(#17266321):

细节:

摘要:如果我们尝试将值作为数组的字典进行打印,则会弹出一个弹出窗口,提示“ SourceKit已终止。编辑器功能受时间限制”。Xcode冻结并失去上下文识别,导致文本变黑。

重现步骤:1.创建一个数组-“ var iOSHistoryArray = [” iOS6“,” iOS7“,” iOS8“,]”

  1. 将字典创建为-“ var MacOSYosemiteFeatures:Dictionary = [” Device“:iOSHistoryArray]”。

  2. 将字典打印为-“ println(”包含数组值的字典:%@ \ n“,MacOSYosemiteFeatures)” (<<-Culprit->>)

  3. 步骤3导致问题注释,这使Xcode再次起作用。

预期结果:Xcode应该正常运行。

实际结果:Xcode失效,失去上下文识别(所有字体丢失,所有文本变为纯黑色),整个Xcode变为非活动状态。

版本:6.0版(6A215l)


0

试试吧:

Swift编译器/索引器中有一个错误。代码中的某些行给它带来了困难。在使用Xcode打开该项目之前,您必须使用其他文本编辑器编辑代码以注释掉有问题的行。如果您不知道问题出在哪里,请注释掉所有代码。打开项目后,您可以一点一点地开始带回代码,直到CPU活动增加表明您已找到问题为止。


@Pang如果答案正确正确并且相同,那么问题很可能是重复的,因此您应该投票或举旗将其关闭-在这种情况下,这绝对是可以保留的
user151019 2014年

0

问题:

  • 如果源代码中有错误,则可能会弹出“ SourceKitService Terminated”,并且代码突出显示将停止工作。当它在多种不同条件下运行时,它可能会也可能不会发生。

我的情况:安装了beta 3,仅OSX项目,一个文件检测到“半封闭范围运算符已从..更改为.. <”错误。弹出窗口开始出现,代码突出显示开始失败。

解:

  • 修复Xcode检测到的错误
  • 在Navigator中更改为其他.swift,回到原始
  • 语法高亮再次出现,“ SourceKitService Terminated”弹出消失了


0

就我而言,我已经在桥接头文件中导入了丢失的文件。删除错误的导入后,错误通知消失了。


0

嵌套的Objective-C ++项目出现了相同的错误,该项目现在包括带有Swift代码的Framework。为了解决此问题,我必须显式构建框架。一旦我做到了,这个问题就消失了,也不会回来;)


0

xcode 6版本6.0(6A313)仍在发生

  • 创建一个新项目
  • 添加框架和库
  • 选择可可触摸框架
  • 添加一个Swift文件
  • 将类添加到swift文件

崩溃

ps:全新的mac mini,没有以前的xcode安装,没有任何异国情调。我想只是一个beta产品。


0

Xcode 6.1 Beta 3:

typealias Foo = Int在一个Swift文件中定义非私有类型别名(例如)后,c在另一个文件中键入字母,SourceKitService就会崩溃。

解决方案是退出使用类型别名,等待下一个beta版本发布,或者将您的类型别名包装在类定义中:

public class DummyClass {
    public typealias Foo = String
}

并像这样使用它:

var myVar:DummyClass.Foo?

0

将部署目标更改为iOS 8.0对我有用。我知道有人说将其移至<= 7.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.