SourceKitService припинено


242

У мене виникає проблема з Xcode, коли з'являється помилка "Сервіс встановлення джерела", і все підсвічування синтаксису та завершення коду відсутнє в Swift. Як я можу це виправити?

Ось приклад зображення:

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


1
Схоже, це проблема з бета-версією Xcode. Перезапуск Xcode вирішив проблему для мене, хоча при повторному відкритті проекту сталася помилка, а потім її припинили.
ThomasW

4
У мене щойно почалася ця проблема ... тоді я помітив помилку синтаксису у своєму швидкому файлі. Як тільки я це зафіксував, редактор знову почав працювати.
бринді

80
Я б вбив, щоб це зараз було виправлено ...
Дід Мороз

2
Помилка дійсно викликана помилкою синтаксису всередині Swift. Якщо ви видалите синтаксичну помилку, помилка піде :)
Штеффен Брем,

2
Це не тільки не вирішено в 6.1, це трапляється навіть із самими незначними "помилками", які навіть не є помилками. Ви можете часто його запускати, поки все ще пишете . Я зрозумів, що я потрапив до "stru" в "struct". Я здогадуюсь, він насправді хотів щось сказати мені, перш ніж він отримав "ct"!
Maury Markowitz

Відповіді:


114

Моєю відповіддю (Xcode6-Beta7) було просто видалити папку "Отримані дані".

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

Сподіваюся, що це комусь допоможе. Очевидно, є багато причин, чому може статися цей збій.


Дякую, це це виправило.
Нура

4
Здається, це вирішило проблему, але також використовуючи Xcode 6.1 GM.
Фловдіс

7
це було виправлено протягом приблизно 10 хвилин, потім я змінив назву змінної, і вона повернулася!
hariseldon78

1
Не постійне виправлення, а просто покращення відповіді. Створіть скрипт оболонки та запускайте його, коли це відбувається rm -frd ~ / Бібліотека / Розробник / Xcode / DerivedData / * rm -frd ~ / Бібліотека / Кеші / com.apple.dt. Xcode / *
Радж

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

35

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


Симптоми, які у мене були:

  • Коли я запускатиму новий майданчик, я отримав би помилку про неможливість спілкування з ігровою площадкою ( Error running playground: Failed prepare for communication with playground.Дивіться це зображення на Twitter .
  • Коли я хотів би перейти на майданчик від OS Xдо iOS, я отримав би іншу помилку ( до жаль , я не писав , що один вниз).
  • Коли я б почав набирати проект на базі iOS Swift, намагаючись використовувати завершення / інтелісценцію коду для будь-якого класу 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 не в змозі належним чином знайти і підключитися до тренажера. Я не зміг визначити, чому це так, але це дозволило мені продовжувати розвиватися зі Свіфт. Це може бути пов'язано з тим фактом, що бінарні файли симулятора, схоже, перемістилися .


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-пристрій за активною схемою.
Вец

1
Це працювало і для мене. Згідно з повідомленнями до випуску, тут щось зафіксовано в Xcode 6.1.1 GM GM
Jacob Harding

На жаль, через роки, і Xcode, безумовно, не виправлений. Використання Xcode 8.1 (8B62) і все ще отримання SourceKitServer виходить з ладу кожен раз, коли натискаю символ. Очистили отримані дані, видалили модуль кеша. Перезавантажений 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в об’єктивний заголовок Swift об'єктив-C в об'єктивний заголовок Swift, названий так само, як an @interface. Наприклад, у SDK Facebook є як протокол, так і інтерфейс під назвою "FBGraphObject".

Ось допис на форумі:

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

Це впевнене, що це тимчасове рішення просто для того, щоб ви працювали функціонально, і вам доведеться використовувати Cocoapods або іншим чином самостійно створити SDK Facebook, а не використовувати рамкову бібліотеку.

Наразі вам потрібно переконатися, що у вас немає суперечливих декларацій @protocol і @interface, і це стосується сторонніх бібліотек, якими ви можете користуватися.

Це коштувало мене сьогодні, сподіваюся, що це допоможе!


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


Дуже дякую. Це резонувало мою проблему.
Віктор Радченко

Ця помилка може вийти на поверхню, якщо ви користуєтеся шаблоном Джона Стерлінга для легкої незмінюваності ( jonmsterling.com/posts/… ), оскільки він радить протоколи, які поділяють ім'я при їх реалізації. Перейменування протоколів вирішило для мене проблему без негативних наслідків.
erikprice

Це вирішено для мене з Facebook SDK3.17.1
KVISH

Це зафіксувало це для мене! Дякую 👏🏻
Роман

8

Для проекту використовуйте інше ім'я, ніж Swift. "Швидкий" зарезервований.


10
Я також отримую це попередження, але назва мого проекту взагалі не містить слова Swift, тому це не рішення "", просто можливо "рішення". І ні, я не зрозумів, у чому проблема з моєю.
Андрій Моншизаде

1
@AndrewMonshizadeh Та сама проблема, немає посилань на Swift, але я навряд чи можу ввести символ або два, перш ніж я отримаю цю помилку.
BytesGuy

1
Подальше розслідування призвело до того, що я визначив, що я отримую помилку, що припиняється SourceKitService, коли я намагаюся використовувати код завершення на підкласі 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 все ще працює як beta =)
Джон Какон

Дякую! Я божеволію від цього. Ваше рішення вирішило мою проблему. Я сподіваюся, що це буде виправлено, здається дивним, що потрібно додавати протоколи до кожного підкласу ..
Елвін

1

Програми, що складається лише з цих двох рядків (можливо, неправильно з точки зору синтаксису Swift), достатньо, щоб викликати тут помилку "SourceKitService Terminated":

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

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


Я, як правило, підозрюю, що ця помилка з’являється, коли Xcode не може впоратися з певною синтаксичною помилкою - у фактичному коді або під час створення збірки (на прикладі швидкої назви проекту)
Lyndsey Scott

Я кажу, що помилка, ймовірно, викликана синтаксичною помилкою, і оскільки ваш код має явну синтаксичну помилку, це відповідає моїй теорії.
Ліндсі Скотт

"SourceKitService завершено" як відповідь на синтаксичну помилку не має сенсу. Це помилка, на яку я вказував. Про це йдеться про помилку.
Олександр

Так. Ось таке значення слова "жучок". Здається, ця помилка викликана помилками синтаксису. Сподіваємось, Apple скоро це виправить.
Ліндсі Скотт

1

У мене сьогодні є те саме питання, в чому справа println, я просто спробував старий стиль NSLog, щоб надрукувати значення:

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

Спосіб, як ми повинні складати рядки в швидкому еволюції, еволюціонував від стилю printf до стилю inline, тому тепер ви вбудовуєте свої значення прямо у рядок формату таким чином:

"Here goes \(YOUR_VARIABLE)"

Отже, для наведеного вище прикладу рішення:

println("value =\(valueObj)")

Гей, @downwoter, що не так у цій відповіді? Здається мені добре. Я знаю, що ми все ще могли використовувати NSLog зі Swift, але println - це спосіб зробити з Swift. І ця відповідь безпосередньо стосується проблеми, описана лінія вибиває службу SourceKit.
MANIAK_dobrii

У мене був подібний випуск з println (), який намагався надрукувати неназваний кортеж
thisispete

1

У мене була проблема з Xcode6 beta 3 для проекту, створеного в бета-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, це для мене дуже стабільно.
Фоментія

якщо ви використовуєте Xcode 6.1, тоді це було адресовано моїм розумінням :)
Даніель Галаско

Я відкликаю свою заяву, вона все ще зламана, і 5, безумовно, єдиний працюючий симулятор
Даніель Галаско

1

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

Він розташований за адресою: / Користувачі / {Ім'я користувача} / Бібліотека / Розробник / Xcode / DerivedData / {Назва проекту} - {Випадкова послідовність символів}

Я сподіваюся, що це допомагає.


1

Я думаю, я з'ясував одну (оскільки, мабуть, багато) причин цього відбувається.

У моєму випадку я імпортував файли Objective-C через мостиковий заголовок, який мав одну з наведених нижче прав.

  1. У файлі реалізації (.m) для імпорту Objective-C не встановлено належну ціль програми.
  2. Файл Objective-C мав лише заголовок (.h), а НЕ файл (.m) реалізації. (Знову ж таки, я думаю, що це частина набору "немає належної цілі програми", оскільки ви можете встановлювати цілі лише у файлах .m, а не у файлах .h)

Виправлення цілей програми на файлах Objective-C АБО видалення імпорту цих файлів у мостовому заголовку все разом, здається, вирішує проблему.

FYI - Якщо вам потрібно встановити ціль файлів заголовка (.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{} (сміливо додайте це у свою відповідь)
Портленд Бігун

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

Система перезавантажується сама незалежно від того, що ви робите. Не потрібно коментувати рядок, вона все одно почне знову працювати. І врізатися теж, звичайно.
Maury Markowitz

0

Повідомлено в Apple (# 17266321):

Деталі:

Резюме: Якщо ми спробуємо надрукувати словник зі значенням як масив, спливаюче вікно продовжує з'являтися: "SourceKit припинено. Функціонал редактора тимчасово обмежений". Xcode Заморожується і втрачає розпізнавання контексту, внаслідок чого текст чорніє.

Крок для відтворення: 1. Створіть масив як - "var iOSHistoryArray = [" iOS6 "," iOS7 "," iOS8 ",]"

  1. Створіть словник як - "var MacOSYosemiteFeatures: Dictionary = [" Device ": iOSHistoryArray]".

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

  3. Крок 3 викликає коментування проблеми, що робить Xcode знову функціональним.

Очікувані результати: Xcode повинен нормально функціонувати.

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

Версія: Версія 6.0 (6A215l)


0

Спробуй це:

У компіляторі / індексаторі Swift є помилка. Деякі рядки або рядки у вашому коді створюють труднощі. Вам доведеться відредагувати свій код у іншому текстовому редакторі, щоб прокоментувати рядки, що порушують права, перш ніж ви зможете відкрити цей проект за допомогою Xcode. Якщо у вас немає поняття, в чому проблема, прокоментуйте весь свій код. Як тільки проект буде відкрито, ви можете почати повертати код потроху, поки підвищення активності процесора не скаже вам, що ви знайшли проблему.


@Pang, якщо відповіді вірні та однакові, то питання, ймовірно, дублікати, тому ви повинні проголосувати або позначити їх, щоб закрити - У цьому випадку це, безумовно, відкрито для зберігання
мммммм

0

Проблема:

  • Якщо в вихідному коді сталася помилка, може з'явитися спливаюче вікно "SourceKitService Termininated", і виділення коду припиняє роботу. Це може статися, а може і не відбутися, коли він робить це за кількох різних умов.

Мій випадок: встановлено бета-3, проект лише для OSX, один файл виявив, що "напівзакритий оператор діапазону змінено з .. на .. <". З'являється спливаюче вікно, а підсвічування коду починає виходити з ладу.

Рішення:

  • Виправити помилку, виявлену Xcode
  • Перейдіть до іншого .swift у Навігаторі, поверніться до оригіналу
  • Підсвічування синтаксису знову з’являється, і спливаюче вікно "SourceKitService Terminated" відсутнє

0

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

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


0

У моєму випадку я імпортував відсутні файли в мостовому заголовку. Після видалення помилкового імпорту повідомлення про помилку відпало.


0

У мене була така ж помилка з вкладеним проектом Objective-C ++, який тепер включає Framework з кодом Swift. Щоб виправити це питання, мені довелося чітко побудувати рамку. Після того, як я зробив це питання, його немає, і він не повертається;)


0

Все ще відбувається з xcode 6 Версія 6.0 (6A313)

  • Створіть новий проект
  • Додати рамку та бібліотеку
  • Виберіть рамку дотику какао
  • Додайте файл 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.