web-dev-qa-db-fra.com

SourceKitService terminé

J'ai un problème avec Xcode où l'erreur "Service du kit source terminé" apparaît et où la coloration syntaxique et l'achèvement du code sont supprimés dans Swift. Comment puis-je réparer cela?

Voici un exemple d'image:

enter image description here

241
Tony

La réponse à la mienne (Xcode6-Beta7) consistait simplement à supprimer le dossier Derived Data.

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

J'espère que ça aide quelqu'un. Il y a évidemment de nombreuses raisons pour lesquelles cet accident peut se produire.

112
tobygriffin

Je pense avoir peut-être trouvé une solution plus générale. Voici les étapes que j’avais utilisées pour encourager Xcode à ne pas produire l’erreur _SourceKitService Terminated_.


Les symptômes que j'avais

  • Lorsque je commençais un nouveau terrain de jeu, je recevais une erreur indiquant que je ne pouvais pas communiquer avec le terrain de jeu (_Error running playground: Failed prepare for communication with playground._ Voir cette image sur Twitter .
  • Lorsque je basculerais le terrain de jeu de _OS X_ à iOS, je recevrais une autre erreur (malheureusement, je ne l’ai pas écrite).
  • Lorsque je commençais à taper un projet Swift basé sur iOS, essayant d'utiliser le complétion de code/intellisense sur toute classe spécifique à UIKit, je recevais le problème _SourceKitService Terminated_ dans ce fil.

Processus de débogage:

  • J'ai commencé par chercher sur Google pour SourceKitService, cela a très peu.
  • J'ai ensuite commencé à surveiller Console.app tout en utilisant Xcode. Cela a montré quelques erreurs:
    • _IDEPlaygroundDocument: Error encountered running playground_
    • _com.Apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed._

Ce que j'ai fait pour corriger ce problème.

Si vous rencontrez uniquement un problème dans le contexte d'un projet Swift, essayez-le d'abord seul. Si cela ne fonctionne pas, essayez toutes les étapes ci-dessous.

  1. Ouvrez votre projet et remplacez la cible de déploiement de la cible par quelque chose <= 7.1.

Le processus le plus long et le plus compliqué. (Les 3 premières étapes ne sont pas sûrement utiles, mais je les ai faites et vous devez donc les enregistrer ici)

  1. Supprimez complètement toutes les copies de Xcode sur votre système.
  2. Redémarrez votre ordinateur.
  3. Réinstallez Xcode6-beta uniquement.
  4. Vérifiez que le problème persiste dans la cour de récréation et/ou dans les projets.
  5. Ouvrez le simulateur iOS.
  6. Matériel -> Périphérique -> Gérer les périphériques
  7. Supprimer tous les périphériques.
  8. Recréez tous les appareils que vous voulez. J'ai ajouté la version iOS à la fin du nom, simplement parce que.
  9. Redémarrez Xcode et le simulateur.
  10. Vérifiez qu'au moins les terrains de jeu ne posent plus de problèmes lorsque vous passez de _OS X_ à iOS.
  11. Ouvrez votre projet et remplacez la cible de déploiement de la cible par quelque chose <= 7.1.

Une analyse

Il semble que le problème soit lié au fait que Xcode6 ne parvient pas à trouver et à se connecter correctement au simulateur. Je n'ai pas été en mesure de comprendre pourquoi, mais cela m'a permis de continuer à développer avec Swift. Cela peut avoir à voir avec le fait que les binaires du simulateur semblent avoir bougé .

35

Il vous suffit de supprimer le "ModuleCache", c’est une sorte de cache utilisé par Xcode pour l’autocomplétion.

Copiez et collez la ligne suivante dans le terminal:

rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache

32
David Attias

SourceKitService se bloque sur mon système dès que je tape

extension foo {

J'utilise Xcode 6 beta 6 et ce n'est pas grave si je le tape dans un fichier vide ou si je l'ajoute à un fichier existant. Dès que la source contient un bloc extension, il se bloque. Cela se produit même sur des projets nouvellement créés.

Ma "solution" consiste à éviter une extension des sources sur lesquelles je travaille actuellement. Je commente la fin d'un bloc de classe et le début du bloc d'extension. Dès que j'ai terminé mon travail en classe, je les commente à nouveau:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}
27
Klaas

J'ai trouvé une solution sur les forums de développement Apple (qui nécessitent un identifiant, je vais donc l'expliquer ici aussi).

TLDR: N'importez pas de @protocol dans votre en-tête Objective-C vers Swift appelé identique à un @interface. Par exemple, le SDK de Facebook a à la fois un protocole et une interface nommée "FBGraphObject".

Voici le post du forum:

L'ajout du kit de développement logiciel Facebook provoque le blocage de SourceKitService. Si vous voulez utiliser la version 3 et que vous avez besoin du SDK de Facebook, un moyen de contournement que j'ai trouvé et qui fonctionne pour moi est de refactoriser le @protocol FBGraphObject du SDK de Facebook et de le renommer en quelque chose comme @protocol FBGraphObjectProtocol en tant qu'interface FBGraphObject @ apparemment et aussi SourceKit ne l'aime pas.

Il s’agit bien d’une solution temporaire, juste pour que vous restiez fonctionnel, et vous devrez utiliser des Cocoapods ou créer de toute autre manière le SDK de Facebook vous-même plutôt que d’utiliser la bibliothèque du framework.

Pour le moment, vous devez vous assurer que vous n'avez pas de déclarations @protocol et @interface en conflit et qui incluent des bibliothèques tierces que vous utilisez peut-être.

Cela m'a coûté aujourd'hui, espérons que cela aide!


Publié par e.parto le 10 juillet 2014

9
aleclarson

Cela a commencé à se produire sur mon projet spritekit après l'insertion de la fonction touchesMoved. Cette fonction utilise le décompression forcée, ce qui semble poser problème:

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

Après avoir supprimé les points d'exclamation et ainsi arrêté le décompression forcée, le SourceKitService a cessé de planter.

J'espère que cela t'aides!

9
Markus Buhl

Utilisez un autre nom que Swift pour le projet. "Swift" est réservé.

8
Marius Fanu

J'ai eu ce problème toutes les quelques secondes dans Xcode 6 Beta 3, et il a continué même dans des projets complètement nouveaux. J'ai changé la cible de déploiement de 8.0 à 7.1 et elle s'est arrêtée.

8
Caroline

Votre projet s'appelle-t-il Swift? En voyant ce message, la construction échouera aussi (<unknown>:0: error: module name "Swift" is reserved for the standard library). Essayez d’utiliser un autre nom de projet tel que SwiftTest. Ça marcherait.

5
devxoul

J'ai constaté qu'en tapant explicitement (statiquement) les types de variable, plutôt que de les déduire, le problème était résolu pour moi.

3
Olshansk

Afin de résoudre ce problème, vous pouvez rencontrer un problème étrange avec votre code Swift. Par exemple, avoir plusieurs définitions d'IBOutlets parce que vous étiez en train de copier/coller. généralement, il s’agit simplement d’une erreur de syntaxe qui ne peut pas être traitée.

3
Tony

Quittez Xcode s'il est ouvert. Ensuite, depuis le terminal:

defaults delete com.Apple.dt.Xcode

Cela restaurera Xcode aux paramètres par défaut. Ouvrez Xcode et tout devrait fonctionner à nouveau.

3
Ross Gibson

Pour moi (xcode 6.1) la raison était que j'avais oublié d'adopter ma sous-classe au protocole.

Par exemple, c'est faux:

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

et c'est ok:

protocol SomeProtocol { ... }
class A : NSObject, SomeProtocol {
...
}
class B : A, SomeProtocol {
...
}
2
Ivo Leko

Je pense avoir identifié l'une des raisons (car il y en a probablement beaucoup).

Dans mon cas, j'importais des fichiers Objective-C via l'en-tête de pontage qui présentaient l'un des vrais suivants:

  1. Le fichier d'implémentation (.m) de l'importation Objective-C n'a pas défini correctement la cible de l'application.
  2. Le fichier Objective-C ne comportait qu'un fichier d'en-tête (.h) et PAS un fichier d'implémentation (.m). (Là encore, je pense que cela fait partie de l'ensemble "pas de cible d'application appropriée", car vous ne pouvez définir que des cibles dans les fichiers .m et non les fichiers .h)

La correction des cibles de l'application sur les fichiers Objective-C OR supprimer l'importation de ces fichiers dans l'en-tête de pontage ensemble semble résoudre le problème.

FYI - Si vous devez définir la cible des fichiers d'en-tête (.h) ne contenant aucun fichier d'implémentation (.m), procédez comme suit: Impossible de modifier la visibilité de l'appartenance à la cible dans Xcode 4.5

1
JimmyJammed

J'ai eu le même problème avec Xcode6 beta 3 pour un projet créé en beta 2.

C’est à cause de nouvelles modifications importantes dans la syntaxe de déclaration de tableau Swift language.

Recherchez le code affecté en raison des modifications importantes de la version 3 de la version 3.

http://adcdownload.Apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf

Un des exemples dans mon cas était:

Je devais changer:

var tabBarController : UITabBarController = self.window?.rootViewController as UITabBarController;

à

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

Conclusion: on dirait que s'il y a une erreur dans le code source, dans certaines conditions, cette erreur est générée par Xcode.

Solution jusqu'à ce que le bogue soit corrigé: recherchez l'erreur manuellement:)

Bonne chance!

1
Tejasvi Hegde

J'ai constaté que la suppression des données dérivées du terminal résolvait le problème jusqu'au prochain crash. : S

Il se trouve à l'adresse suivante:/Utilisateurs/{Nom d'utilisateur}/Bibliothèque/Développeur/Xcode/Données dérivées/{Nom du projet} - {Séquence aléatoire de caractères}

J'espère que ça aide.

1
sang

J'ai eu le même problème aujourd'hui, le problème était avec println, je viens d'essayer l'ancien style NSLog pour imprimer une valeur:

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

La façon dont nous devrions composer les chaînes dans Swift a évolué du style printf au style intégré, vous intégrez donc maintenant vos valeurs dans la chaîne de format suivante:

"Here goes \(YOUR_VARIABLE)"

Donc, pour l'exemple ci-dessus, la solution est:

println("value =\(valueObj)")
1
MANIAK_dobrii

Un programme composé uniquement de ces deux lignes (éventuellement incorrect en termes de syntaxe Swift>) est suffisant pour générer l'erreur "SourceKitService Terminated":

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

Si vous utilisez let au lieu de var, l'éditeur se comporte à nouveau normalement. Xcode version 6.0 (6A215l)

1
Alexander

Juste pour ajouter une solution potentielle ici, j’ai accidentellement nommé une classe var du même nom que son type:

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

Cela provoquera un crash de SourceKit. Erreur de syntaxe stupide, mais au cas où quelqu'un d'autre ferait la même erreur.

Edit: également selon @Portland Runner:

De même, si vous définissez le type de retour sur le nom de la fonction, vous obtiendrez l'erreur.

func foo() ->foo{}
1
ohhh

La solution pour moi s'est avérée être de changer le simulateur. J'utilisais l'iPhone 5S pour mon simulateur et lorsque je l'ai basculé sur l'iPhone 5, tout fonctionnait parfaitement. Espérons qu'une future version le corrigera complètement.

1
Fomentia

Problème:

  • En cas d'erreur dans le code source, la fenêtre contextuelle "SourceKitService Terminated" peut apparaître et la mise en surbrillance du code cesse de fonctionner. Cela peut arriver ou non, quand cela se produit dans de multiples conditions différentes.

Mon cas: Installé bêta 3, projet OSX uniquement, un fichier a détecté que l’erreur "Opérateur de plage semi-fermée a été modifiée de .. à .. <". La fenêtre contextuelle commence à apparaître et la mise en surbrillance du code commence à échouer.

Solution:

  • Correction d'une erreur détectée par Xcode
  • Passez à un autre. Swift dans le navigateur, revenez à l’original
  • La surbrillance de la syntaxe réapparaît et la fenêtre contextuelle "SourceKitService Terminated" a disparu
0
Luis Palacios

Dans xcode, allez dans la barre de menus >> fenêtre >> appareils (shift + cmd + 2) une nouvelle fenêtre s’affiche, et en bas à gauche, ajoutez un nouveau simulateur, plus précisément celui fonctionnant sous iOS 8.0, dans la liste existante. : vous devrez peut-être redémarrer xcode

reference: http://www.reddit.com/r/Swift/comments/2bznfo/error_running_playground_unable_to_find_suitable/

0
frank

Xcode 6.1 Beta 3:

Dès que vous définissez un alias de type non privé (par exemple, typealias Foo = Int) dans un fichier Swift, tapez la lettre c dans un autre fichier, ce qui provoque le blocage de SourceKitService.

La solution consiste à ne plus utiliser les alias de type, à attendre la prochaine version bêta ou à envelopper vos alias de type dans les définitions de classe:

public class DummyClass {
    public typealias Foo = String
}

et l'utiliser comme ça:

var myVar:DummyClass.Foo?
0
Klaas

Rapporté à Apple (# 17266321):

Détails:

Résumé: Si nous essayons d’imprimer un dictionnaire avec une valeur sous forme de tableau, une fenêtre contextuelle continue de s'afficher - "SourceKit terminé. Les fonctionnalités de l'éditeur sont limitées dans le temps". Xcode Gèle et perd la reconnaissance du contexte, ce qui noircit le texte.

Étapes à reproduire: 1. Créez un tableau comme suit: "var iOSHistoryArray = [" iOS6 "," iOS7 "," iOS8 ",]"

  1. Créez un dictionnaire sous "var MacOSYosemiteFeatures: Dictionary = [" Device ": iOSHistoryArray]".

  2. Imprimez le dictionnaire sous la forme "println (" Dictionnaire contenant la valeur de tableau:% @\n ", MacOSYosemiteFeatures)" (<< - Coupable - >>)

  3. L'étape 3 provoque le commentaire du problème, ce qui rend le Xcode fonctionnel à nouveau.

Résultats attendus: Xcode devrait fonctionner normalement.

Résultats réels: Xcode devient non fonctionnel, perd la reconnaissance du contexte (toute la police est perdue et tout le texte devient noir), tout le Xcode devient inactif.

Version: Version 6.0 (6A215l)

0
aksani56

J'ai eu cela à venir presque tous les jours au cours des derniers mois. J'ai essayé tout ce qui précède et il ne le répare que temporairement.

Enfin, il y a deux semaines, j'ai remplacé l'emplacement de DerivedData par un emplacement récent et je n'ai pas eu le problème une seule fois.

Je remarque que lorsque je supprime mon dossier Derived Data, il se régénère et représente environ 3 Go pour une raison quelconque. Lorsque j'ai créé un nouveau dossier, il n'a pas régénéré toutes ces données.

J'espère que ça aide quelqu'un.

0
bwash70

Il se passe encore avec xcode 6 Version 6.0 (6A313)

  • Créer un nouveau projet
  • Ajouter un framework et une bibliothèque
  • Sélectionnez cadre de cacao tactile
  • Ajouter un fichier Swift
  • Ajouter une classe au fichier Swift

Les accidents

ps: tout nouveau mac mini, aucune installation précédente de xcode, rien d’exotique. Juste un produit bêta je suppose.

0
Alex Nolasco

J'ai eu la même erreur avec le projet imbriqué Objective-C++ qui inclut maintenant Framework avec le code Swift. Afin de résoudre ce problème, je devais construire explicitement le cadre. Une fois que j'ai fait ce problème est parti, et ne revient pas;)

0
Anton Matosov

Changer la cible de déploiement pour iOS 8.0 a fonctionné pour moi. Je sais que quelqu'un a dit que le déplacement vers <= 7.1 fonctionnait, mais ce problème semble provenir de plusieurs sources. Cette solution peut donc fonctionner.

0
Maxwell

Swift essaie de déterminer le type de tout ce qui est dynamiquement plutôt que statiquement, mais cela peut prendre un effort énorme lorsqu'il s'agit de types complexes (comme un filtre chaîné, une carte, des appels FlatMap) ou de grands dictionnaires. Parfois, vous devez les séparer pour faciliter l'analyse du compilateur. Un cousin de ce problème est l'erreur "trop ​​complexe pour être évaluée à temps". Imaginez que certains de ceux qui étaient presque soient trop complexes pour être évalués dans le temps: ensemble, ils deviennent une véritable ressource.

Essayez de trouver tous les endroits où vous créez des dictionnaires dynamiques ou utilisez des chaînes d'appels non typés. Essayez de taper plus spécifiquement, en particulier lors de la déclaration de la variable.

Quelques exemples rapides:

Dictionnaires

Mauvais:

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

Mieux:

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

Meilleur:

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

Cartographies

Mauvais:

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

Mieux:

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

Meilleur:

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

Les avantages sont également un code supplémentaire vérifié car vous obtiendrez toujours le type attendu ou une erreur du compilateur. L'inconvénient est que cela commence à ressembler un peu à Java.

Bien sûr, ce problème s’accumule d’abord lorsque votre projet se développe. Les petits projets Swift sont toujours rapides. Donc, c'est probablement beaucoup de travail. L'expérience montre quelles expressions sont complexes et prennent beaucoup de temps. Ce serait formidable si vous pouviez comparer ce genre de choses.

0
Departamento B

Lorsque cette erreur commence à apparaître, commentez le dernier morceau de code que vous avez écrit récemment et attendez un moment. La coloration syntaxique devrait réapparaître. Voici comment je contourne le problème.

    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
Hong Wei

Jusqu'à présent, les 2 causes les plus courantes pour moi ont été:

  • points-virgules à la fin des lignes
  • importer des frameworks qui ne sont pas référencés dans le fichier
0
thisispete

Déplacer l'extension avant la classe principale.

extension SomeType {
// new functionality to add 

}

0
gerachev

Essayez-le:

Il y a un bogue dans le compilateur/indexeur Swift. Certaines lignes de votre code lui posent des problèmes. Vous devrez modifier votre code avec un autre éditeur de texte pour commenter la ou les lignes incriminées avant de pouvoir ouvrir ce projet avec Xcode. Si vous ne savez pas quel est le problème, commentez tout votre code. Une fois le projet ouvert, vous pouvez commencer à récupérer le code petit à petit jusqu'à ce que l'augmentation de l'activité de la CPU vous indique que vous avez identifié le problème.

0
user1671097

Dans mon cas, j'avais importé des fichiers manquants dans l'en-tête ponté. Après avoir supprimé les importations incorrectes, la notification d'erreur a disparu.

0
Shmidt