【问题标题】:SourceKitService TerminatedSourceKitService 终止
【发布时间】:2014-07-23 06:14:18
【问题描述】:

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

这是一个示例图像:

【问题讨论】:

  • 这似乎是 Xcode 测试版的问题。重新启动 Xcode 为我解决了这个问题,尽管在重新打开项目时发生错误然后停止。
  • 我刚开始遇到这个问题......然后我在我的 swift 文件中发现了一个语法错误。一旦我解决了这个问题,编辑器又开始工作了。
  • 我会杀了这个现在就修复...
  • 该错误确实是由Swift内部的语法错误引起的。如果删除语法错误,错误就会消失:)
  • 不仅在 6.1 中没有解决,即使是最轻微的“错误”,甚至不是错误,它也会发生。您通常可以在打字时触发它。当我到达“struct”中的“stru”时,它就发生了。我猜它真的想在它得到“ct”之前告诉我一些事情!

标签: ios swift xcode sourcekitservice


【解决方案1】:

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

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

希望这对某人有所帮助。发生这种崩溃的原因显然有很多。

【讨论】:

  • 似乎这解决了问题,但也使用 Xcode 6.1 GM。
  • 在 6.0(发行版)上也修复了我的崩溃问题。这应该被投票更高。
  • 这修复了大约 10 分钟,然后我更改了一个变量的名称,它又回来了!
  • 不是永久修复,只是增强答案.. 创建一个 shell 脚本并在它发生时运行它 rm -frd ~/Library/Developer/Xcode/DerivedData/* rm -frd ~/Library/缓存/com.apple.dt.Xcode/*
  • 没有解决我的问题
【解决方案2】:

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


我的症状:

  • 当我要启动一个新 Playground 时,我会收到无法与 Playground 通信的错误消息(Error running playground: Failed prepare for communication with playground. 请参阅this image on twitter
  • 当我将 Playground 从 OS X 切换到 iOS 时,我会收到另一个错误(很遗憾我没有写下来)。
  • 当我开始输入基于 iOS 的 Swift 项目,尝试在任何 UIKit 特定类上使用代码完成/智能感知时,我会在此线程中收到 SourceKitService Terminated 问题。

调试过程:

  • 我首先通过 google 查找 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. 打开您的项目并将目标的部署目标更改为

更冗长和复杂的过程。 (前三个步骤不一定有用,但我做了,所以记录在这里)

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

分析

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

【讨论】:

  • 有类似问题:“未安装所选设备的运行时。”为 iPhone 模拟器运行游乐场时出错。步骤 5.~9。解决了这个问题。
  • 请注意 - Xcode 6 Beta 3 已经为我彻底解决了这个问题。不知道如何或为什么。希望其他人也是如此。
  • 感谢这些步骤。我将我的部署目标从 7.0 调整为 7.1,这似乎已经解决了这个问题。
  • 将部署目标设置为 7.1 对我有用,但我正在使用框架目标和应用程序目标,所以这导致编译失败,这真的很糟糕。但是即使颜色恢复了,我也没有任何代码建议!
  • 遵循了所有这些步骤,但它对我不起作用。 :-/
【解决方案3】:

你只需要删除“ModuleCache”,这是Xcode用于自动补全的某种缓存。

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

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

【讨论】:

  • 这是为我做的。有一段时间,当我在活动方案中选择 IOS 设备时,我只能突出显示和自动完成。
  • 这对我也有用。根据发行说明here,其中一些已在 Xcode 6.1.1 GM 种子中修复
  • 唉,多年后,Xcode 绝对不是固定的。每次单击符号时,使用 Xcode 8.1 (8B62) 仍然会导致 SourceKitServer 崩溃。已清除派生数据,已删除 ModuleCache。重新启动 Xcode。重新安装 Xcode。在 new 机器上安装了 Xcode。同样的事情也会发生。 Xcode 真是一团糟。
【解决方案4】:

我一输入,SourceKitService 就会在我的系统上崩溃

extension foo {

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

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

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}

【讨论】:

  • 请注意 - 扩展在 beta 5 中没有这样做。这是一个新的 beta6“功能”。
  • 任何其他解决方法,因为我的项目中有大量扩展。现在无法使用此 Xcode。
  • 这个这个这个这个这么多这个。我发现这就是我最近的项目中困扰我的地方。立即提交错误报告。
  • 对我来说也是一个大问题。我已经开始将扩展移动到他们自己的文件中,在类中编写代码,然后将它们复制粘贴到扩展中。这种偷偷摸摸的方式有点令人费解。
【解决方案5】:

在我的 spritekit 项目中插入 touchesMoved 函数后开始出现这种情况。此函数使用强制展开,这似乎会导致问题:

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

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

希望这会有所帮助!

【讨论】:

  • 为我工作!非常感谢(希望他们能解决它!)
【解决方案6】:

我在 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 声明,并且包括您可能正在使用的 3rd 方库。

今天花了我很多钱,希望对你有帮助!


e.parto2014 年 7 月 10 日发布

【讨论】:

  • 非常感谢。它解决了我的问题。
  • 如果您使用 Jon Sterling 的轻量级不变性模式 (jonmsterling.com/posts/…),此错误可能会出现,因为它建议协议与其实现共享名称。重命名协议为我解决了这个问题,没有任何不良影响。
  • 这已通过 Facebook SDK 3.17.1为我解决
  • 这为我修好了!谢谢??
【解决方案7】:

为项目使用 Swift 以外的其他名称。 “Swift”是保留的。

【讨论】:

  • 我也收到了这个警告,但是我的项目名称根本不包含 Swift 这个词,所以这不是“the”解决方案,可能只是“a”解决方案。不,我还没弄清楚我的问题是什么。
  • @AndrewMonshizadeh 同样的问题,没有对 Swift 的引用,但在出现此错误之前我几乎无法输入一两个字符。
  • 进一步调查使我确定当我尝试对 UIView 的子类使用代码完成时收到 SourceKitService Terminated 错误。
  • 这不是问题的原因。我不知道为什么这是赞成的。
  • NRitH,我在使用 Xcode 6 beta 1 时遇到了这个问题,并且更改项目是一个对我有用的修复程序。可能有许多错误会触发此错误。您可能正在使用更新版本的 Xcode,他们可能修复了该错误。
【解决方案8】:

我在 Xcode 6 Beta 3 中每隔几秒就会遇到一次这个问题,甚至在全新的项目中也会继续出现。我将部署目标从 8.0 更改为 7.1,但它已停止。

【讨论】:

    【解决方案9】:

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

    【讨论】:

      【解决方案10】:

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

      【讨论】:

      • 我在 Xcode 项目模板中看到未经修改的代码存在这个问题,所以我认为这不是 Swift 代码的问题。
      • 可能是多个IBOutlets同名造成的。
      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

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

        defaults delete com.apple.dt.Xcode
        

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

        【讨论】:

          【解决方案13】:

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

          例如这是错误的:

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

          这没关系:

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

          【讨论】:

          • 被遗忘的协议也有同样的问题。感谢您的意见。似乎 xcode 的发布版本仍然像 beta =)
          • 谢谢!我已经为此发疯了。您的解决方案解决了我的问题。我希望这会得到解决,在每个子类上添加协议似乎很奇怪..
          【解决方案14】:

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

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

          使用let 而不是var 会使编辑器再次正常运行。 Xcode 6.0版(6A215l)

          【讨论】:

          • 我一般怀疑这个错误出现在 Xcode 无法处理某个语法错误时——在实际代码中或在构建时(在项目名称中包含 swift 的示例中)跨度>
          • 我的意思是这个bug可能是由语法错误引起的,由于你的代码有明显的语法错误,这符合我的理论。
          • "SourceKitService Terminated" 作为对语法错误的响应没有意义。这是我指出的错误。这是有问题的错误。
          • 是的。这就是“虫”字的意思。这个 bug 似乎是由语法错误触发的。希望苹果能尽快修复它。
          【解决方案15】:

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

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

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

          "Here goes \(YOUR_VARIABLE)"
          

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

          println("value =\(valueObj)")
          

          【讨论】:

          • 嘿,@downwoter,这个答案有什么问题?对我来说似乎很好。我知道我们仍然可以将 NSLog 与 Swift 一起使用,但 println 是自 Swift 以来的方式。而这个答案直接关系到问题,所描述的行会导致 SourceKit 服务崩溃。
          • 我遇到了类似的问题,println() 试图打印一个未命名的元组
          【解决方案16】:

          对于在 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 产生的。

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

          祝你好运!

          【讨论】:

            【解决方案17】:

            我的解决方案恰好是更换模拟器。我的模拟器使用的是 iPhone 5S,当我将它切换到 iPhone 5 时,一切正常。希望未来的版本能够完全修复它。

            【讨论】:

            • 我发现iPhone 5模拟器总是最好的选择,每隔一个就崩溃
            • @DanielGalasko 有趣。我一般用iPhone 5S,对我来说很稳定。
            • 如果您使用的是 Xcode 6.1,那么我的理解已经解决了这个问题:)
            • 我收回我的声明,它仍然损坏,5 绝对是唯一的工作模拟器
            【解决方案18】:

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

            它位于:/Users/{用户名}/Library/Developer/Xcode/DerivedData/{项目名称}-{随机字符序列}

            我希望这会有所帮助。

            【讨论】:

              【解决方案19】:

              我想我找到了发生这种情况的其中一个原因(可能有很多)。

              在我的例子中,我通过桥接头导入 Objective-C 文件,该文件符合以下条件之一:

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

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

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

              【讨论】:

                【解决方案20】:

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

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

                这肯定会使 SourceKit 崩溃。愚蠢的语法错误,但以防其他人犯同样的错误。

                编辑:也根据@Portland Runner:

                同样,如果你将返回类型设置为函数名,你会得到错误。

                func foo() ->foo{}
                

                【讨论】:

                • 类似地,如果将返回类型设置为函数名称,则会出现错误。 func foo() ->foo{} (请随时将其添加到您的答案中)
                【解决方案21】:

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

                    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)
                    }
                

                【讨论】:

                • 无论您做什么,系统都会自行重新启动。您不必注释掉该行,它仍会很快再次开始运行。当然,也会崩溃。
                【解决方案22】:

                向 Apple 报告 (#17266321):

                详情:

                总结: 如果我们尝试将值作为数组打印出来的字典,弹出窗口会不断弹出“SourceKit 已终止。编辑器功能暂时受限”。 Xcode 冻结并失去上下文识别,导致文本变黑。

                复制步骤: 1. 创建一个数组为-"var iOSHistoryArray = ["iOS6","iOS7","iOS8",]"

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

                2. 将字典打印为 - "println("Dictionary containing Array value : %@ \n",MacOSYosemiteFeatures)" (>)

                3. 第 3 步会导致问题注释,从而使 Xcode 再次正常运行。

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

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

                版本: 版本 6.0 (6A215l)

                【讨论】:

                  【解决方案23】:

                  试试看:

                  Swift 编译器/索引器中存在错误。一些线或线 您的代码给它带来了困难。您将不得不编辑您的代码 使用其他一些文本编辑器来注释掉有问题的行 在您能够使用 Xcode 打开该项目之前。如果你有 不知道问题出在哪里,注释掉所有代码。一旦你有 项目打开,你可以开始一点一点的带回代码 直到 CPU 活动的增加告诉你你已经找到 问题。

                  【讨论】:

                  • @Pang 如果答案正确有效并且相同,那么问题可能是重复的,因此您应该投票或标记以关闭它们 - 在这种情况下,这绝对是开放的
                  【解决方案24】:

                  问题:

                  • 如果源代码有错误,可能会出现“SourceKitService Terminated”弹出窗口并且代码高亮停止工作。当它在多种不同的条件下发生时,它可能会发生也可能不会发生。

                  我的案例:安装了 beta 3,仅 OSX 项目,一个文件检测到“半封闭范围运算符已从 .. 更改为 ..

                  解决办法:

                  • 修复 Xcode 检测到的错误
                  • 在 Navigator 中更改为不同的 .swift 文件,返回原始文件
                  • 语法突出显示再次出现,“SourceKitService Terminated”弹出窗口消失了

                  【讨论】:

                    【解决方案25】:

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

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

                    【讨论】:

                      【解决方案26】:

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

                      【讨论】:

                        【解决方案27】:

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

                        【讨论】:

                          【解决方案28】:

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

                          • 创建一个新项目
                          • 添加框架和库
                          • 选择可可触控框架
                          • 添加 Swift 文件
                          • 在 swift 文件中添加一个类

                          崩溃

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

                          【讨论】:

                            【解决方案29】:

                            Xcode 6.1 Beta 3:

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

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

                            public class DummyClass {
                                public typealias Foo = String
                            }
                            

                            并像这样使用它:

                            var myVar:DummyClass.Foo?
                            

                            【讨论】:

                              【解决方案30】:

                              将部署目标更改为 iOS 8.0 对我有用。我知道有人说将它移到

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2023-03-15
                                • 2014-11-26
                                • 1970-01-01
                                • 1970-01-01
                                • 2014-12-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多