SourceKitService finalizado


242

Estou tendo um problema com o Xcode em que o erro "Serviço do kit de origem finalizado" está aparecendo e todos os realces de sintaxe e conclusão de código desaparecem no Swift. Como posso consertar isso?

Aqui está um exemplo de imagem:

insira a descrição da imagem aqui


1
Parece haver um problema com o Xcode beta. A reinicialização do Xcode solucionou o problema para mim, embora ao reabrir o projeto, o erro tenha ocorrido e depois tenha parado.
precisa saber é o seguinte

4
Eu apenas comecei a ter esse problema ... então vi um erro de sintaxe no meu arquivo swift. Depois de corrigir isso, o editor começou a trabalhar novamente.
Brindy #

80
Eu mataria para que isso seja corrigido agora ...
Papai Noel

2
O erro é realmente causado por um erro de sintaxe dentro do Swift. Se você remover o erro de sintaxe, o erro vai embora :)
Steffen Brem

2
Não só não é resolvido no 6.1, mas acontece mesmo com os "erros" mais pequenos que nem são erros. Geralmente, você pode acioná-lo enquanto digita . Eu consegui que acontecesse quando cheguei ao "stru" em "struct". Eu acho que ele realmente queria me dizer algo antes de receber o "ct"!
Maury Markowitz

Respostas:


114

A resposta para a minha (Xcode6-Beta7) foi simplesmente excluir a pasta Dados Derivados.

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

Espero que isso ajude alguém. Obviamente, existem muitas razões pelas quais essa falha pode ocorrer.


Obrigado, isso consertou.
Noura 30/09

4
Parece que isso resolveu o problema, mas também usando o Xcode 6.1 GM.
Flovdis

7
isso o corrigiu por cerca de 10 minutos, depois mudei o nome de uma variável e ele voltou!
hariseldon78

1
Não é uma correção permanente, mas apenas o aprimoramento da resposta. Crie um script de shell e execute-o sempre que acontecer rm -frd ~ / Library / Developer / Xcode / DerivedData / * rm -frd ~ / Library / Caches / com.apple.dt. Xcode / *
Raj

2
Não resolver o meu problema
Shirish Kumar

35

Acredito que posso ter encontrado uma solução de propósito mais geral. Abaixo estão as etapas que eu usei para incentivar o Xcode a não produzir o SourceKitService Terminatederro.


Os sintomas que eu estava tendo:

  • Ao iniciar um novo playground, recebia um erro por não conseguir me comunicar com o playground ( Error running playground: Failed prepare for communication with playground.veja esta imagem no twitter .
  • Quando eu trocava o playground de OS Xpara iOS, recebia outro erro (infelizmente não o escrevi).
  • Quando eu começava a digitar um projeto Swift baseado no iOS, tentando usar a conclusão de código / intellisense em qualquer classe específica do UIKit, eu recebia o SourceKitService Terminatedproblema neste segmento.

Processo de depuração:

  • Comecei procurando no SourceKitService no google, isso ficou muito pouco.
  • Comecei a monitorar o Console.app enquanto usava o Xcode. Isso mostrou alguns erros:
    • IDEPlaygroundDocument: Error encountered running playground
    • com.apple.CoreSimulator.CoreSimulatorService[3952]: The runtime for the selected device is not installed.

O que eu fiz para corrigir esse problema.

Se você está tendo apenas um problema no contexto de um projeto Swift, tente fazer isso sozinho primeiro. Se isso não funcionar, tente todas as etapas abaixo.

  1. Abra seu projeto e altere o destino de implantação do destino para algo <= 7.1.

O processo mais demorado e envolvido. (Os três primeiros passos não são de certeza úteis, mas eu os fiz e grave-os aqui)

  1. Exclua completamente todas as cópias do Xcode no seu sistema.
  2. Reinicie o seu computador.
  3. Reinstale apenas o Xcode6-beta.
  4. Verifique se você ainda tem o problema no playground e / ou projetos.
  5. Abra o iOS Simulator.
  6. Hardware -> Dispositivo -> Gerenciar Dispositivos
  7. Remova todos os dispositivos.
  8. Recrie todos os dispositivos que você deseja. Anexei a versão do iOS ao final do nome, apenas porque.
  9. Reinicie o Xcode e o simulador.
  10. Verifique se pelo menos os playgrounds não causam mais problemas quando alternados de OS Xpara iOS.
  11. Abra seu projeto e altere o destino de implantação do destino para algo <= 7.1.

Análise

Parece que o problema está no fato de o Xcode6 não conseguir encontrar e conectar-se adequadamente ao simulador. Não consegui determinar por que esse é o caso, mas isso me permitiu continuar desenvolvendo com o Swift. Isso pode ter a ver com o fato de os binários do simulador parecerem ter se movido .


2
Problema semelhante: "O tempo de execução do dispositivo selecionado não está instalado." erro ao executar o playground para o iPhonesimulator. Etapa 5. ~ 9. corrigiu o problema.
cevada

Como observação: o Xcode 6 Beta 3 resolveu completamente o problema para mim. Não sabe como ou por quê. Espero que o mesmo seja verdade para os outros.
Andrew Monshizadeh

2
Obrigado por estes passos. Ajustei meu destino de implantação de 7.0 para 7.1 e isso parece ter resolvido o problema no momento.
Nick

Definir o destino da implantação para 7.1 funcionou para mim, mas eu estou usando o destino da estrutura junto com o destino do aplicativo, portanto, essa causa da compilação falhou, o que é muito ruim. Mas não tenho mais nenhuma sugestão de código, mesmo a cor está de volta!
Solomon

1
Sigai todas essas etapas, mas não funcionou para mim. : - /
Rohit Goyal

32

Você só precisa excluir o "ModuleCache", esse é um tipo de cache usado pelo Xcode para preenchimento automático.

Copie e cole a seguinte linha no Terminal:

rm -rf ~ / Biblioteca / Desenvolvedor / Xcode / DerivedData / ModuleCache


1
Isso fez por mim. Por um tempo, só consegui destacar e completar automaticamente quando o dispositivo IOS foi selecionado no esquema ativo.
Wez

1
Isso funcionou para mim também. De acordo com as notas de lançamento aqui alguns dos isto é fixos no Xcode 6.1.1 semente GM
Jacob Harding

Infelizmente, anos depois, e o Xcode definitivamente não é fixo. Usar o Xcode 8.1 (8B62) e ainda obter o SourceKitServer trava toda vez que clico em um símbolo. Limpou os dados derivados, removeu o ModuleCache. Reinicie o Xcode. Xcode reinstalado. Xcode instalado em uma nova máquina. A mesma coisa acontece. Xcode é uma bagunça lamentável.
Womble 23/11

27

O SourceKitService falha no meu sistema assim que digito

extension foo {

Estou usando o Xcode 6 beta 6 e não importa se eu o digito em um arquivo vazio ou o adiciono a um existente. Assim que a fonte contiver um extensionbloco, ela travará. Isso acontece mesmo em projetos recém-criados.

Minha "solução" é evitar a extensão nas fontes em que estou trabalhando atualmente. Comento o final de um bloco de classes e o início do bloco de extensão. Assim que termino meu trabalho na classe, comento-os novamente:

class MyClass {

    [... my stuff ...]

//}
//
//extension MyClass {

}

Apenas uma observação - as extensões não fizeram isso no beta 5. É um novo "recurso" do beta6.
Gene De Lisa

Qualquer outra solução alternativa, porque há toneladas de extensões no meu projeto. Não é possível trabalhar com este Xcode agora.
precisa saber é o seguinte

Isso isso é muito isso. Eu descobri que é isso que está me mordendo nos meus projetos mais recentes. Arquivando um relatório de bug agora.
Ben Kreeger

2
Também é um grande problema para mim. Comecei apenas a mover as extensões para o próprio arquivo, escrevendo o código na classe e copiando-as para a extensão. Como isso se esgueirou é um pouco desconcertante.
Andrew Monshizadeh

9

Começou a acontecer no meu projeto de spritekit depois de inserir a função touchesMoved-. Esta função usa desembrulhar forçado, o que parece causar o problema:

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

Após remover os pontos de exclamação e interromper o desembrulhamento forçado, o SourceKitService parou de funcionar.

Espero que isto ajude!


Trabalhou para mim! Muito obrigado (espero que eles vão corrigi-lo!)
napolux

9

Encontrei uma solução nos Fóruns de desenvolvedores da Apple (que requer login, por isso também explicarei aqui).

TLDR : não importe um @protocolno cabeçalho de ponte Objective-C to Swift que seja o mesmo que um@interface . Por exemplo, o SDK do Facebook possui um protocolo e uma interface denominada "FBGraphObject".

Aqui está o post do fórum:

A adição do SDK do Facebook causa uma falha no SourceKitService. Se você deseja usar a versão beta 3 e precisa do SDK do Facebook, uma solução que encontrei e está funcionando para mim é refatorar o @protocol FBGraphObject do Facebook SDK e renomeá-lo para algo como @protocol FBGraphObjectProtocol como @protocol FBGraphObjectProtocol como @interface FBGraphObject também existe e aparentemente o SourceKit não gosta disso.

Com certeza, é uma solução temporária apenas para mantê-lo funcional e você precisará usar o Cocoapods ou criar o SDK do Facebook por conta própria, em vez de usar a biblioteca de estrutura.

Por enquanto, você precisará se certificar de que não possui declarações @protocol e @interface conflitantes e isso inclui bibliotecas de terceiros que você pode estar usando.

Isso me custou hoje, espero que ajude!


Publicado por e.parto em 10 de julho de 2014


Muito obrigado. Isso resolveu meu problema.
Viktor Radchenko

Esse bug pode surgir se você estiver usando o Pattern for Lightweight Immutability de Jon Sterling ( jonmsterling.com/posts/… ), uma vez que recomenda protocolos que compartilham um nome com sua implementação. Renomear os protocolos resolveu o problema para mim sem efeitos negativos.
Erikprice 19/07/2014

Isso foi resolvido para mim com o Facebook SDK3.17.1
KVISH

Isso consertou para mim! Obrigado, 👏🏻
Roman

8

Use outro nome que não seja Swift para o projeto. "Swift" está reservado.


10
Também recebo esse aviso, mas o nome do meu projeto não inclui a palavra Swift, portanto, essa não é a "solução", apenas a solução "talvez". E não, não descobri qual é o problema com o meu.
Andrew Monshizadeh 4/14

1
@AndrewMonshizadeh Mesmo problema, nenhuma referência ao Swift, mas mal consigo digitar um caractere ou dois antes de receber esse erro.
precisa saber é o seguinte

1
Uma investigação mais aprofundada levou-me a determinar que eu recebo o erro Terminado do SourceKitService quando tento usar o preenchimento de código em uma subclasse de UIView.
Andrew Monshizadeh

4
Esta não é a causa do problema. Não faço ideia por que isso foi votado.
Papai Noel

1
Não, tive esse problema ao usar o Xcode 6 beta 1 e alterar o projeto foi uma correção que funcionou para mim. Provavelmente existem vários bugs que acionam esse erro. Você provavelmente está usando uma versão mais recente do Xcode e eles provavelmente corrigiram esse bug.
Marius Fanu

8

Eu tive esse problema a cada poucos segundos no Xcode 6 Beta 3, e continuou mesmo em projetos completamente novos. Alterei o Deployment Target de 8.0 para 7.1 e ele parou.


5

Seu projeto é nomeado Swift? Ao ver essa mensagem, a construção também falharia ( <unknown>:0: error: module name "Swift" is reserved for the standard library). Tente usar outro nome de projeto, como SwiftTest. Funcionaria.


3

Para corrigir isso, você pode ter algum problema estranho com seu código Swift. Por exemplo, tendo várias definições de IBOutlets porque você estava no meio de copiar e colar. geralmente é apenas um erro de sintaxe que não pôde ser tratado.


2
Estou vendo esse problema com código não modificado de um modelo de projeto do Xcode, então não acho que seja um problema com o código Swift.
precisa saber é o seguinte

Isso pode ser causado por vários IBOutlets com o mesmo nome.
Tony

3

Eu descobri que, digitando explicitamente (estaticamente) os tipos de variáveis, em vez de deduzi-los, resolvi o problema para mim.


3

Saia do Xcode se estiver aberto. Em seguida, no Terminal, execute:

defaults delete com.apple.dt.Xcode

Isso restaurará o Xcode para as configurações padrão. Abra o Xcode e tudo deve funcionar novamente.


2

Para mim (xcode 6.1), o motivo foi que eu esqueci de adotar minha subclasse ao protocolo.

Por exemplo, isso está errado:

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

e está tudo bem:

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

Teve o mesmo problema com o protocolo esquecido. Obrigado pelo seu conselho. Parece versão do Xcode ainda funciona como beta =)
John Kakon

Obrigado! Eu tenho enlouquecido por isso. Sua solução corrigiu meu problema. Espero que isso será corrigido, parece estranho ter de adicionar protocolos em cada subclasse ..
Alvin

1

Um programa que consiste apenas dessas duas linhas (possivelmente erradas em termos de sintaxe Swift) é suficiente para causar o erro "SourceKitService Terminated" aqui:

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

Usar em letvez de varfaz com que o editor se comporte normalmente novamente. Xcode versão 6.0 (6A215l)


Eu geralmente suspeita que este erro surge quando Xcode não pode lidar com um certo erro de sintaxe - no código real ou enquanto faz a compilação (no exemplo de ter rápida no nome do projeto)
Lyndsey Scott

Estou dizendo que o bug provavelmente é causado por um erro de sintaxe e, como seu código tem um erro de sintaxe claro, está de acordo com a minha teoria.
Lyndsey Scott

"SourceKitService Terminated" como resposta a um erro de sintaxe não faz sentido. Este é o erro que eu estava apontando. Este é o bug em questão.
Alexander

Sim. Esse é o significado da palavra "bug". Este bug parece ser acionado por erros de sintaxe. Espero que a Apple conserte isso em breve.
Lyndsey Scott

1

Tenho o mesmo problema hoje, o problema era println: eu apenas tentei o antigo estilo NSLog para imprimir um valor:

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

A maneira como devemos compor as strings no swift evoluiu do estilo printf para o estilo embutido, então agora você incorpora seus valores diretamente na string de formato da seguinte maneira:

"Here goes \(YOUR_VARIABLE)"

Portanto, para o exemplo acima, a solução é:

println("value =\(valueObj)")

Hey, @ downwoter, o que há de errado com esta resposta? Parece bom para mim. Sei que ainda poderíamos usar o NSLog com o Swift, mas println é o caminho a seguir desde o Swift. E essa resposta está diretamente relacionada ao problema, a linha descrita trava o serviço SourceKit.
MANIAK_dobrii

Eu tive um problema semelhante com um println () estava tentando imprimir uma tupla sem nome
thisispete

1

Eu tive o mesmo problema com o Xcode6 beta 3 para um projeto criado na beta 2.

Foi por causa de novas mudanças na linguagem rápida, isto é, sintaxe de declaração de matriz.

Verifique o código efetuado devido a alterações na versão beta 3.

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

Um dos exemplos no meu caso foi:

Eu tive que mudar:

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

para

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

Conclusão: Parece que, se houver um erro no código fonte, em algumas condições esse erro é produzido pelo Xcode.

Solução até que o bug seja corrigido: verifique o erro manualmente :)

Boa sorte!


1

A solução para mim foi mudar o simulador. Eu estava usando o iPhone 5S no meu simulador e quando mudei para o iPhone 5, tudo funcionou perfeitamente. Espero que uma versão futura o conserte completamente.


Eu descobri que o simulador de iPhone 5 é sempre a melhor escolha, todos os outros acidentes de um
Daniel Galasko

@DanielGalasko Interesting. Eu costumo usar o iPhone 5S, é muito estável para mim.
Fomentia

se você estiver usando o Xcode 6.1, em seguida, este tem sido dirigida a minha compreensão :)
Daniel Galasko

Eu retirar minha declaração sua ainda quebrado eo 5 é definitivamente o simulador trabalhando apenas
Daniel Galasko

1

Descobri que a remoção de dados derivados do terminal resolve o problema até a próxima falha. : S

Está localizado em: / Usuários / {Nome do usuário} / Biblioteca / Desenvolvedor / Xcode / DerivedData / {Nome do projeto} - {Sequência de caracteres aleatórios}

Eu espero que isso ajude.


1

Eu acho que descobri um (como provavelmente há muitos) dos motivos pelos quais isso ocorre.

No meu caso, eu estava importando arquivos Objective-C por meio do Bridging Header que tinha uma das seguintes verdadeiras:

  1. O arquivo de implementação (.m) da importação de Objective-C não tinha o destino do aplicativo definido corretamente.
  2. O arquivo Objective-C tinha apenas um arquivo de cabeçalho (.h) e NÃO um arquivo de implementação (.m). (Mais uma vez, acho que isso faz parte do conjunto "sem destino de aplicativo adequado", pois você só pode definir destinos nos arquivos .m e não nos arquivos .h)

Corrigir os destinos do aplicativo nos arquivos Objective-C OU remover a importação desses arquivos no cabeçalho de ponte todos juntos parece corrigir o problema.

FYI - Se você precisar definir o destino dos arquivos de cabeçalho (.h) que não possuem arquivo de implementação (.m), siga estas etapas simples: Não é possível alterar a visibilidade da associação de destino no Xcode 4.5


1

Apenas para adicionar mais uma solução em potencial aqui, eu acidentalmente nomeei uma classe var com o mesmo nome do tipo:

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

Isso irá travar o SourceKit DE CERTEZA. Erro de sintaxe estúpido, mas no caso de mais alguém cometer o mesmo erro.

Edit: também de acordo com o @Portland Runner:

Da mesma forma, se você definir o tipo de retorno como o nome da função, receberá o erro.

func foo() ->foo{}

1
Da mesma forma, se você definir o tipo de retorno como o nome da função, receberá o erro. func foo() ->foo{} (sinta-se livre para adicioná-lo em sua resposta)
Portland Runner

0

Quando esse erro começar a aparecer, apenas comente o último / código recente que você escreveu e aguarde um pouco. O realce da sintaxe deve reaparecer. É assim que eu trabalho em torno do problema.

    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)
    }

O sistema se reinicia independentemente de qualquer coisa que você faça. Você não precisa comentar a linha, ela ainda começará a funcionar novamente em breve. E bater também, é claro.
Maury Markowitz

0

Relatado à Apple (# 17266321):

Detalhes:

Resumo: Se tentarmos imprimir um dicionário com valor como uma matriz, um pop-up continuará sendo exibido dizendo: "SourceKit finalizado. Funcionalidade do editor temporalmente limitada". Xcode Congela e perde o reconhecimento de contexto, causando o escurecimento do texto.

Etapas para reproduzir: 1. Crie uma matriz como - "var iOSHistoryArray = [" iOS6 "," iOS7 "," iOS8 ",]"

  1. Crie um dicionário como - "var MacOSYosemiteFeatures: Dictionary = [" Device ": iOSHistoryArray]".

  2. Imprima o dicionário como - "println (" Dicionário que contém o valor da matriz:% @ \ n ", MacOSYosemiteFeatures)" (<< - Culprit - >>)

  3. A etapa 3 faz com que o problema seja comentado, o que torna o Xcode funcional novamente.

Resultados esperados: O Xcode deve funcionar normalmente.

Resultados reais: o Xcode fica inoperante, perde o reconhecimento de contexto (toda a fonte é perdida e todo o texto fica em preto puro), todo o Xcode fica inativo.

Versão: Versão 6.0 (6A215l)


0

Tente:

Há um erro no compilador / indexador Swift. Algumas linhas do seu código estão dificultando. Você terá que editar seu código com algum outro editor de texto para comentar as linhas ofensivas antes de poder abrir esse projeto com o Xcode. Se você não tem idéia do problema, comente todo o seu código. Depois que o projeto estiver aberto, você poderá começar a recuperar o código pouco a pouco até que o aumento da atividade da CPU indique que você encontrou o problema.


@Pang se respostas são corretamente válido e o mesmo, em seguida, as perguntas são provavelmente duplica então você deve votar ou bandeira para fechá-las - Neste caso, este é definitivamente o aberto para manter
mmmmmm

0

Problema:

  • Se houver um erro no código-fonte, o pop-up "SourceKitService Terminated" pode aparecer e o realce do código para de funcionar. Pode ou não acontecer, quando o faz sob várias condições diferentes.

Meu caso: Instalado o beta 3, projeto apenas do OSX, um arquivo detectou o erro "o operador de intervalo semi-fechado foi alterado de .. para .. <". O pop-up começa a aparecer e o realce do código começa a falhar.

Solução:

  • Corrigir erro detectado pelo Xcode
  • Mude para um .swift diferente no Navigator, volte ao original
  • O realce da sintaxe reaparece e o pop-up "SourceKitService Terminated" desapareceu


0

No meu caso, eu havia importado arquivos ausentes no cabeçalho em ponte. Depois de excluir as importações erradas, a notificação de erro desapareceu.


0

Eu tive o mesmo erro com o projeto Objective-C ++ aninhado que agora inclui Framework com código Swift. Para corrigir esse problema, tive que construir explicitamente a estrutura. Uma vez que eu fiz esse problema se foi, e não volta;)


0

Ainda acontecendo com o xcode 6 Versão 6.0 (6A313)

  • Crie um novo projeto
  • Adicionar uma estrutura e biblioteca
  • Selecionar estrutura de toque de cacau
  • Adicionar um arquivo Swift
  • Adicionar uma classe ao arquivo swift

Crashes

ps: novo mac mini, sem instalação anterior do xcode, nada de exótico. Apenas um produto beta, suponho.


0

Xcode 6.1 Beta 3:

Assim que você definir um alias de tipo não particular (por exemplo typealias Foo = Int) em um arquivo Swift, digite a letra cem outro arquivo, o SourceKitService trava.

A solução é renunciar ao uso de aliases de tipo, aguardar a próxima versão beta ou agrupar seus aliases de tipo nas definições de classe:

public class DummyClass {
    public typealias Foo = String
}

e use-o assim:

var myVar:DummyClass.Foo?

0

Alterar o destino de implantação para o iOS 8.0 funcionou para mim. Eu sei que alguém disse que movê-lo para <= 7,1 funcionou, mas esse problema parece vir de várias fontes, portanto essa alternativa pode funcionar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.