SourceKitService прекращено


242

У меня проблема с XCode, когда появляется ошибка «Служба исходного комплекта прекращена», а вся подсветка синтаксиса и завершение кода исчезают в Swift. Как я могу это исправить?

Вот пример изображения:

введите описание изображения здесь


1
Это, кажется, проблема с бета-версией Xcode. Перезапуск Xcode решил проблему для меня, хотя при повторном открытии проекта ошибка произошла, а затем остановилась.
— ThomasW

4
У меня только началась эта проблема ... потом я обнаружил синтаксическую ошибку в моем файле swift. Как только я исправил это, редактор снова начал работать.
— Бринди

80
Я бы убил, чтобы это было исправлено прямо сейчас ...
— Санта-Клаус

2
Ошибка действительно вызвана синтаксической ошибкой внутри Swift. Если вы удалите синтаксическую ошибку, ошибка исчезнет :)
— Steffen Brem

2
Мало того, что это не разрешено в 6.1, это происходит даже с самыми незначительными «ошибками», которые даже не являются ошибками. Вы можете часто вызывать его , все еще печатая . Я получил это, когда я добрался до "Stru" в "struct". Я думаю, что он действительно хотел сказать мне кое-что, прежде чем он получил "кт"!
— Мори Марковиц

Ответы:


114

Мой ответ (Xcode6-Beta7) был просто удалить папку «Производные данные».

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

Надеюсь, это кому-нибудь поможет. Очевидно, есть много причин, по которым этот сбой может произойти.


Спасибо, это исправлено.
— Нура

4
Кажется, это решило проблему, но также с использованием Xcode 6.1 GM.
— Flovdis

7
это исправило это в течение приблизительно 10 минут, затем я изменил имя переменной, и она вернулась!
— hariseldon78

1
Не постоянное исправление, а просто улучшение ответа .. создайте сценарий оболочки и запускайте его всякий раз, когда это происходит rm -frd ~ / Library / Developer / Xcode / DerivedData / * rm -frd ~ / Library / Caches / com.apple.dt. Xcode / *
— Радж

2
Не решил мою проблему
— Шириш Кумар

35

Я полагаю, что, возможно, нашел решение более общего назначения. Ниже приведены шаги, которые я использовал, чтобы Xcode не выдавал SourceKitService Terminatedошибку.


Симптомы у меня были:

  • Когда я запускаю новую игровую площадку, я получаю сообщение о невозможности связаться с игровой площадкой ( Error running playground: Failed prepare for communication with playground.см. Это изображение в твиттере .
  • Когда я хотел бы перейти на площадку от OS XдоiOS , я получал еще одну ошибку (к сожалению, я ее не записывал).
  • Когда я начинал печатать в проекте Swift на базе iOS, пытаясь использовать завершение кода / intellisense для любого конкретного класса UIKit, я получал SourceKitService Terminatedпроблему в этой теме.

Процесс отладки:

  • Я начал с просмотра Google для SourceKitService, это очень мало.
  • Затем я начал мониторинг Console.app при использовании Xcode. Это показало пару ошибок:
    • 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 Simulator.
  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
Выполнил все эти шаги, но это не сработало для меня. : - /
— Рохит Гоял

32

Вам просто нужно удалить «ModuleCache», это какой-то кеш, используемый XCode для автозаполнения.

Скопируйте и вставьте следующую строку в Терминал:

rm -rf ~ / Библиотека / Разработчик / Xcode / DerivedData / ModuleCache


1
Это сделало это для меня. Некоторое время я мог получать подсветку и автозаполнение только тогда, когда в активной схеме было выбрано устройство IOS.
— Wez

1
Это сработало и для меня. По выпуску нот здесь некоторые это фиксируется в Xcode 6.1.1 GM семян
— Jacob Harding

Увы, спустя годы и 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 {

}

Только примечание - расширения не делали этого в бета-версии 5. Это новая «функция» бета6.
— Джин Де Лиза

Любой другой обходной путь, потому что в моем проекте есть множество расширений. Не могу работать с этим Xcode сейчас.
— Bagusflyer

Это это это так много это. Я обнаружил, что это кусает меня в моих последних проектах. Подача сообщения об ошибке сейчас.
— Бен Кригер

2
Также огромная проблема для меня. Я просто переместил расширения в их собственный файл, написал код в классе и скопировал их в расширение. Как это пробралось, немного сбивает с толку.
— Андрей Моншизаде

9

Это начало происходить в моем проекте spritekit после вставки функции touchesMoved. Эта функция использует принудительное развертывание, которое, кажется, вызывает проблему:

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

После удаления восклицательных знаков и, следовательно, прекращения принудительного развертывания, SourceKitService перестала падать.

Надеюсь это поможет!


Работал на меня! Большое спасибо (надеюсь, они это исправят!)
— napolux

9

Я нашел решение на форумах разработчиков Apple (которое требует входа в систему, поэтому я объясню и здесь).

TLDR : не импортируйте @protocolв заголовок моста Objective-C для Swift имя, совпадающее с именем@interface . Например, Facebook SDK имеет протокол и интерфейс с именем «FBGraphObject».

Вот сообщение на форуме:

Добавление Facebook SDK приводит к сбою SourceKitService. Если вы хотите использовать бета-версию 3 и вам нужен Facebook SDK, одна из работ, которую я нашел и работаю для меня, - это рефакторинг @protocol FBGraphObject Facebook SDK и переименование его в нечто вроде @protocol FBGraphObjectProtocol в качестве @interface FBGraphObject, также существует и, по-видимому, SourceKit это не нравится

Это, безусловно, временное решение, просто для поддержания вашей функциональности, и вам придется использовать Cocoapods или иным образом создавать SDK Facebook, а не использовать библиотеку фреймворков.

В настоящее время вам необходимо убедиться, что у вас нет конфликтующих объявлений @protocol и @interface, и это включает сторонние библиотеки, которые вы, возможно, используете.

Это стоило мне сегодня, надеюсь, это поможет!


Опубликовано e.parto на 10 июля 2014


Большое спасибо. Это решило мою проблему.
— Виктор Радченко

Эта ошибка может появиться, если вы используете шаблон Jon Sterling для облегченной неизменности ( jonmsterling.com/posts/… ), так как он советует протоколам, которые разделяют имя, с их реализацией. Переименование протоколов решило проблему для меня без вредных последствий.
— erikprice

Это было решено для меня с помощью Facebook SDK3.17.1
— KVISH

Это исправило это для меня! Спасибо 👏🏻
— Роман

8

Используйте другое имя, чем Swift для проекта. «Свифт» зарезервирован.


10
Я также получаю это предупреждение, но название моего проекта вообще не включает в себя слово Swift, так что это не «решение», а просто «решение». И нет, я не понял, в чем проблема с моей.
— Андрей Моншизаде

1
@AndrewMonshizadeh Та же проблема, нет ссылок на Swift, но я едва могу набрать символ или два, прежде чем я получу эту ошибку.
— BytesGuy

1
Дальнейшее расследование привело меня к выводу, что я получаю ошибку SourceKitService Termination, когда пытаюсь использовать завершение кода на подклассе UIView.
— Андрей Моншизаде

4
Это не причина проблемы. Я понятия не имею, почему за это проголосовали.
— Дед Мороз

1
NRitH, у меня была эта проблема при использовании Xcode 6 beta 1, и изменение проекта было исправлением, которое работало для меня. Вероятно, есть множество ошибок, которые вызывают эту ошибку. Вы, вероятно, используете более новую версию XCode, и они, вероятно, исправили эту ошибку.
— Мариус Фану

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

Это может быть вызвано несколькими IBOutlets с одинаковым именем.
— Тони

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 все еще работает как бета =)
— Джон Какон,

Спасибо! Я схожу с ума по этому поводу. Ваше решение устранило мою проблему. Я надеюсь, что это будет исправлено, кажется странным добавлять протоколы на каждый подкласс ..
— Элвин

1

Программа, состоящая только из этих двух строк (возможно, неправильная с точки зрения синтаксиса Swift), достаточна для того, чтобы вызвать ошибку «SourceKitService Termination» здесь:

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

Использование letвместо varзаставляет редактор снова вести себя нормально. Версия Xcode 6.0 (6A215l)


Я обычно подозреваю, что эта ошибка возникает, когда XCode не может обработать определенную синтаксическую ошибку - в реальном коде или во время сборки (в примере с быстрым изменением имени проекта)
— Lyndsey Scott

Я говорю, что ошибка, вероятно, вызвана синтаксической ошибкой, и, поскольку ваш код имеет явную синтаксическую ошибку, это соответствует моей теории.
— Линдси Скотт

«SourceKitService Termination» как ответ на синтаксическую ошибку не имеет смысла. Это ошибка, на которую я указывал. Это ошибка, о которой идет речь.
— Александр

Да. В этом смысл слова «жук». Эта ошибка, кажется, вызвана синтаксическими ошибками. Надеюсь, Apple исправит это в ближайшее время.
— Линдси Скотт

1

Сегодня printlnвозникла та же проблема, с чем я столкнулся, я только что попробовал старый стиль NSLog, чтобы напечатать значение:

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

Способ, которым мы должны составлять строки в swift, эволюционировал от стиля printf к встроенному стилю, так что теперь вы встраиваете свои значения прямо в строку формата следующим образом:

"Here goes \(YOUR_VARIABLE)"

Итак, для приведенного выше примера решение таково:

println("value =\(valueObj)")

Эй, @downwoter, что не так с этим ответом? Кажется, хорошо для меня. Я знаю, что мы все еще можем использовать NSLog со Swift, но println - способ сделать это после Swift. И этот ответ напрямую связан с проблемой, описанной строкой вылетает служба SourceKit.
— MANIAK_dobrii

У меня была похожая проблема с println () пытался напечатать безымянный кортеж
— thisispete

1

У меня была такая же проблема с Xcode6 beta 3 для проекта, созданного в beta 2.

Это было из-за новых критических изменений в быстром языке, то есть синтаксиса объявления массива.

Проверьте исправленный код из-за критических изменений в бета-версии 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 - это всегда лучший выбор, любой другой выходит из строя
— Даниэль Галаско

@DanielGalasko Интересно. Я обычно использую iPhone 5S, он очень стабилен для меня.
— Fomentia

если вы используете Xcode 6.1, то это было адресовано, насколько я понимаю :)
— Даниэль Галаско

Я отрекаюсь от своего заявления, оно все еще не работает, и 5 - определенно единственный работающий симулятор
— Даниэль Галаско

1

Я обнаружил, что удаление производных данных из терминала решает проблему до следующего сбоя. : S

Он находится по адресу: / Пользователи / {Имя пользователя} / Библиотека / Разработчик / Xcode / DerivedData / {Имя проекта} - {Случайная последовательность символов}

Надеюсь, это поможет.


1

Я думаю, что я выяснил одну (поскольку их, вероятно, много) из причин, по которым это происходит.

В моем случае я импортировал файлы Objective C через заголовок моста, который имел одно из следующих истинных значений:

  1. В файле реализации (.m) для импорта Objective-C не была правильно установлена ​​цель приложения.
  2. Файл Objective-C имел только заголовочный файл (.h) и НЕ файл реализации (.m). (Опять же, я думаю, что это часть набора «нет правильной цели приложения», поскольку вы можете устанавливать цели только в файлах .m, а не в файлах .h)

Фиксирование целей приложения в файлах Objective-C ИЛИ удаление импорта этих файлов из заголовка Bridging все вместе, кажется, решает проблему.

К сведению - если вам нужно установить целевой файл заголовка (.h), который не имеет файла реализации (.m), вы можете выполнить следующие простые шаги: Не можете изменить видимость целевого членства в Xcode 4.5


1

Просто чтобы добавить еще одно потенциальное решение, я случайно назвал класс var тем же именем, что и его тип:

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

Это приведет к краху SourceKit для уверенности. Глупая синтаксическая ошибка, но в случае, если кто-то другой сделает такую ​​же ошибку.

Редактировать: также в соответствии с @Portland Runner:

Точно так же, если вы установите тип возвращаемого значения в имя функции, вы получите ошибку.

func foo() ->foo{}

1
Точно так же, если вы установите тип возвращаемого значения в имя функции, вы получите ошибку. func foo() ->foo{} (не стесняйтесь добавлять его в свой ответ)
— Portland Runner

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

Система перезагружается сама, независимо от того, что вы делаете. Вам не нужно комментировать строку, она все равно снова начнет работать в ближайшее время. И сбой, конечно же.
— Мори Марковиц

0

Об этом сообщает Apple (# 17266321):

Подробности:

Сводка: если мы пытаемся напечатать словарь со значением в виде массива, всплывающее окно продолжает выдавать сообщение: «SourceKit прекращен. Функциональность редактора временно ограничена». Xcode зависает и теряет распознавание контекста, в результате чего текст становится черным.

Шаги для воспроизведения: 1. Создайте массив как - "var iOSHistoryArray = [" iOS6 "," iOS7 "," iOS8 ",]"

  1. Создайте словарь как - "var MacOSYosemiteFeatures: Dictionary = [" Устройство ": iOSHistoryArray]".

  2. Распечатать словарь как - "println (" Словарь, содержащий значение массива:% @ \ n ", MacOSYosemiteFeatures)" (<< - Culprit - >>)

  3. Шаг 3 вызывает комментирование проблемы, которое делает функциональность XCode снова.

Ожидаемые результаты: Xcode должен работать нормально.

Фактические результаты: Xcode становится нефункциональным, теряет распознавание контекста (весь шрифт теряется, а весь текст становится черным), весь Xcode становится неактивным.

Версия: версия 6.0 (6A215l)


0

Попытайся:

В компиляторе / индексаторе Swift есть ошибка. Некоторые строки или строки в вашем коде создают трудности. Вам нужно будет отредактировать свой код с помощью другого текстового редактора, чтобы закомментировать строки (строки), вызывающие оскорбления, прежде чем вы сможете открыть этот проект с помощью Xcode. Если вы не знаете, в чем проблема, закомментируйте весь ваш код. После того, как вы откроете проект, вы можете постепенно возвращать код, пока повышение активности процессора не скажет вам, что вы нашли проблему.


@ Панг, если ответы правильные и одинаковые, тогда вопросы, вероятно, дублируют, поэтому вы должны проголосовать или пометить, чтобы закрыть их - В этом случае это определенно открыт для хранения
— мммммм

0

Проблема:

  • Если в исходном коде есть ошибка, может появиться всплывающее окно «SourceKitService Termination», и подсветка кода перестает работать. Это может произойти или не произойти, когда это происходит в разных условиях.

Мой случай: установлена ​​бета-версия 3, проект только для OSX, один файл обнаружил ошибку «оператор полузакрытого диапазона был изменен с .. на .. <». Всплывающее окно начинает появляться, и подсветка кода начинает терпеть неудачу.

Решение:

  • Исправить ошибку, обнаруженную Xcode
  • Перейдите на другой .swift в Navigator, вернитесь к оригиналу
  • Подсветка синтаксиса появляется снова, и всплывающее окно «SourceKitService Termination» исчезло

0

В xcode перейдите в строку меню >> окно >> устройства (shift + cmd + 2), появится новое окно, а слева внизу добавьте новый симулятор, в частности, тот, который работает на iOS 8.0, к редактированию существующего списка. : вам может понадобиться перезапустить xcode

ссылка: http://www.reddit.com/r/swift/comments/2bznfo/error_running_playground_unable_to_find_suitable/


0

В моем случае я импортировал отсутствующие файлы в заголовок моста. После того, как я удалил неправильный импорт, уведомление об ошибке пропало.


0

У меня была та же ошибка с вложенным проектом Objective-C ++, который теперь включает Framework с кодом Swift. Чтобы решить эту проблему, мне пришлось явно построить фреймворк. Как только я это сделал, проблема исчезла и больше не возвращается;)


0

Все еще происходит с версией 6.0 xcode 6 (6A313)

  • Создать новый проект
  • Добавить каркас и библиотеку
  • Выберите какао сенсорный каркас
  • Добавить файл Swift
  • Добавить класс в файл swift

Сбои

ps: новый Mac mini, никаких предыдущих установок xcode, ничего экзотического. Полагаю, просто бета-продукт.


0

Xcode 6.1 Beta 3:

Как только вы определили псевдоним не закрытого типа (например, typealias Foo = Int) в одном файле Swift, введите букву cв другом файле, исходный сбой SourceKitService.

Решение - либо отказаться от использования псевдонимов типов, дождаться следующей бета-версии или включить псевдонимы типов в определения классов:

public class DummyClass {
    public typealias Foo = String
}

и используйте это так:

var myVar:DummyClass.Foo?

0

Изменение цели развертывания на iOS 8.0 сработало для меня. Я знаю, что кто-то сказал, что перенос его на <= 7.1 сработал, но, похоже, эта проблема возникла из нескольких источников, поэтому эта альтернатива может сработать.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.