Este NÃO é um problema Beta. Estou no Xcode 6.0.1, versão de produção. O problema que estou tendo é que quando tento fazer um Build ou Run o código em que estou trabalhando, o Xcode deixa de responder por longos períodos de tempo e o SourceKitService consome mais de 400% da CPU (de acordo com o Activity Monitor). Esse problema é novo nos últimos dias, embora, estranhamente, eu estivesse no Xcode 6.0 desde que foi oficialmente lançado em 17 de setembro. Eu atualizei para 6.0.1 esperando que contivesse uma correção para esse problema.
Alguma ideia de qual poderia ser o problema?
Respostas:
Tive esse problema com o Xcode 6.1.1 no início desta tarde (não beta, versão oficial lançada). Eu estava executando alguns códigos no Playground e suspeitava que essa fosse a causa. A CPU foi fixada em quase 100% e o Xcode não conseguiu completar as compilações.
Então aqui está o que eu fiz:
1. Abriu o "Monitor de atividade", que mostrou SourceKitService como o principal devorador de CPU.
2. Em "Activity Monitor", clique duas vezes em SourceKitService e clique na seção "Open Files and Ports", que mostra que está trabalhando em arquivos no diretório / Users / myname / Library / Developer / Xcode / DerivedData / ModuleCache / para uma pasta específica.
3. Excluída a pasta especificada (de uma linha de comando, usando rm -rf). O cache é gerado novamente com base em Posso excluir com segurança o conteúdo da pasta de dados derivados do Xcode? .
4. Usando o Activity Monitor novamente, Force-Quit SourceKitServer. Vi o sinal agora muito familiar no Xcode dizendo que SourceKitService havia travado (então é por isso que SourceKitService parecia familiar!).
5. Etapa 3 repetida.
O Mac está em paz, novamente. Nenhum dado foi perdido e o Xcode nem mesmo teve que ser reiniciado (o que eu tentei sem sucesso). O ponto principal é que ModuleCache parece estar colocando SourceKitService em um loop e excluir a pasta parece consertar isso. Espero que isto funcione para você também.
Nota de inicialização:
A propósito, a causa do problema de SourceKitService era que eu tinha uma declaração de array muito longa em minha classe Swift. Eu tinha mais de 200 entradas em uma matriz. Reduziu para 30 e o erro foi embora. Portanto, o problema pode ter surgido devido a algum tipo de estouro de pilha no código da Apple (trocadilho intencional).
fonte
Eu estava vendo o problema porque estava declarando uma matriz com cerca de 60 elementos que se pareciam com isto:
Anotando explicitamente o tipo como este:
Eu fui capaz de fazer isso parar. Acho que deve ter algo a ver com a inferência de tipo e verificação de tipo do Swift que o faz entrar em um loop quando encontra um array longo.
Isso estava no Xcode 6.2. Eu também deletei o ModuleCache conforme descrito acima e agora está tudo bem.
fonte
return ["a", "b", "c", "d", "e", "f"]
em uma função que retorna[String]
que ainda teria problemas com a inferência de tipo?Esse problema aconteceu umas 10, 8 vezes quando conectei um dispositivo real e não executei o simulador.
Não tenho certeza se minha solução é boa, mas para mim acredito que o problema foi devido à troca entre o simulador e um dispositivo real. Pode parecer estranho, mas era como se estivesse criando interferência entre os arquivos de cache .
O que resolveu meu problema:
Alt + Shift + Command + K
Command + Shift + K
.Portanto, basicamente, antes de tentar executar em qualquer novo dispositivo, basta excluir qualquer cache.
EDITAR
Acabei de ter o problema sem qualquer conexão de dispositivo. Acabei de sair do Xcode, abri-o novamente e o problema desapareceu. Não tenho certeza, meu palpite é que pode haver algum problema de reindexação depois de buscar / puxar mesclar novo código.
fonte
Resolvi outro problema que fazia com que SourceKitService usasse até 13 GB de memória ...
Eu tinha String (linha de formato com muitos argumentos:
quando substituído por este funcionou bem (sem acumulação de memória e consumo normal de CPU)
fonte
Tenho encontrado esse problema com o Xcode 9 e explorei várias soluções. Para mim, desabilitar o controle de origem parecia funcionar.
Xcode -> Preferences -> Source Control -> uncheck "Enable Source Control"
Se isso não funcionar, eu recomendaria usar o comando renice no terminal . Mais sobre isso aqui
desabilitando o controle de fonte
Outras etapas que tentei, mas não ajudaram:
fonte
Para mim, funcionou para excluir os Dados Derivados. Selecione 'Produto' no menu e segure a tecla Alt e selecione 'Limpar pasta de compilação'. Atalho: Alt + Shift + Command + K
fonte
rm -rf ~/Library/Developer/Xcode/DerivedData/ModuleCache/*
Observe a diferença entre a resposta aceita de LNI e esta:
fonte
Eu gasto 4 horas para descobrir problemas em uma longa compilação do meu projeto. A primeira tentativa leva 42 minutos para compilar.
/Users/myname/Library/Developer/Xcode/DerivedData/ModuleCache/
Limpo todo o cache conforme sugerido por @LNI, após reiniciarSourceKitService
e aplico algumas alterações no código:1) Para
De
2) Para
De
3)
Para
De
Como resultado, o tempo de compilação - 3 min, não tão rápido, mas melhor por 42 min.
Como resultado, antes
SourceKitService
- leva ~ 5,2 Gb de memória e depois de ~ 0,37 Gbfonte
Eu tive o mesmo problema com SourceKitService.
Eu resolvi. NUNCA ADICIONE ENVIOS AO FOR LOOP.
Para detectar o problema, eu uso: https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode
fonte
Não crie dicionário rapidamente sem especificar os tipos de dados ou com [String: Any]
Se usarmos o tipo 'Qualquer', o compilador pode executar um loop infinito para verificar o tipo de dados.
Não criará nenhum erro de compilação, fará com que nosso mac congele na 'compilação de arquivos de origem swift' com a aquisição de muita memória para as tarefas chamadas 'swift' e 'SourceKitService'.
fonte
Eu enfrentei esse problema. O serviço do kit de origem estava usando 10 gb de uso. O processo rápido no monitor de atividade atinge mais de 6 GB de uso. Eu estava usando o seguinte código:
var details: [String: Any] = ["1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9, "10": 10, "11": 11, "12": 12, "13": 13, "14": 14, "15": 15, "16": 16]
Mudei o código a seguir para resolver esse problema:
detalhes da var: [String: Qualquer] = [:]
detalhes ["1"] = 1
detalhes ["2"] = 2
detalhes ["3"] = 3
detalhes ["4"] = 4
detalhes ["5"] = 5
detalhes ["6"] = 6
detalhes ["7"] = 7
detalhes ["8"] = 8
detalhes ["9"] = 9
detalhes ["10"] = 10
detalhes ["11"] = 11
detalhes ["12"] = 12
detalhes ["13"] = 13
detalhes ["14"] = 14
detalhes ["15"] = 15
detalhes ["16"] = 16
fonte
O problema ainda ocorre no XCode 10.0. Você pode corrigi-lo desativando "Mostrar alterações de controle de origem" nas opções de controle de origem.
fonte
Enfrentou o mesmo problema em
Xcode 7.2 (7C68)
A solução foi implementar um método de protocolo, que minha classe tinha na definição.
fonte
Este ainda é um problema no xcode versão 7.3.1 (7D1014) a causa para mim era, como LNI apontou, um array muito longo, não tão longo na verdade. Corrigi meu problema dividindo a matriz em várias matrizes como esta:
fonte
Tive o mesmo problema com o XCode 8.2.1 (8C1002) e o seguinte código:
e essas extensões:
Eu resolvi isso comentando esta linha no TestViewController:
Levei mais de uma hora para encontrá-lo, espero que possa economizar algum tempo de outra pessoa. Eu preenchi um relatório de bug para a Apple com o número 30103533
fonte
Eu estava enfrentando o mesmo problema depois de migrar o projeto para o swift 3, descobrir a solução que estava demorando por causa dos dicionários e array criados sem tipo de dados.
fonte
Esse comportamento apareceu em meu projeto quando eu acidentalmente declarei uma classe que herdou de si mesma. Xcode 8.2.1, usando Swift 3.
fonte
Eu também tive esse problema, no meu caso, eu estava declarando uma grande matriz como esta:
Resolvi o problema adicionando os itens 1 por linha em vez de todos ao mesmo tempo:
isso resolveu o problema.
fonte
Para projetos Objective-C:
Eu tive o mesmo problema e não há código Swift em nosso projeto, então não era o verificador de inferência de tipo.
Tentei todas as outras soluções aqui e nada funcionou - o que FINALMENTE consertou para mim foi reiniciar o computador em modo de recuperação e executar o reparo do disco. Posso finalmente trabalhar em paz de novo!
Eu estou supondo que isso aconteceu por causa de alguns links simbólicos quebrados, provavelmente apontando um para o outro e fazendo o serviço funcionar em um loop infinito.
fonte
Estou tendo um problema semelhante com o Xcode 8.2.1 - com uma seção de mais de 1.000 linhas de código comentadas via / * * /. Comentar a seção causava o problema e a remoção do código comentado corrigiu o problema.
fonte
Corri para algo semelhante combinando vários ?? operadores para fornecer um padrão para valores de string opcionais.
Eu estava testando o código de depuração abaixo quando o ventilador do meu confiável MacBook Pro de meados de 2010 começou a funcionar com força. SourceKitService estava sugando cada ciclo de CPU que podia obter. Comentar e descomentar a linha ofensiva deixou muito claro o que SourceKitService estava sufocando. Parece que está usando mais de um ?? operador fornecer um padrão é um problema em uma máquina antiga. A solução é simplesmente não fazer isso. Divida-o em várias atribuições, o que torna alguns códigos de depuração feios ainda mais feios.
placeMark é uma instância de CLPlacemark. As propriedades usadas aqui retornam strings opcionais.
Eu estava usando o Xcode versão 8.3.2 (8E2002) em execução no OS 10.12.4 (16E195)
fonte
"\() \()"
(interpolação de string)A conversão de matrizes longas em funções parece resolver o problema para mim:
para:
fonte
executado no terminal:
você também pode criar um comando de terminal usando este alias:
e então apenas corra
fonte
https://www.logcg.com/en/archives/2209.html
SourceKitService se encarregou do trabalho de inferência de tipo de Swift.
mude para digitar explicitamente
O uso da CPU do SourceKitService cai imediatamente。
fonte
Aconteceu comigo no XCode 11.4.1 ao chamar os subscritos @dynamicMemberLookup dentro de um bloco SwiftUI @ViewBuilder.
fonte
Eu tive o mesmo problema e foi causado por um erro de programação.
No meu caso, eu estava implementando os protocolos comparáveis e equacionáveis e lhs.param e rhs.param não correspondiam aos parâmetros das classes lhs e rhs.
fonte