我遇到了Xcode的问题,其中弹出了“Source Kit Service Terminated”错误,所有语法高亮和代码完成都在Swift中消失了。我怎样才能解决这个问题?
以下是一个示例图片:
答案 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
时,我会收到另一个错误(不幸的是我没有写下那个错误)。SourceKitService Terminated
个问题。IDEPlaygroundDocument: Error encountered running playground
com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.
如果您只是在Swift项目的上下文中遇到问题,请先单独尝试。如果这不起作用,请尝试下面的所有步骤。
更长的和更复杂的过程。 (前三个步骤肯定没有帮助,但我做了它们,所以在这里记录它们)
OS X
切换到iOS
时,至少游乐场不再出现问题。问题似乎是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中的变化而发生。
我案例中的一个例子是:
我不得不改变:
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文件:
修复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)
崩溃
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;
创建字典为 - &#34; var MacOSYosemiteFeatures:Dictionary = [&#34; Device&#34;:iOSHistoryArray]&#34;。
将字典打印为 - &#34; println(&#34;包含数组值的字典:%@ \ n&#34;,MacOSYosemiteFeatures)&#34; (&lt;&lt; -culprit - &gt;&gt;)
步骤3导致问题评论,使Xcode再次起作用。
预期结果: Xcode应该能正常运行。
实际结果: Xcode变得无法运行,丢失了上下文识别(所有字体都丢失了,所有文本都变成了纯黑色),整个Xcode变为非活动状态。
版本: 版本6.0(6A215l)
答案 32 :(得分:0)
问题:
我的情况:安装了beta 3,仅OSX项目,一个文件检测到&#34;半封闭范围操作符已从..更改为..&lt;&#34;错误。弹出窗口开始出现,代码突出显示开始失败。
解决方案:
答案 33 :(得分:0)
试一试:
Swift编译器/索引器中存在一个错误。一些线或线 你的代码给它带来了困难。您必须编辑代码 用其他文本编辑器来评论违规行 在您能够使用Xcode打开该项目之前。如果你有 不知道问题是什么,请注释掉你的所有代码。一旦你有了 项目打开后,你可以开始一点一点地恢复代码 直到CPU活动的增加告诉你,你已经找到了 问题