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.