У меня возникла проблема с Xcode, где появляется сообщение об ошибке "Служба исходного набора завершена", и вся подсветка синтаксиса и завершение кода ушли в Swift. Как я могу это исправить?
Вот пример изображения:
Ответ на мой (Xcode6-Beta7) был просто для удаления папки Derived Data.
Preferences > Locations > Derived Data > click the arrow to open in Finder > trash it.
Надеюсь, это поможет кому-то. Очевидно, что существует много причин, по которым может произойти этот крах.
Я считаю, что, возможно, нашел более общее решение. Ниже приведены шаги, которые я использовал, чтобы Xcode не вызывал ошибку SourceKitService Terminated
.
Error running playground: Failed prepare for communication with playground.
Смотрите этот образ на твиттере.OS X
на iOS
, я получил бы еще одну ошибку (к сожалению, я не записывал ее один).SourceKitService Terminated
в этом потоке.IDEPlaygroundDocument: Error encountered running playground
com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.
Если у вас есть проблема только в контексте проекта Swift, сначала попробуйте это сделать. Если это не сработает, попробуйте все шаги ниже.
Более длительный и вовлеченный процесс. (Первые 3 шага не очень полезны, но я сделал их, и поэтому записываю их здесь)
OS X
на iOS
.Похоже, проблема заключается в том, что Xcode6 не может правильно найти и подключиться к симулятору. Я не смог определить, почему это так, но это позволило мне продолжить разработку с помощью Swift. Возможно, это связано с тем, что бинарные файлы симулятора похоже, переместились.
Вам просто нужно удалить "ModuleCache", это какой-то кеш, используемый Xcode для автозаполнения.
Скопируйте и вставьте следующую строку в терминал:
rm -rf ~/Library/Разработчик/Xcode/DerivedData/ModuleCache
SourceKitService сбой в моей системе, как только я набираю
extension foo {
Я использую Xcode 6 beta 6, и не имеет значения, буду ли я вводить его в пустой файл или добавлять его в существующий. Как только источник содержит один блок extension
, он сработает. Это происходит даже во вновь созданных проектах.
Мое "решение" заключается в том, чтобы избежать расширения в источниках, в которых я сейчас работаю. Я комментирую конец блока класса и начало блока расширения. Как только я закончил свою работу над классом, я снова прокомментирую их:
class MyClass {
[... my stuff ...]
//}
//
//extension MyClass {
}
Я нашел решение на форумах разработчиков 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 года
Это начало происходить в моем проекте spritekit после вставки touch-функцийMoved-function. Эта функция использует принудительное разворачивание, что, по-видимому, вызывает проблему:
override func touchesMoved(touches: NSSet!, withEvent event: UIEvent!)
После удаления восклицательных знаков и, таким образом, остановки принудительной разворачивания, SourceKitService перестает сбой.
Надеюсь, это поможет!
У меня была эта проблема каждые несколько секунд в Xcode 6 Beta 3, и она продолжалась даже в совершенно новых проектах. Я изменил цель развертывания с 8.0 до 7.1 и он остановился.
Используйте другое имя, кроме Swift для проекта. "Swift" зарезервирован.
Ваш проект называется Swift
? Увидев это сообщение, сборка также будет неудачной (<unknown>:0: error: module name "Swift" is reserved for the standard library
). Попробуйте использовать другое название проекта, например SwiftTest
. Это сработает.
Закройте Xcode, если он открыт. Затем с терминала:
defaults delete com.apple.dt.Xcode
Это приведет к восстановлению Xcode по умолчанию. Откройте Xcode, и все должно работать снова.
Я обнаружил, что явным образом (статически) вводя типы переменных, а не выводя их, решил проблему для меня.
Чтобы исправить это, у вас может возникнуть какая-то странная проблема с вашим кодом Swift. Например, наличие нескольких определений IBOutlets, потому что вы были в середине копирования и вставки. обычно это просто синтаксическая ошибка, которая не может быть обработана.
Для меня (xcode 6.1) причина заключалась в том, что я забыл принять свой подкласс к протоколу.
Например, это неверно:
protocol SomeProtocol { ... }
class A :NSObject, SomeProtocol {
...
}
class B : A {
...
}
и это нормально:
protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}
Чтобы добавить еще одно потенциальное решение здесь, я случайно назвал класс var тем же именем, что и его тип:
class var Settings:Settings {
get { return classVarWorkAround.settings }
}
Это приведет к сбою SourceKit FOR SURE. Глупо синтаксическая ошибка, но в случае, если кто-то другой совершит ту же ошибку.
Изменить: также в соответствии с @Portland Runner:
Аналогично, если вы установите тип возврата на имя func, вы получите сообщение об ошибке.
func foo() ->foo{}
func foo() ->foo{}
(не стесняйтесь добавлять его в свой ответ)
Я думаю, что я вычислил один (как, вероятно, много) причин, по которым это происходит.
В моем случае я импортировал файлы Objective-C через заголовок Bridging Header, который имел одно из следующих значений:
Фиксирование целевых объектов приложения в файлах Objective-C ИЛИ удаление импорта этих файлов в заголовочном заголовке вместе, похоже, устраняет проблему.
FYI. Если вам нужно установить целевой файл заголовка (.h), у которого нет файла реализации (.m), вы можете выполнить следующие простые шаги: Невозможно изменить видимость целевого членства в Xcode 4.5
Я обнаружил, что удаление полученных данных из терминала разрешает проблему до следующего сбоя.: S
Он расположен по адресу:/Users/{User name}/Library/Developer/Xcode/DerivedData/{Project Name} - {Random char sequence}
Надеюсь, это поможет.
Решение для меня, похоже, изменило симулятор. Я использовал iPhone 5S для своего симулятора, и когда я переключил его на iPhone 5, все работало отлично. Надеюсь, что будущая версия полностью исправит его.
У меня была та же проблема с Xcode6 beta 3 для проекта, созданного в бета-версии 2.
Это было связано с новыми нарушениями в быстром языке, например синтаксисе объявления массива.
Проверьте полученный код из-за нарушения изменений в бета-версии 3.
Один из примеров в моем случае:
Мне пришлось изменить:
var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;
to
var tabBarController : UITabBarController = self.window!.rootViewController as UITabBarController
Заключение: Похоже, если в исходном коде есть ошибка, в некоторых случаях эта ошибка возникает с помощью Xcode.
Решение до устранения ошибки: Проверьте ошибку вручную:)
Гудлак!
У меня такая же проблема сегодня, дело в println
, я просто попробовал старый стиль NSLog для печати значения:
// something like this
println("value = %@", valueObj)
Способ, которым мы должны составлять строки в swift, эволюционировал от стиля printf до встроенного стиля, поэтому теперь вы вставляете свои значения прямо в строку формата следующим образом:
"Here goes \(YOUR_VARIABLE)"
Итак, для примера выше решение:
println("value =\(valueObj)")
Программа, состоящая только из этих двух строк (возможно, неверная с точки зрения синтаксиса Swift), достаточно, чтобы вызвать здесь ошибку "Исходная ссылка SourceKitService":
var x = 42
println("Hello", x)
Использование let
вместо var
заставляет редактор вести себя нормально снова. Xcode версии 6.0 (6A215l)
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 всегда бывают быстрыми. Так что, наверное, это большая работа. Опыт показывает, какие выражения сложны и требуют много времени. Было бы здорово, если бы вы могли сравнить эти вещи.
У меня это возникало почти каждый день в течение последних нескольких месяцев. Пробовал все вышеперечисленное, и он только фиксирует его временно.
Наконец, две недели назад я изменил местоположение DerivedData на новое место, и у меня не было проблемы один раз.
Я отмечаю, что когда я удаляю папку Derived Data, она восстанавливается и примерно 3 ГБ по какой-то причине. Когда я создал новую папку, он не восстановил все эти данные.
Надеюсь, это поможет кому-то.
Переместите расширение до основного класса.
extension SomeType {
// new functionality to add
}
До сих пор 2 наиболее распространенными причинами для меня были:
Изменение цели развертывания в iOS 8.0 работало для меня. Я знаю, что кто-то сказал, что он переместил его в <= 7.1, но эта проблема, похоже, поступает из нескольких источников, поэтому эта альтернатива может работать.
Xcode 6.1 Beta 3:
Как только вы определите псевдоним неличного типа (например, typealias Foo = Int
) в одном файле Swift, введите букву c
в другой файл, из которой произошел сбой SourceKitService.
Решение либо уходит от использования псевдонимов типов, дожидается следующей бета-версии, либо обертывает ваши псевдонимы типов в определения классов:
public class DummyClass {
public typealias Foo = String
}
и используйте его следующим образом:
var myVar:DummyClass.Foo?
Все еще происходит с xcode 6 Version 6.0 (6A313)
Сбои
ps: новый mac mini, никаких предыдущих настроек xcode, ничего экзотического. Я полагаю, что это просто бета-продукт.
У меня была такая же ошибка с вложенным проектом Objective-C ++, который теперь включает Framework с кодом Swift. Чтобы исправить эту проблему, я должен был явно создать фреймворк. Как только я сделал, этот вопрос исчез, и он не возвращается;)
В моем случае я импортировал отсутствующие файлы в мостовом заголовке. После того, как я удалил неправильный импорт, сообщение об ошибке исчезло.
В 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/
Проблема:
Мой случай: установлен бета-версия 3, только проект OSX, один файл обнаружил, что оператор "полузакрытого диапазона" был изменен с.. на.. < ошибка. Всплывающее окно начинает появляться, и подсветка кода начинает сбой.
Решение:
Попробуйте:
В компиляторе/индексаторе Swift имеется ошибка. Некоторые строки или строки в ваш код создает трудности. Вам нужно будет отредактировать код с некоторым другим текстовым редактором, чтобы прокомментировать строку (-ы) прежде чем вы сможете открыть этот проект с помощью Xcode. Если у вас есть не знаю, в чем проблема, закомментируйте весь свой код. Как только вы проект открыт, вы можете начать возвращать код понемногу пока повышение активности процессора не сообщит вам, что вы нашли проблема.
Сообщено 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)
Когда эта ошибка начнет появляться, просто закомментируйте последнюю/недавнюю часть кода, которую вы написали, и подождите некоторое время. Выделение синтаксиса должно появиться снова. Вот как я работаю над проблемой.
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)
}