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:
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.
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
_.
Error running playground: Failed prepare for communication with playground.
_ Voir cette image sur Twitter .OS X
_ à iOS
, je recevrais une autre erreur (malheureusement, je ne l’ai pas écrite).SourceKitService Terminated
_ dans ce fil.IDEPlaygroundDocument: Error encountered running playground
_com.Apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.
_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.
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)
OS X
_ à iOS
.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é .
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
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 {
}
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
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!
Utilisez un autre nom que Swift pour le projet. "Swift" est réservé.
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.
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.
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.
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.
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.
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 {
...
}
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:
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
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.
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!
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.
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)")
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)
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{}
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.
Problème:
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:
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/
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?
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 ",]"
Créez un dictionnaire sous "var MacOSYosemiteFeatures: Dictionary = [" Device ": iOSHistoryArray]".
Imprimez le dictionnaire sous la forme "println (" Dictionnaire contenant la valeur de tableau:% @\n ", MacOSYosemiteFeatures)" (<< - Coupable - >>)
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)
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.
Il se passe encore avec xcode 6 Version 6.0 (6A313)
Les accidents
ps: tout nouveau mac mini, aucune installation précédente de xcode, rien d’exotique. Juste un produit bêta je suppose.
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;)
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.
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.
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 */ ]
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.
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)
}
Jusqu'à présent, les 2 causes les plus courantes pour moi ont été:
Déplacer l'extension avant la classe principale.
extension SomeType {
// new functionality to add
}
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.
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.