SourceKitService终止
我遇到了一个Xcode的问题,出现“源代码包服务终止”错误,Swift中所有的语法高亮和代码完成都消失了。 我该如何解决这个问题?
这是一个示例图像:
我的答案(Xcode6-Beta7)只是简单地删除Derived Data文件夹。
Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.
希望这有助于某人。 为什么会发生这种崩溃显然有很多原因。
我相信我可能find了一个更通用的解决scheme。 下面是我用来鼓励Xcode不产生SourceKitService Terminated
错误的步骤。
我有这些症状:
- 当我开始一个新的游乐场的时候,我会收到一个关于不能和操场沟通的错误(误操作
Error running playground: Failed prepare for communication with playground.
请在twitter上看到这个图片 。 - 当我将
OS X
从OS X
切换到iOS
,会收到另一个错误(不幸的是我没有写下这个错误)。 - 当我开始键入基于iOS的Swift项目时,试图在任何UIKit特定的类上使用代码完成/ intellisense,我将在此线程中收到
SourceKitService Terminated
问题。
debugging过程:
- 我开始通过谷歌查看SourceKitService,这很less。
- 然后我开始使用Xcode监视Console.app。 这显示了一些错误:
-
IDEPlaygroundDocument: Error encountered running playground
-
com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.
-
我做了什么来纠正这个问题。
如果您在Swift项目的上下文中只有一个问题,请先尝试一下。 如果这不起作用,请尝试下面的所有步骤。
- 打开您的项目并将目标的部署目标更改为<= 7.1。
更漫长和涉及的过程。 (前三步不是很有帮助,但是我做了,所以在这里logging下来)
- 彻底删除系统上所有Xcode的副本。
- 重启你的电脑。
- 仅重新安装Xcode6-beta。
- 确认您在操场和/或项目中仍存在问题。
- 打开iOS模拟器。
- 硬件 – >设备 – >pipe理设备
- 删除所有设备。
- 重新创build你想要的所有设备。 我将iOS版本附加到名称的末尾,这是因为。
- 重新启动Xcode和模拟器。
- validation从
OS X
切换到iOS
时,至less游乐场不再产生问题。 - 打开您的项目并将目标的部署目标更改为<= 7.1。
分析
看来问题是Xcode6无法正确地find并连接到模拟器。 我一直无法确定为什么会出现这种情况,但是这让我继续用Swift进行开发。 这可能与模拟器二进制文件似乎已经移动的事实有关。
您只需要删除“ModuleCache”,这是Xcode用于Autocompletion的某种caching。
在terminal中复制并粘贴以下行:
rm -rf〜/ Library / Developer / Xcode / DerivedData / ModuleCache
我键入后,SourceKitService在我的系统上崩溃
extension foo {
我正在使用Xcode 6 beta 6,如果将其input到空文件或将其添加到现有文件,则无关紧要。 只要源包含一个extension
块,就会崩溃。 甚至在新创build的项目上也会发生这种情况
我的“解决scheme”是为了避免在我目前正在工作的来源中进行扩展。 我注释掉了一个类的结束和扩展块的开始。 一旦我完成了class上的工作,我再次评论他们:
class MyClass { [... my stuff ...] //} // //extension MyClass { }
插入touchesMoved函数后,它开始发生在我的spritekit项目上。 这个函数使用强制解包,这似乎导致了这个问题:
override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)
删除感叹号并停止强制解包后,SourceKitService停止崩溃。
希望这可以帮助!
我在苹果的开发者论坛上find了一个解决scheme (需要login,所以我也会在这里解释)。
TLDR :不要将Objective-C中的@protocol
导入到与@interface
命名相同的Swift桥接头中。 例如,Facebook SDK有一个名为“FBGraphObject”的协议和接口。
这是论坛post:
添加Facebook SDK导致SourceKitService崩溃。 如果你想使用testing版3,你需要Facebook的SDK,一个工作,我发现并正在为我工作是重构Facebook SDK的@protocol FBGraphObject并将其重命名为@protocol FBGraphObjectProtocol作为@interface FBGraphObject也存在,似乎SourceKit不喜欢它。
它确实是一个临时的解决scheme,只是为了保持function,你将不得不使用Cocoapods或以其他方式构buildFacebook SDK而不是使用框架库。
目前,您需要确保没有冲突的@protocol和@interface声明,并且包含您可能使用的第三方库。
这今天花费我,希望它有帮助!
由e.parto于2014年7月10日发布
使用除Swift之外的其他名称作为项目。 “Swift”是保留的。
我在Xcode 6 Beta 3中每隔几秒就会遇到这个问题,即使是在全新的项目中也是如此。 我将部署目标从8.0更改为7.1,并已停止。
您的项目是否被命名为Swift
? 看到这个消息,构build也会失败( <unknown>:0: error: module name "Swift" is reserved for the standard library
)。 尝试使用另一个项目名称,如SwiftTest
。 这将工作。
为了解决这个问题,你可能会在你的Swift代码中出现一些奇怪的问题。 例如有多个IBOutlets的定义,因为你正在复制和粘贴。 通常这只是一个无法处理的语法错误。
我发现通过显式(静态)键入variablestypes,而不是推断它们,为我解决了这个问题。
退出Xcode,如果它打开。 然后从terminal运行:
defaults delete com.apple.dt.Xcode
这会将Xcode恢复到默认设置。 打开Xcode,一切都应该再次工作。
对我来说(xcode 6.1)的原因是我忘了采用我的子类协议。
例如,这是错误的:
protocol SomeProtocol { ... } class A :NSObject, SomeProtocol { ... } class B : A { ... }
这是好的:
protocol SomeProtocol { ... } class A : NSObject, SomeProtocol { ... } class B : A, SomeProtocol { ... }
仅由这两行组成的程序(可能在Swift语法上是错误的)足以导致“SourceKitService Terminated”错误:
var x = 42 println("Hello", x)
使用let
而不是var
会使编辑器再次正常运行。 Xcode版本6.0(6A215l)
今天有同样的问题,事情是与println
,我只是尝试旧的NSLog风格打印一个值:
// something like this println("value = %@", valueObj)
我们应该如何在swift中编写string的方式已经从printf风格发展为内联风格,所以现在将您的值embedded到格式string中,如下所示:
"Here goes \(YOUR_VARIABLE)"
所以,对于上面的例子来说,解决scheme是:
println("value =\(valueObj)")
对于在Beta 2中创build的项目,我有与Xcode6 beta 3相同的问题。
这是因为迅速的语言,即数组声明语法新的重大变化。
检查受影响的代码是否因为testing版3中的更改发生中断
Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.html
我的例子之一是:
我不得不改变:
var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;
至
var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController
结论:看起来如果在源代码中有错误,在某些情况下,这个错误是由Xcode产生的。
解决scheme,直到错误被修复:手动检查错误:)
祝你好运!
对我来说,解决scheme恰好改变了模拟器。 我使用的iPhone 5S为我的模拟器,当我切换到iPhone 5,一切工作完美。 希望未来的版本能够完全解决这个问题。
我发现,从terminal中删除派生的数据解决了这个问题,直到下一次崩溃。 :S
它位于:/用户/ {用户名} /库/开发/ Xcode / DerivedData / {项目名称} – {随机字符序列}
我希望这有帮助。
我想我找出了一个(可能有很多)的原因。
在我的情况下,我通过桥接头导入了Objective-C文件,该桥接头有下列其中一个true:
- Objective-C导入的实现文件(.m)没有正确设置应用程序目标。
- Objective-C文件只有一个头文件(.h),而不是一个执行文件(.m)。 (同样,我认为这是“没有适当的应用程序目标”的一部分,因为你只能在.m文件中设置目标而不是在.h文件中)
修复Objective-C文件上的应用程序目标或删除桥接头文件中的这些文件的导入似乎解决了这个问题。
仅供参考 – 如果您需要设置没有实现(.m)文件的Header(.h)文件的目标,则可以执行以下简单步骤: 无法更改Xcode 4.5中的目标成员可见性
只是在这里添加一个可能的解决scheme,我不小心命名了一个类,它的类名相同:
class var Settings:Settings { get { return classVarWorkAround.settings } }
这会使SourceKit FOR SURE崩溃。 愚蠢的语法错误,但万一其他人犯了同样的错误。
编辑:也根据@波特兰亚军:
同样,如果你设置返回types为func名字,你会得到错误。
func foo() ->foo{}
当这个错误开始popup时,只需注释掉你写的最后一段代码,然后等待一段时间。 语法高亮应该重新出现。 这是我如何解决这个问题。
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) }
向苹果报告(#17266321):
细节:
简介:如果我们尝试打印一个字典值为数组popup不断popup说 – “SourceKit终止,编辑器function暂时有限”。 Xcode冻结并丢失上下文识别,导致文本变黑。
重现步骤:1.创build一个数组为:“var iOSHistoryArray = [”iOS6“,”iOS7“,”iOS8“,”
-
创build一个字典为 – “var MacOSYosemiteFeatures:Dictionary = [”Device“:iOSHistoryArray]”。
-
将字典打印为 – “println(”包含数组值的字典:%@ \ n“,MacOSYosemiteFeatures)” (<< – Culprit – >>)
-
第3步导致问题评论,使Xcode再次function。
预期的结果:Xcode应该正常运行。
实际结果:Xcode变得无用,上下文识别丢失(全部字体丢失,所有文本变成纯黑色),整个Xcode变为无效。
版本:6.0(6A215l)
尝试一下:
Swift编译器/索引器中有一个错误。 你的代码中的一些行或行会给它带来困难。 您将不得不使用其他文本编辑器编辑您的代码,以便在您能够使用Xcode打开该项目之前注释出错的行。 如果你不知道问题是什么,请注释掉所有的代码。 一旦你打开了这个项目,你可以开始一点一点地回收代码,直到CPU活动的增加告诉你已经find了问题。
问题:
- 如果在源代码中有错误,可能会popup“SourceKitService Terminated”并且代码突出显示停止工作。 在多种不同情况下,它可能会或可能不会发生。
我的情况:安装了Beta 3,OSX只有项目,一个文件检测到“半封闭范围运算符已经从..更改为..”错误。 popup窗口开始出现,代码突出显示开始失败。
解:
- 修复Xcode检测到的错误
- 在导航器中更改为不同的.swift,回到原来的位置
- 语法高亮再次出现,popup的“SourceKitService Terminated”消失
在Xcode中,进入你的菜单栏>>窗口>>设备(shift + cmd + 2)会popup一个新窗口,在左下方添加一个新的模拟器,特别是在iOS 8.0上运行的模拟器:您可能需要重新启动xcode
参考: http : //www.reddit.com/r/swift/comments/2bznfo/error_running_playground_unable_to_find_suitable/
在我的情况下,我已经在桥接头中导入丢失的文件。 我删除错误导入后,错误通知消失了。
我和嵌套的Objective-C ++项目有相同的错误,现在包含了使用Swift代码的框架。 为了解决这个问题,我不得不明确构build框架。 一旦我做了这个问题就消失了,不回来了;)
仍然发生在xcode 6版本6.0(6A313)
- 创build一个新的项目
- 添加一个框架和库
- selectcocoa触摸框架
- 添加一个Swift文件
- 向swift文件添加一个类
崩溃
PS:全新的Mac mini,没有以前的Xcode安装,没有什么奇特的。 只是一个testing产品,我想。
Xcode 6.1 Beta 3:
只要在一个Swift文件中定义一个非私有types别名(例如typealias Foo = Int
),在另一个文件中键入字母c
,则SourceKitService将崩溃。
解决scheme是从使用types别名退出,等待下一个beta版本或在类定义中包装您的types别名:
public class DummyClass { public typealias Foo = String }
并像这样使用它:
var myVar:DummyClass.Foo?
将部署目标更改为iOS 8.0为我工作。 我知道有人说移动到<= 7.1工作,但这个问题似乎来自多个来源,所以这个替代scheme可能工作。