Xcode 8 recompilar o código completo toda vez


131

Com qualquer alteração no código (embora o arquivo não esteja em .pch), o projeto completo é recompilado toda vez.


31
Por que isso é prejudicado ?! Esta é uma questão legítima. Leva 4 minutos para compilar todas as vezes, diminui a produtividade de toda a equipe.
Josh

1
Eu também entendo esse problema.
AJ9 22/09/16

3
Você está modificando o xib / storyboards com algumas coisas do IBDesignable?
Larme

1
Tópico relacionado no fórum da apple: forums.developer.apple.com/thread/62737 . Nenhuma solução alternativa ainda.
Ldiqual

1
Certifique-se de abrir um relatório de bug, conforme sugerido no fórum da Apple.
Leo Natan

Respostas:


34

Atualização 2017/1/2

Este problema não foi resolvido no Xcode 8.2.1 (para o meu projeto)

Como sobreviver?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

Atualização 17/12/2016

Este problema não foi resolvido no Xcode 8.2.

Atualização 12/12/2016

Atom para codificar e linha de comando para criar e depurar é a minha escolha agora. Espero que a Apple corrija esse bug legítimo em breve.

Atualização 2016/12/04

Este problema parece resolvido com o Xcode 8.2 (beta 2) .

Mas para mim não está resolvido, eu enfrento esse problema mesmo quando uso o Xcode 8.2. Você pode experimentá-lo (faça o download do Xcode8.2 beta2 aqui )

Sistema de Compilação • O Xcode não reconstruirá um destino inteiro quando ocorrerem apenas pequenas alterações. (28892475)


Resposta antiga: Esta é uma solução alternativa:

insira a descrição da imagem aqui Guia "Build Setting" -> "C Language Dialect" -> Altere para "Compiler Default".

Para referência :

O "C Language Dialect" foi definido como "GNU99" em vez de "Compiler Default". Anteriormente, o padrão era GNU99, mas agora não é. Em algum momento, o Xcode não migrou as configurações do projeto da biblioteca corretamente e, portanto, foi definido como GNU99. Depois que mudei para GNU99, ele parou de recompilar todo o meu código todas as vezes!


1
Por enquanto, tudo bem!!! Dê-me uma hora e a recompensa é sua, se continuar.
Adam Waite

7
Argh está de volta a recompilar tudo #
Adam Waite

1
Eu tenho o mesmo comportamento. Se eu limpar os dados derivados (ou alterar o dialeto do idioma C), eles funcionarão por cerca de 10 compilações. Depois disso, ele volta a reconstruir tudo.
bluebamboo

1
O Xcode 8.2 (beta 2) funciona para 10 compilações e depois reconstrói tudo do zero, mas ainda melhor que o anterior.
Markus

3
Infelizmente, o problema persiste no Xcode 8.3 beta 2 (pelo menos para nós). Nenhuma melhoria notável pode ser medida em nosso projeto.
Kasper Munck

20

Vá para Produto -> Esquema -> Editar esquema. Selecione Criar na coluna do lado esquerdo e desmarque " Localizar dependências implícitas "

Mas esse sinalizador deve permanecer marcado quando você estiver criando o projeto pela primeira vez.


@ Josh, você está usando vários projetos dentro do seu projeto (por exemplo, subprojeto ou incluído). E você tem certeza, olhando para o resultado da sua compilação, que está realmente reconstruindo tudo?
Mobile Ben

3
É um espaço de trabalho básico com cocoapods e o projeto principal. O CocoaPods permanece construído, mas o projeto principal reconstrói todos os arquivos; assistindo a saída da compilação e sua definitivamente mais de 100 arquivos reconstruídos.
Josh

1
Atualização: parece que esta solução funciona para algumas compilações depois de fazer isso, no entanto, o mesmo ocorre com a limpeza de todo o projeto e a reconstrução. Pela 2-8ª vez, no entanto, a reconstrução começa a recompilar tudo novamente. Alguma ideia? Além de frustrante.
Josh

Isso não funciona, pelo menos não com um espaço de trabalho do CocoaPods. Tudo constrói, sempre. Super irritante, especialmente desde que a Apple teve anos para corrigir esse problema.
Womble

7

A correção para mim era apenas fechar o storyboard, eu tinha o arquivo de origem aberto com o editor assistido e o arquivo do storyboard também (fechar o storyboard - já que eu não estava fazendo nenhuma alteração) removi toda a compilação desnecessária


1
Ha pode ser tão fácil :)
manmal

5

ATUALIZADA

A maior melhoria que consegui fazer foi modularizar meu projeto. Modularizando especificamente a camada ORM, usada em quase todas as outras classes. Ao mover esse código para um destino separado dentro do meu projeto e importá-lo como um módulo, fui capaz de melhorar bastante os tempos de compilação. O Xcode não decide mais recompilar arquivos desnecessários quando eu faço uma compilação.

Agora eu uso o método de compilação de arquivo único para compilações de depuração incremental rápidas.

Existem outras boas sugestões neste link, incluindo refatoração de código, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

VELHO

Ainda tem sido um problema constante para mim com o Xcode 9. Como muitos de vocês, estou trabalhando em um grande projeto rápido 4 / cocoapods com muitos arquivos de origem e recompilando cada arquivo sempre que é irritante.

Até agora, estou obtendo os melhores resultados com as seguintes configurações. Eu sugiro que você experimente e veja como funciona para você.

  • Esquema -> Compilar -> "Localizar dependências implícitas" = VERDADEIRO
  • Configurações de compilação -> Otimização do tempo do link = Incremental
  • Configurações de compilação -> Nível de otimização (depuração) = Nenhum [-OO]
  • Configurações de compilação -> Nível de otimização (versão) = Mais rápido, menor [-Os]
  • Configurações de compilação -> Aumentar o compartilhamento de cabeçalhos pré-compilados = SIM
  • Configurações de compilação -> Ativar destilação incremental = SIM

Adicionadas configurações de compilação definidas pelo usuário,

  • Configurações de compilação -> HEADERMAP_USERS_VFS = YES

Nota: Não tenho a configuração personalizada definida pelo usuário para a otimização do módulo inteiro.


3

Alterei algumas coisas com o meu código em relação ao cabeçalho do prefixo que parece ter corrigido esse problema. Não sei qual deles realmente fez o truque, mas vou compartilhá-los todos na esperança de que ajude alguém por aí. Se você não tiver um cabeçalho de prefixo definido, acho que esse não é o problema (ou o problema é multifacetado).

  1. Remova todas as importações do cabeçalho do prefixo que são arquivos do diretório de produtos criados para poder alterar a configuração de compilação para isso ("Cabeçalho pré-compilado usa arquivos do diretório de compilação") para "Não". Certifique-se de que não seja importado indiretamente também por meio de outras importações.
  2. Remova todas as importações do cabeçalho do prefixo que usam os módulos Clang (bibliotecas ou estruturas que possuem um arquivo module.modulemap em seu diretório Headers, para que você possa escrever códigos como @import MyModule). (Para mim, este e o passo 1 eram o mesmo.)
  3. Defina a configuração de compilação para o compartilhamento de cabeçalho de prefixo como "Sim". (Acho que isso não é necessário e não deve ter nenhum efeito no meu próprio projeto. Estou apenas afirmando isso porque mudei porque estava disposto a tentar qualquer coisa. :))
  4. Saia do Xcode e exclua o diretório DerivedData / ModuleCache (configurado para estar em ~ / Library / Developer, se bem me lembro).

Se isso ainda não funcionar, tente remover mais algumas importações do cabeçalho do prefixo. Pode haver algo que tropeça ...


3

Parece que eles estão trabalhando ativamente nele de acordo com https://forums.developer.apple.com/thread/62737, mas uma solução alternativa é adicionar

HEADERMAP_USES_VFS = YES

nas configurações de compilação do seu destino (Projeto -> Destino -> Configurações de compilação -> Definido pelo usuário).

Hoje, essa solução funcionou todas as vezes para mim hoje, depois que nenhuma outra solução funcionou de forma consistente no mês passado.

EDIT: Às vezes ainda recompilar tudo, embora pareça fazê-lo com muito menos frequência com essa configuração definida.


Também adicionei esse valor, o tempo de compilação é mais rápido, mas não resolveu a compilação incremental. Eu mudei o Swift Compiler - Geração de código / Debug para Rápida, Whole Módulo Otimização ... é o melhor resultado até agora
Antonio Júnior

eu não posso mesmo encontrar Definido pelo usuário)
David Procure

2
@DavidSeek está na parte inferior das configurações de compilação
Laser Hawk


3

Confira todo o seu código de @IBDesignablediretrizes no meu caso particular, o Xcode build project o tempo todo, porque eu tinha algumas visualizações no meu storyboard que continham esses @IBDesignableatributos. A segunda coisa é que eu também tenho o meu storyboard aberto em uma janela separada (não na guia) que é empurrada pelo meu Xcode para criar compilações para todos os simuladores para sempre.


Usamos várias @IBDesignablediretivas ... há algo em particular que devemos procurar?
Stan

Eu acho que é possível encontrá-los excluindo um por um e verificar o resultado; no meu caso, foram apenas duas das diretivas @IBDesignable em todo o projeto.
Ua24

2

Madhuri Mane está totalmente certa sobre isso. Para adicionar um pouco mais de clareza, alguns pontos importantes a serem observados:

Isso é APENAS aplicável se você tiver dependências implícitas de bibliotecas / estruturas nas quais seu destino depende.

Se "Localizar dependências implícitas" estiver desativado:

Resultado: a biblioteca não será criada antes da criação do destino do aplicativo. O destino do aplicativo falha ao criar.

Correção: para garantir que o segundo cenário não aconteça, você deve adicionar os destinos necessários à lista de destinos e ordená-los corretamente.

Fonte e leituras adicionais sobre o tópico: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Agora, se todo o seu projeto estiver alojado dentro de um destino e levar 4 minutos para compilar, não há muito o que fazer sobre isso, exceto dividi-lo em estruturas para tirar proveito do exposto acima ou descobrir onde a compilação fica atrasada. Se você estiver usando algo como o PaintCode ou tiver grandes partes do código do UIKit rapidamente, altere-o para Objective-c, ele será compilado muito mais rapidamente


2

Vá para as configurações de compilação do seu destino e defina Defines Modulecomo Yes.

Trabalhou para mim em algumas versões, muito cedo para afirmar que essa é uma solução definitiva, mas pelo menos estamos tentando.


2

Apple lançou nova versão beta do Xcode ontem (14 de novembro)

Xcode 8.2 beta 2

E esse problema foi marcado como resolvido na nota de lançamento.

Sistema de Compilação

• O Xcode não reconstruirá um destino inteiro quando apenas pequenas alterações ocorrerem. (28892475)

Está funcionando para mim. A velocidade de construção voltou como de costume. Todo mundo que está enfrentando esse problema deve experimentá-lo!

https://developer.apple.com/download/


2

Por favor, vá para a configuração de construção do projeto e altere o "C Language Dialect".

O "C Language Dialect" é definido como "GNU99" em vez de "Compiler Default" quando você atualiza a versão do xcode. Em algum momento, o Xcode não migrou as configurações do projeto da biblioteca corretamente e, portanto, foi definido como GNU99. Isto resolverá o problema


1

Se você tiver feito alterações no arquivo Swift, comece a criar o aplicativo, vá para a última guia e clique no log de compilação, durante o estágio "Verificar dependências", pare a compilação e execute-a novamente. Na segunda execução, ele deve criar apenas os arquivos que você modificou. Se feito corretamente, achei que funciona sempre. Não há necessidade de fazer alterações nas configurações do projeto.

Parece ser um bug no Xcode.

insira a descrição da imagem aqui

Se você vir o aplicativo fazendo uma compilação completa, pare a compilação e tente esse truque novamente.

Se você não fez alterações no código, use CMD + CTRL + R para executar sem criar o aplicativo que anexa o depurador. Não cria aplicativo, mas pode ajudar a economizar tempo desnecessário.


Isso realmente funciona, mas às vezes o XCode falhará com o código 1 e você precisará fazer uma compilação limpa. É um pesadelo
Antonio Junior

Existem outros cenários em que o Xcode sempre faz a compilação completa. Descobri que se você modificar o arquivo .h incluído no cabeçalho da ponte, ele reconstruirá todos os arquivos Swift. Pode haver outros cenários não relacionados ao bug do Xcode.
Vlad

Existem cenários em que a única alteração é uma renomeação de função ou uma nova propriedade adicionada a uma classe / estrutura existente que resulta em uma reconstrução inteira.
Antonio Junior

Consulte esta pergunta / resposta, esta discussão é duplicado deste: Tem solução que funciona melhor: stackoverflow.com/questions/39456223/...
Vlad

1

Foi corrigido um problema do meu lado aplicando a desmarcação na solução "Localizar dependências implícitas".

MAS lembre-se, se você estiver usando cocoapods, aplique essas configurações também ao seu projeto de pod selecionando-o

Produto -> Esquema -> Pods - "yourProjectName"

também se aplica em:

Produto -> Esquema -> "yourProjectName"

Isso me ajuda, então espero que essa dica ajude outra pessoa.

obrigado


1

Tente: 1. Navegue para o projeto 2. Clique em Configurações de compilação 3. Verifique se OptimizationLevel está definido como Nenhum para depuração. 4. Clique em Adicionar configuração definida pelo usuário. 5. Defina SWIFT_WHOLE_MODULE_OPTIMIZATION como YES.

insira a descrição da imagem aqui


nada para trabalhar ainda compila quando escrevo uma única carta.
30518 Chandni

-2

para garantir o tempo de compilação do xcode, pode usar o IRAMDISK (disco de memória virtual). Meios muito úteis e eficazes para reduzir o tempo de compilação.

Também pode ser usado para acelerar aplicativos usados ​​com frequência.

consulte o link a seguir para baixar e usar: http://iramdisk.findmysoft.com/mac/


Isso não acelerará a compilação se você já tiver um disco SSD.
Jano
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.