2015-12-10 14 views
11

Ho una teoria, ma non so come testarla. Abbiamo un progetto iOS abbastanza grande di circa 200 file Swift e 240 file obj-C (e una uguale quantità di file header). Siamo ancora su Swift 1.2, il che significa che abbastanza regolarmente, l'intero progetto viene ricostruito.La quantità di file importati in un'intestazione di bridging influisce sui tempi di compilazione?

Ho notato che ogni file .swift richiede circa 4-6 secondi per essere compilato; in altri progetti questo è al massimo 2.

Ora, ho notato che nell'output di generazione, gli avvertimenti generati nei file di intestazione vengono ripetuti per ogni file .swift, il che mi fa credere che il compilatore rapido riascolterà tutto intestazioni incluse nell'intestazione del bridging. Dato che abbiamo ~ 160 istruzioni di importazione nell'intestazione del bridging, questo tipo aggiunge.

domande Quindi, fondamentali:

  • Ha la dimensione della nostra colmare impatto intestazione costruire volte?
  • C'è un modo per ottimizzare questo, quindi analizza le intestazioni solo una volta?
  • Swift 2 ha lo stesso problema?
  • Altri trucchi per ottimizzare questo? Oltre a riscrivere tutto in Swift, questo è un progetto troppo laborioso per noi da intraprendere in questo momento.

risposta

2

Posso solo parlare dell'esperienza che ho nel mio posto di lavoro precedente, nel senso che alcune cose potrebbero essere cambiate. Inoltre, non sono sicuro che questo aiuti il ​​tuo caso specifico, dal momento che mischi Objective C e Swift che non ho mai fatto, ma la teoria è ancora valida.

In breve, sì, la dimensione dell'intestazione di bridging influisce sui tempi di compilazione e sei corretto che lo analizzi una volta per ogni file/inclusione.

Il modo corretto per ottimizzare questo sembrava essere quello di dividere il progetto in moduli (chiamati anche "framework" ad un certo punto) perché ogni modulo è compilato individualmente e quindi non ricompilato se nulla è cambiato.

+1

* dal momento che si mescolano Objective C e Swift, che non ho mai fatto, * Bene, duro scrivere uno Swift CocoaT ahi app senza mescolarla con Objective-C. ;-) –

2

La dimensione della nostra testata di collegamento influisce sui tempi di costruzione?

Assolutamente. Più file sono inclusi nell'intestazione del bridging, più tempo impiega il compilatore per analizzarli. Questo è ciò che un intestazione precompilata ha tentato di risolvere. I file PCH sono stati eliminati a favore dei moduli.

C'è un modo per ottimizzare questo, quindi analizza le intestazioni solo una volta?

A dire il vero non lo so, dipende dai file di origine e dalle dipendenze.

Swift 2 ha lo stesso problema?

Sì, ma l'ottimizzazione del compilatore è molto meglio nelle versioni più recenti di Xcode e Swift. Ancora una volta, stressando Moduli invece dei file Precompiled Header qui. Dovrei notare che è possibile passare un file pch direttamente in clang, ma raramente è una buona idea.

Se possibile, proverei a utilizzare un'intestazione pch nel progetto ibrido.Prenderò in considerazione l'idea di creare librerie precompilate o framework statici per impedire la costante ricostruzione delle classi. C'è un grande video del WWDC del 2013 che introduce i moduli, consiglio vivamente di guardarlo.

Riferimenti:

Problemi correlati