SourceKitService已终止

时间:2014-06-03 02:29:34

标签: ios swift xcode sourcekitservice

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

以下是一个示例图片:

enter image description here

34 个答案:

答案 0 :(得分:112)

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

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

希望这有助于某人。发生此次崩溃的原因显然很多。

答案 1 :(得分:35)

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


我遇到的症状:

  • 当我开始一个新的游乐场时,我会收到一条错误消息,表示无法与游乐场沟通(Error running playground: Failed prepare for communication with playground.请参阅this image on 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。
  2. 更长的和更复杂的过程。 (前三个步骤肯定没有帮助,但我做了它们,所以在这里记录它们)

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

    12. 分析

      问题似乎是Xcode6无法正确查找和连接到模拟器。我无法确定为什么会出现这种情况,但这让我可以继续使用Swift进行开发。这可能与模拟器二进制文件seem to have moved的事实有关。

答案 2 :(得分:32)

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

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

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

答案 3 :(得分:27)

一旦我输入

,SourceKitService就会在我的系统上崩溃
extension foo {

我正在使用Xcode 6 beta 6,如果我将其输入空文件或将其添加到现有文件中并不重要。一旦源包含一个extension块,它就会崩溃。 即使在新创建的项目中也会发生这种情况。

我的“解决方案”是避免扩展我目前正在处理的来源。我注释掉了类块的结尾和扩展块的开头。一旦我完成了课堂上的工作,我就再次对它们进行评论:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}

答案 4 :(得分:9)

插入touchesMoved-function后,它开始在我的spritekit项目中发生。此函数使用强制解包,这似乎导致了问题:

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

删除感叹号后停止强制解包,SourceKitService停止崩溃。

希望这有帮助!

答案 5 :(得分:9)

我在Apple的开发者论坛上找到a solution(需要登录,所以我也会在这里解释)。

TLDR :请勿将Objective-C中的@protocol导入名为与@interface相同的Swift桥接标头。例如,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 发布于 2014年7月10日

答案 6 :(得分:8)

为项目使用除Swift之外的其他名称。 "夫特"保留。

答案 7 :(得分:8)

我在Xcode 6 Beta 3中每隔几秒就遇到这个问题,即使在全新的项目中也是如此。我将部署目标从8.0更改为7.1,它已停止。

答案 8 :(得分:5)

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

答案 9 :(得分:3)

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

答案 10 :(得分:3)

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

答案 11 :(得分:3)

如果Xcode打开则退出。然后从终端运行:

defaults delete com.apple.dt.Xcode

这会将Xcode恢复为默认设置。打开Xcode,一切都应该再次运作。

答案 12 :(得分:2)

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

例如,这是错误的:

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

这没关系:

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

答案 13 :(得分:1)

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

这是因为swift语言的新变化,即数组声明语法。

检查受影响的代码是否因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产生的。

直到错误修复的解决方案:手动检查错误:)

古德勒克!

答案 14 :(得分:1)

只包含这两行的程序(在Swift语法方面可能是错误的)足以导致&#34; SourceKitService终止&#34;错误在这里:

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

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

答案 15 :(得分:1)

为了在这里添加一个可能的解决方案,我不小心将类名称命名为与其类型相同的名称:

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

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

编辑:同样根据@Portland Runner:

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

func foo() ->foo{}

答案 16 :(得分:1)

我的解决方案恰好是改变模拟器。我使用iPhone 5S作为我的模拟器,当我将它切换到iPhone 5时,一切都运行得很好。希望未来版本能够完全解决它。

答案 17 :(得分:1)

我想我发现了一个(因为可能有很多)这种情况发生的原因。

在我的情况下,我通过具有以下其中一项的Bridging Header导入Objective-C文件:

  1. Objective-C导入的实现文件(.m)没有 app target设置正确。
  2. Objective-C文件只有一个标题(.h)文件而不是 实现(.m)文件。 (再次,我认为这是&#34; no。的一部分 适当的应用目标&#34;设置,因为您只能在.m文件中设置目标 而不是.h文件)
  3. 修复Objective-C文件上的app目标或删除Bridging Header中这些文件的导入似乎解决了这个问题。

    仅供参考 - 如果您需要设置没有实施(.m)文件的Header(.h)文件的目标,您可以按照以下简单步骤操作:Can't change target membership visibility in Xcode 4.5

答案 18 :(得分:1)

今天遇到同样的问题,事情是println,我只是尝试使用旧的NSLog样式打印一个值:

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

我们应该如何在swift中编写字符串的方式已经从printf样式演变为内联样式,所以现在您将值嵌入到格式字符串中,如下所示:

"Here goes \(YOUR_VARIABLE)"

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

println("value =\(valueObj)")

答案 19 :(得分:1)

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

它位于:/ Users / {User name} / Library / Developer / Xcode / DerivedData / {Project Name} - {Random char sequence}

我希望这会有所帮助。

答案 20 :(得分:0)

仍在使用xcode 6 Version 6.0(6A313)

  • 创建新项目
  • 添加框架&amp;图书馆
  • 选择可可触摸框架
  • 添加Swift文件
  • 将类添加到swift文件

崩溃

ps:全新的mac mini,没有以前的xcode安装,没有异国情调。我认为只是一个测试产品。

答案 21 :(得分:0)

Swift试图找出动态而不是静态的所有类型,但是当它处理复杂类型(如链式过滤器,map,flatMap调用)或大型词典时,可能需要付出巨大的努力。有时您需要将它们分解以使编译器更容易分析。这个问题的一个表弟是错误&#34;太复杂而无法及时评估&#34;。想象一下,其中一些几乎过于复杂而无法及时评估:它们一起变成了资源匮乏。

尝试查找创建动态词典的所有位置或使用无类型调用链。尝试更具体地输入,特别是在变量的声明中。

一些简单的例子:

字典

为:

let myDict = [ /* bunch of different things */ ]

更好:

let myDict: [String: AnyObject] = [ /* bunch of different things */ ] 

最佳:

let myDict: [String: SpecificType] = [ /* bunch of similar things */ ]

映射

为:

let filteredUserIds = users.filter({ user in user.enabled })
    .flatMap { user in user.name != nil ? return user.id : return nil }

更好:

let filteredUserIds: [Int] = users.filter({ user in user.enabled })
    .flatMap { user in user.name != nil ? return user.id : return nil }

最佳:

let enabledUsers: [User] = users.filter { user in user.enabled } 
let filteredUserIds: [Int] = enabledUsers.flatMap { 
    user in user.name != nil ? return user.id : return nil 
}

这些好处也是额外检查代码,因为您将始终获得预期类型或编译器错误。缺点是它开始看起来有点像Java。

当然,当您的项目增长时,这个问题会首先累积。小Swift项目总是很快。所以可能它需要做很多工作。经验告诉我们什么表达是复杂和耗时的。如果你可以对这些事情进行基准测试,那就太好了。

答案 22 :(得分:0)

在过去的几个月里,我几乎每天都会出现这种情况。尝试了以上所有内容,它只是暂时修复它。

最后,两周前我将DerivedData位置的位置更改为一个新位置,我没有遇到过这个问题。

我注意到当我删除Derived Data文件夹时,它会重新生成并且出于某种原因大约为3GB。当我创建一个新文件夹时,它没有重新生成所有这些数据。

希望这有助于某人。

答案 23 :(得分:0)

在主要类之前移动扩展名。

extension SomeType {
// new functionality to add 

}

答案 24 :(得分:0)

到目前为止,我最常见的两个原因是:

  • 行尾的分号
  • 导入文件中未引用的框架

答案 25 :(得分:0)

将部署目标更改为iOS 8.0对我有用。我知道有人说将其移至&lt; = 7.1工作,但这个问题似乎来自多个来源,所以这个替代方案可能有用。

答案 26 :(得分:0)

Xcode 6.1 Beta 3:

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

解决方案要么使用类型别名,等待下一个beta版本,要么在类定义中包装类型别名:

public class DummyClass {
    public typealias Foo = String
}

并像这样使用它:

var myVar:DummyClass.Foo?

答案 27 :(得分:0)

我在嵌套的Objective-C ++项目中遇到了同样的错误,该项目现在包含带有Swift代码的Framework。为了解决这个问题,我必须明确地构建框架。一旦我做了那个问题就消失了,并且没有回来;)

答案 28 :(得分:0)

在我的情况下,我在桥接标题中导入了丢失的文件。删除错误的导入后,错误通知消失了。

答案 29 :(得分: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)
    }

答案 30 :(得分:0)

在xcode中,转到菜单栏&gt;&gt;窗口&gt;&gt;设备(shift + cmd + 2)将弹出一个新窗口,并在左下方添加一个新的模拟器,特别​​是在iOS 8.0上运行的模拟器到现有列表 编辑:您可能需要重新启动xcode

refrence:http://www.reddit.com/r/swift/comments/2bznfo/error_running_playground_unable_to_find_suitable/

答案 31 :(得分:0)

报告给Apple(#17266321):

详细说明:

要点: 如果我们尝试打印一个值为数组的字典,弹出窗口会继续弹出说 - &#34; SourceKit终止。编辑器功能暂时有限&#34;。 Xcode冻结并失去上下文识别功能,导致文本变黑。

重现步骤: 1.创建一个数组作为 - &#34; var iOSHistoryArray = [&#34; iOS6&#34;,&#34; iOS7&#34;,&#34; iOS8&#34;,]&#34;

  1. 创建字典为 - &#34; var MacOSYosemiteFeatures:Dictionary = [&#34; Device&#34;:iOSHistoryArray]&#34;。

  2. 将字典打印为 - &#34; println(&#34;包含数组值的字典:%@ \ n&#34;,MacOSYosemiteFeatures)&#34; (&lt;&lt; -culprit - &gt;&gt;)

  3. 步骤3导致问题评论,使Xcode再次起作用。

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

    实际结果: Xcode变得无法运行,丢失了上下文识别(所有字体都丢失了,所有文本都变成了纯黑色),整个Xcode变为非活动状态。

    版本: 版本6.0(6A215l)

答案 32 :(得分:0)

问题:

  • 如果源代码中存在错误,则&#34; SourceKitService已终止&#34;可能会出现弹出窗口,代码突出显示停止工作。它可能会或可能不会发生,当它在多种不同条件下发生时。

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

解决方案:

  • 修复Xcode检测到的错误
  • 在导航器中更改为其他.swift,返回原来的
  • 语法高亮显示重新出现,&#34; SourceKitService已终止&#34;弹出消失了

答案 33 :(得分:0)

试一试:

  

Swift编译器/索引器中存在一个错误。一些线或线   你的代码给它带来了困难。您必须编辑代码   用其他文本编辑器来评论违规行   在您能够使用Xcode打开该项目之前。如果你有   不知道问题是什么,请注释掉你的所有代码。一旦你有了   项目打开后,你可以开始一点一点地恢复代码   直到CPU活动的增加告诉你,你已经找到了   问题