Xcode 8 ricompilando il codice completo ogni volta


131

Con qualsiasi modifica del codice (sebbene il file non sia in .pch), ogni volta completa la compilazione del progetto.


31
Perché questo è downvoted ?! Questo è un problema legittimo. Ci vogliono 4 minuti per compilare ogni volta, compromesso tutta la produttività del team.
Josh,

1
Anch'io ho questo problema.
AJ9,

3
Stai modificando xib / storyboard con alcune cose IBDesignable?
Larme,

1
Discussione del forum Apple correlata: forum.developer.apple.com/thread/62737 . Nessuna soluzione ancora.
ldiqual,

1
Assicurati di aprire una segnalazione di bug, come suggerito nel forum Apple.
Leo Natan,

Risposte:


34

Aggiornamento 2017/1/2

Questo problema non è stato risolto in Xcode 8.2.1 (per il mio progetto)

Come sopravvivere?

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

Aggiornamento 2016/12/17

Questo problema non è stato risolto su Xcode 8.2.

Aggiornamento del 12/12/2016

Atom su codice e riga di comando per compilare ed eseguire il debug è la mia scelta ora. Spero che Apple risolva presto questo bug legittimo.

Aggiornamento 2016/12/04

Questo problema sembra risolto con Xcode 8.2 (beta 2) .

Ma per me non può essere risolto, devo affrontare questo problema anche quando uso Xcode 8.2. Puoi provarlo (scarica Xcode8.2 beta2 qui )

Sistema di compilazione • Xcode non ricostruirà un intero target quando si sono verificate solo piccole modifiche. (28892475)


Vecchia risposta: questa è una soluzione:

inserisci qui la descrizione dell'immagine Scheda "Build Build" -> "C Language Dialect" -> Modificalo in "Compiler Default".

Per riferimento :

"Dialetto in linguaggio C" è stato impostato su "GNU99" anziché "Predefinito del compilatore". In precedenza lo standard era GNU99 ma ora non lo è. A un certo punto Xcode non ha migrato correttamente le impostazioni del progetto della libreria e quindi è stato impostato su GNU99. Una volta cambiato in GNU99, ha smesso di ricompilare tutto il mio codice ogni volta!


1
Fin qui tutto bene!!! Dammi un'ora e la generosità è tua se continua.
Adam Waite,

7
Argh è tornato a ricompilare tutto
Adam Waite,

1
Ho lo stesso comportamento. Se cancello i dati derivati ​​(o cambio il dialetto del linguaggio C) funzionerà per circa 10 build. Successivamente ricade per ricostruire tutto.
Bluebamboo,

1
Xcode 8.2 (beta 2) funziona per 10 build, quindi ricostruisce tutto da zero, ma è ancora meglio di quello precedente.
Markus,

3
Sfortunatamente il problema persiste in Xcode 8.3 beta 2 (almeno per noi). Nessun miglioramento evidente può essere misurato nel nostro progetto.
Kasper Munck,

20

Vai a Prodotto -> Schema -> Modifica schema. Seleziona Crea nella colonna di sinistra e deseleziona " Trova dipendenze implicite "

Ma questo flag dovrebbe rimanere controllato quando si crea il progetto per la prima volta.


@Josh, stai usando più progetti all'interno del tuo progetto (es. Sottoprogetto o incluso). E sei sicuro guardando il tuo output di build che sta veramente ricostruendo tutto?
Mobile Ben

3
È uno spazio di lavoro di base con cocoapodi e il progetto principale. CocoaPods rimane compilato, ma il progetto principale ricostruisce ogni file; guardando l'output di compilazione e la ricostruzione di tutti i suoi oltre 100 file.
Josh,

1
Aggiornamento: sembra che questa soluzione funzioni per alcune build dopo averlo fatto, tuttavia lo fa anche la pulizia dell'intero progetto e la ricostruzione. Dalla 2-8a volta, tuttavia, la ricostruzione inizia a ricompilare di nuovo tutto. Qualche idea? Oltre frustrante.
Josh,

Questo non funziona, almeno non con un'area di lavoro CocoaPods. Tutto costruisce, ogni volta. Super fastidioso, soprattutto da quando Apple ha avuto anni per risolvere questo problema.
Womble,

7

La correzione per me consisteva nel chiudere lo storyboard, avevo aperto il file sorgente con l'editor assistito e anche il file dello storyboard (chiudendo lo storyboard --- poiché non avevo apportato alcuna modifica ad esso) rimosso tutta la compilazione non necessaria


1
Ah, può essere così facile :)
Manmal

5

AGGIORNATO

Il singolo più grande miglioramento che sono riuscito a fare è stato la modularizzazione del mio progetto. Specificamente modularizzare il livello ORM che viene utilizzato in quasi tutte le altre classi. Spostando quel codice in una destinazione separata all'interno del mio progetto e importandolo come modulo sono stato in grado di migliorare notevolmente i tempi di compilazione. Xcode non decide più di ricompilare i file non necessari quando eseguo una build.

Ora uso il metodo di compilazione a file singolo per build di debug incrementali veloci.

Ci sono altri buoni suggerimenti in questo link tra cui refactoring del codice, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

VECCHIO

Per me è stato ancora un problema costante con Xcode 9. Come molti di voi, sto lavorando a un grande progetto rapido 4 / cocoapods con molti file sorgente e ricompilando ogni file ogni volta che è esasperante.

Finora sto ottenendo i migliori risultati con le seguenti impostazioni. Ti suggerisco di provare e vedere come funziona per te.

  • Schema -> Build -> "Trova dipendenze implicite" = TRUE
  • Crea impostazioni -> Ottimizzazione tempo collegamento = incrementale
  • Crea impostazioni -> Livello di ottimizzazione (debug) = Nessuno [-OO]
  • Crea impostazioni -> Livello di ottimizzazione (versione) = Più veloce, più piccolo [-Os]
  • Crea impostazioni -> Aumenta la condivisione delle intestazioni precompilate = SÌ
  • Build Settings -> Enable Incremental Distill = YES

Aggiunte impostazioni personalizzate personalizzate definite dall'utente,

  • Crea impostazioni -> HEADERMAP_USERS_VFS = YES

Nota: non ho l'impostazione personalizzata definita dall'utente per l'ottimizzazione dell'intero modulo.


3

Ho modificato alcune cose con il mio codice per quanto riguarda l'intestazione del prefisso che sembra aver risolto questo problema. Non so quale sia stato effettivamente il trucco, ma li condividerò tutti nella speranza che aiuti qualcun altro là fuori. Se non hai un prefisso impostato, allora suppongo che questo non sia il problema (o il problema è sfaccettato).

  1. Rimuovere eventuali importazioni dall'intestazione del prefisso che sono file dalla directory dei prodotti compilati in modo da poter modificare l'impostazione di compilazione per questo ("L'intestazione precompilata utilizza i file dalla directory di compilazione") su "No". Assicurati che non venga importato indirettamente anche attraverso altre importazioni.
  2. Rimuovi qualsiasi importazione dall'intestazione del prefisso che utilizza i moduli Clang (librerie o framework che hanno un file module.modulemap nella loro directory Headers, in modo da poter scrivere codice simile @import MyModule). (Per me, questo e il passaggio 1 erano la stessa cosa.)
  3. Impostare l'impostazione di compilazione per la condivisione dell'intestazione del prefisso su "Sì". (Non penso che ciò sia necessario e non dovrebbe avere alcun effetto nel mio progetto. Sto solo affermando questo perché l'ho cambiato perché ero disposto a provare qualsiasi cosa. :))
  4. Esci da Xcode ed elimina la tua directory DerivedData / ModuleCache (configurata su ~ / Library / Developer se ricordo correttamente).

Se il problema persiste, puoi provare a rimuovere altre importazioni dall'intestazione del prefisso. Potrebbe esserci qualcosa che lo fa inciampare ...


3

Sembra che ci stiano lavorando attivamente secondo https://forums.developer.apple.com/thread/62737 ma una soluzione alternativa è aggiungere

HEADERMAP_USES_VFS = YES

nelle impostazioni di creazione del tuo target (Progetto -> Target -> Impostazioni di costruzione -> Definito dall'utente).

Questa soluzione ha funzionato ogni volta per me oggi, dopo che nessun'altra soluzione ha funzionato in modo coerente nell'ultimo mese.

EDIT: A volte ancora ricompilare tutto, anche se sembra farlo molto meno frequentemente con questa impostazione definita.


Ho anche aggiunto questo valore, il tempo di costruzione è più veloce ma non ha risolto la generazione incrementale. Ho cambiato il compilatore Swift - Generazione di codice / Debug in Ottimizzazione dell'intero modulo veloce ... è il risultato migliore fino ad ora
Antonio Junior

non riesco nemmeno a trovare definito dall'utente)
David Seek

2
@DavidSeek è proprio in fondo alle Impostazioni di costruzione
Laser Hawk,


3

Controlla tutto il tuo codice sulle @IBDesignabledirettive nel mio caso particolare Xcode build project tutto il tempo perché avevo alcune viste sul mio storyboard che conteneva questi @IBDesignableattributi in esso. La seconda cosa è che ho anche il mio storyboard aperto in una finestra separata (non una scheda), ovvero il mio Xcode crea build per tutti i simulatori per sempre.


Utilizziamo un certo numero di @IBDesignabledirettive ... c'è qualcosa in particolare che dovremmo cercare?
Stan,

Penso che sia possibile trovarli escludendo uno per uno e controllare il risultato, nel mio caso erano solo 2 delle direttive @IBDesignable in tutto il progetto.
ua24,

2

Madhuri Mane ha perfettamente ragione a riguardo. Per aggiungere un po 'più di chiarezza, alcuni punti importanti da notare:

Ciò è applicabile SOLO se si hanno dipendenze implicite su librerie / framework su cui si basa il proprio target.

Se "Trova dipendenze implicite" è disabilitato:

Risultato: la libreria non verrà creata prima della creazione della destinazione dell'applicazione. Impossibile creare la destinazione dell'applicazione.

Correzione: per garantire che il secondo scenario non si verifichi, è necessario aggiungere i target necessari all'elenco target e ordinarli correttamente.

Fonte e ulteriori letture sull'argomento: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Ora, se l'intero progetto è ospitato all'interno di un obiettivo e richiede 4 minuti per la compilazione, non c'è molto che tu possa fare al riguardo, tranne dividerlo in framework per sfruttare quanto sopra o capire dove la compilazione è in ritardo. Se stai usando qualcosa come PaintCode o hai grossi pezzi di codice UIKit in breve tempo cambiarlo in Objective-c si compila molto più velocemente


2

Vai alle impostazioni di costruzione del tuo target e imposta Defines Modulesu Yes.

Ha funzionato per me per un paio di build, troppo presto per affermare che si tratta di una soluzione definitiva, ma almeno ci stiamo provando.


2

Apple ha rilasciato la nuova versione beta di Xcode ieri (14 nov)

Xcode 8.2 beta 2

E questo problema è stato contrassegnato come risolto nella nota di rilascio.

Build System

• Xcode non ricostruirà un intero target quando si sono verificati solo piccoli cambiamenti. (28892475)

Funziona per me. La velocità di costruzione è tornata come al solito. Chiunque affronti questo problema, dovrebbe provarlo!

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


2

Vai all'impostazione di compilazione del progetto e modifica il "dialetto in lingua C".

"Dialetto in linguaggio C" è impostato su "GNU99" anziché "Predefinito del compilatore" quando si aggiorna la versione di xcode. A un certo punto Xcode non ha migrato correttamente le impostazioni del progetto della libreria e quindi è stato impostato su GNU99. Questo risolverà il problema


1

Se hai apportato modifiche al file Swift, inizia a creare l'app, vai all'ultima scheda e fai clic sul registro di compilazione, durante la fase "Verifica dipendenze" interrompi la compilazione ed eseguila nuovamente. Alla seconda esecuzione dovrebbe solo creare i file modificati. Se fatto correttamente ho scoperto che funziona ogni volta. Non è necessario apportare modifiche alle impostazioni del progetto.

Questo sembra essere un bug in Xcode.

inserisci qui la descrizione dell'immagine

Se vedi che l'app sta eseguendo una build completa, interrompi la build e riprova questo trucco.

Se non hai apportato modifiche al codice, utilizza CMD + CTRL + R per eseguire senza creare l'app che allega il debugger. Non costruirà app ma può aiutarti a risparmiare tempo non necessario.


Funziona davvero, ma a volte XCode fallirà con il codice 1 e dovrai fare una build pulita. È un incubo
Antonio Junior,

Esistono altri scenari in cui Xcode eseguirà sempre la generazione completa. Ho scoperto che se modifichi il file .h incluso nell'intestazione del ponte ricostruirà tutti i file Swift. Potrebbero esserci altri scenari non correlati al bug Xcode.
Vlad,

Esistono scenari in cui l'unica modifica è la ridenominazione di una funzione o una nuova proprietà aggiunta a una classe / struttura esistente che risulta in un'intera ricostruzione.
Antonio Junior,

Fai riferimento a questa domanda / risposta, questo thread ne è un duplicato: disponi di una soluzione che funziona meglio: stackoverflow.com/questions/39456223/…
Vlad

1

Il problema da parte mia è stato risolto applicando la casella di controllo "Trova dipendenze implicite".

MA ricorda se stai usando i cocoapodi, per applicare queste impostazioni anche al tuo progetto pod selezionandolo da

Prodotto -> Schema -> Pods- "yourProjectName"

applicare anche in:

Prodotto -> Schema -> "yourProjectName"

Mi aiuta, quindi spero che questo suggerimento aiuti qualcun altro.

Grazie


1

Provare a: 1. Passare al Progetto 2. Fare clic su Crea impostazioni 3. Verificare che OptimizationLevel sia impostato su Nessuno per il debug. 4. Fare clic su Aggiungi impostazione definita dall'utente. 5. Impostare SWIFT_WHOLE_MODULE_OPTIMIZATION su YES.

inserisci qui la descrizione dell'immagine


nulla funziona ancora compilare quando scrivo una sola lettera.
Chandni,

-2

per soddisfare il tempo di compilazione di xcode, è possibile utilizzare IRAMDISK (disco di memoria virtuale). Mezzi molto utili ed efficaci per ridurre i tempi di compilazione.

Inoltre può usare per velocizzare le applicazioni usate di frequente.

fare riferimento al seguente link per scaricare e utilizzare: http://iramdisk.findmysoft.com/mac/


Questo non accelererà la compilazione se hai già un disco SSD.
Jano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.