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.

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

tobygriffin
источник
Спасибо, это исправлено.
Нура
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

aleclarson
источник
Большое спасибо. Это решило мою проблему.
Виктор Радченко
Эта ошибка может появиться, если вы используете шаблон 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. Это будет работать.

devxoul
источник
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)")
MANIAK_dobrii
источник
Эй, @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, все работало отлично. Надеюсь, в будущей версии это будет исправлено.

Fomentia
источник
Я обнаружил, что симулятор 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

JimmyJammed
источник
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)

aksani56
источник
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

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

Shmidt
источник
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 сработал, но, похоже, эта проблема возникла из нескольких источников, поэтому эта альтернатива может сработать.

максвелл
источник