SourceKitService прекращено

234

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

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

Изображение 60

  • 1
    Это похоже на проблему с бета-версией Xcode. Перезапуск Xcode решил проблему для меня, хотя при повторном открытии проекта произошла ошибка, а затем она прекратилась.
  • 0
    У меня тоже была эта проблема. Я отправил отчет об ошибке в Apple, так как получал эту ошибку в нескольких ситуациях. Радар # 17115239.
Показать ещё 13 комментариев
Теги:
xcode

34 ответа

112
Лучший ответ

Ответ на мой (Xcode6-Beta7) был просто для удаления папки Derived Data.

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

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

  • 0
    Спасибо, это исправлено.
  • 0
    Это исправило мою проблему, спасибо.
Показать ещё 11 комментариев
34

Я считаю, что, возможно, нашел более общее решение. Ниже приведены шаги, которые я использовал, чтобы 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, сначала попробуйте это сделать. Если это не сработает, попробуйте все шаги ниже.

  • Откройте проект и измените целевую цель развертывания на что-то <= 7.1.

Более длительный и вовлеченный процесс. (Первые 3 шага не очень полезны, но я сделал их, и поэтому записываю их здесь)

  • Полностью удалите все копии Xcode в вашей системе.
  • Перезагрузите компьютер.
  • Переустановите только Xcode6-бета.
  • Убедитесь, что у вас все еще есть проблема на детской площадке и/или проектах.
  • Откройте iOS Simulator.
  • Оборудование → Устройство → Управление устройствами
  • Удалить все устройства.
  • Восстановите все устройства, которые вы хотите. Я добавил версию iOS в конец имени только потому, что.
  • Перезапустите Xcode и симулятор.
  • Убедитесь, что по крайней мере игровые площадки больше не бросают проблемы при переключении с OS X на iOS.
  • Откройте проект и измените целевую цель развертывания на что-то <= 7.1.

Анализ

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

  • 2
    Возникла похожая проблема: «Среда выполнения для выбранного устройства не установлена». ошибка при запуске игровой площадки для iPhonesimulator. Шаг 5. ~ 9. исправил проблему.
  • 0
    Как примечание - Xcode 6 Beta 3 полностью решил проблему для меня. Не уверен, как или почему. Надеюсь, то же самое верно и для других.
Показать ещё 5 комментариев
31

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

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

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

  • 1
    Это сделало это для меня. Некоторое время я мог получать подсветку и автозаполнение только тогда, когда в активной схеме было выбрано устройство IOS.
  • 1
    Это сработало и для меня. В соответствии с примечаниями к выпуску здесь это исправлено в Xcode 6.1.1 GM seed
Показать ещё 1 комментарий
26

SourceKitService сбой в моей системе, как только я набираю

extension foo {

Я использую Xcode 6 beta 6, и не имеет значения, буду ли я вводить его в пустой файл или добавлять его в существующий. Как только источник содержит один блок extension, он сработает. Это происходит даже во вновь созданных проектах.

Мое "решение" заключается в том, чтобы избежать расширения в источниках, в которых я сейчас работаю. Я комментирую конец блока класса и начало блока расширения. Как только я закончил свою работу над классом, я снова прокомментирую их:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}
  • 0
    Вы только что спасли мой день. Уже подал отчет об ошибке.
  • 0
    Просто примечание - расширения не делали этого в бета-версии 5. Это новая бета6-функция.
Показать ещё 3 комментария
9

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

TL;DR. Не импортируйте @protocol в заголовок Objective-C в Swift, названный так же, как @interface. Например, в SDK Facebook есть как протокол, так и интерфейс с именем "FBGraphObject".

Здесь сообщение форума:

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

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

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

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


Отправлено e.parto на 10 июля 2014 года

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

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

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

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

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

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

У меня была эта проблема каждые несколько секунд в Xcode 6 Beta 3, и она продолжалась даже в совершенно новых проектах. Я изменил цель развертывания с 8.0 до 7.1 и он остановился.

8

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

  • 0
    В дополнение к этому, это ошибка в редакторе, когда у вас есть ошибка в вашем редакторе кода, которая не способна ее устранить. Предполагается, что выдает ошибку или предупреждение, но не всегда. Я надеюсь, что это будет исправлено в ближайшее время.
  • 10
    Я также получаю это предупреждение, но название моего проекта вообще не включает в себя слово Swift, так что это не «решение», а, может быть, «решение». И нет, я не понял, в чем проблема с моей.
Показать ещё 5 комментариев
4

Ваш проект называется Swift? Увидев это сообщение, сборка также будет неудачной (<unknown>:0: error: module name "Swift" is reserved for the standard library). Попробуйте использовать другое название проекта, например SwiftTest. Это сработает.

3

Закройте Xcode, если он открыт. Затем с терминала:

defaults delete com.apple.dt.Xcode

Это приведет к восстановлению Xcode по умолчанию. Откройте Xcode, и все должно работать снова.

3

Я обнаружил, что явным образом (статически) вводя типы переменных, а не выводя их, решил проблему для меня.

  • 0
    Это должно быть одобрено больше.
3

Чтобы исправить это, у вас может возникнуть какая-то странная проблема с вашим кодом Swift. Например, наличие нескольких определений IBOutlets, потому что вы были в середине копирования и вставки. обычно это просто синтаксическая ошибка, которая не может быть обработана.

  • 2
    Я вижу эту проблему с неизмененным кодом из шаблона проекта Xcode, поэтому я не думаю, что это проблема с кодом Swift.
  • 0
    Это может быть вызвано несколькими IBOutlets с одинаковым именем.
2

Для меня (xcode 6.1) причина заключалась в том, что я забыл принять свой подкласс к протоколу.

Например, это неверно:

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

и это нормально:

protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}
  • 0
    Была такая же проблема с забытым протоколом. Спасибо за совет. Кажется, релизная версия xcode все еще работает как бета =)
  • 0
    Спасибо! Я схожу с ума по этому поводу. Ваше решение устранило мою проблему. Я надеюсь, что это будет исправлено, кажется странным добавлять протоколы на каждый подкласс.
1

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

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

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

Изменить: также в соответствии с @Portland Runner:

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

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

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

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

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

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

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

1

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

Он расположен по адресу:/Users/{User name}/Library/Developer/Xcode/DerivedData/{Project Name} - {Random char sequence}

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

1

Решение для меня, похоже, изменило симулятор. Я использовал iPhone 5S для своего симулятора, и когда я переключил его на iPhone 5, все работало отлично. Надеюсь, что будущая версия полностью исправит его.

  • 0
    Я обнаружил, что симулятор iPhone 5 - это всегда лучший выбор, любой другой падает
  • 0
    @DanielGalasko Интересно. Я обычно использую iPhone 5S, он очень стабилен для меня.
Показать ещё 2 комментария
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;

to

var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController

Заключение: Похоже, если в исходном коде есть ошибка, в некоторых случаях эта ошибка возникает с помощью Xcode.

Решение до устранения ошибки: Проверьте ошибку вручную:)

Гудлак!

1

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

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

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

"Here goes \(YOUR_VARIABLE)"

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

println("value =\(valueObj)")
  • 0
    Эй, @downwoter, что не так с этим ответом? Кажется, хорошо для меня. Я знаю, что мы все еще можем использовать NSLog со Swift, но println - способ сделать это после Swift. И этот ответ имеет прямое отношение к проблеме, описанной линии вылетает служба SourceKit.
  • 0
    У меня была похожая проблема с println () пытался напечатать безымянный кортеж
1

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

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

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

  • 0
    Но эта печать не имеет смысла ...
  • 0
    Я обычно подозреваю, что эта ошибка возникает, когда XCode не может обработать определенную синтаксическую ошибку - в реальном коде или во время сборки (в примере быстрого изменения имени проекта)
Показать ещё 3 комментария
0

Swift пытается выяснить, какой тип динамически, а не статически, но может принести огромные усилия, когда он имеет дело со сложными типами (например, цепной фильтр, карта, плоские вызовы) или большими словарями. Иногда вам нужно разбить их, чтобы облегчить анализ компилятора. Кузеном этой проблемы является ошибка, "слишком сложная для оценки во времени". Представьте, что у вас есть несколько из тех, которые были слишком сложными для оценки во времени: вместе они становятся ресурсоемкой.

Попробуйте найти все места, где вы создаете динамические словари, или используйте цепочки нетипизированных вызовов. Попробуйте ввести более конкретно, особенно при объявлении переменной.

Несколько быстрых примеров:

Словари

Плохо:

let myDict = [ /* bunch of different things */ ]

лучше:

let myDict: [String: AnyObject] = [ /* bunch of different things */ ] 

Лучший:

let myDict: [String: SpecificType] = [ /* bunch of similar things */ ]

Отображения

Плохо:

let filteredUserIds = users.filter({ user in user.enabled })
    .flatMap { user in user.name != nil ? return user.id : return nil }

лучше:

let filteredUserIds: [Int] = users.filter({ user in user.enabled })
    .flatMap { user in user.name != nil ? return user.id : return nil }

Лучший:

let enabledUsers: [User] = users.filter { user in user.enabled } 
let filteredUserIds: [Int] = enabledUsers.flatMap { 
    user in user.name != nil ? return user.id : return nil 
}

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

Конечно, эта проблема накапливается в первую очередь, пока ваш проект растет. Проекты Small Swift всегда бывают быстрыми. Так что, наверное, это большая работа. Опыт показывает, какие выражения сложны и требуют много времени. Было бы здорово, если бы вы могли сравнить эти вещи.

0

У меня это возникало почти каждый день в течение последних нескольких месяцев. Пробовал все вышеперечисленное, и он только фиксирует его временно.

Наконец, две недели назад я изменил местоположение DerivedData на новое место, и у меня не было проблемы один раз.

Я отмечаю, что когда я удаляю папку Derived Data, она восстанавливается и примерно 3 ГБ по какой-то причине. Когда я создал новую папку, он не восстановил все эти данные.

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

0

Переместите расширение до основного класса.

extension SomeType {
// new functionality to add 

}

0

До сих пор 2 наиболее распространенными причинами для меня были:

  • точки с запятой в конце строк
  • импортировать фреймворки, на которые не ссылаются в файле
0

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

0

Xcode 6.1 Beta 3:

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

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

public class DummyClass {
    public typealias Foo = String
}

и используйте его следующим образом:

var myVar:DummyClass.Foo?
0

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

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

Сбои

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

0

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

0

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

0

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

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

0

Проблема:

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

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

Решение:

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

Попробуйте:

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

  • 0
    Это скопировано с: stackoverflow.com/a/24442837/1402846
  • 0
    @ Панг, если ответы правильные и одинаковые, тогда вопросы, вероятно, дублируют друг друга, поэтому вам следует проголосовать или поставить флажок, чтобы закрыть их. В этом случае это, безусловно, возможность оставить
0

Сообщено Apple (# 17266321):

Подробнее:

Резюме: Если мы попытаемся напечатать словарь со значением в виде массива, всплывающее окно продолжает выскакивать: "SourceKit завершен. Функция редактора временно ограничена". Xcode Замораживает и теряет контекстное распознавание, заставляя текст почерневать.

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

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

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

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

Ожидаемые результаты: Xcode должен нормально функционировать.

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

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

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
    Система перезагружается сама, независимо от того, что вы делаете. Вам не нужно комментировать строку, она все равно снова начнет работать в ближайшее время. И сбой, конечно же.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню