2011-09-29 16 views
5

In un nuovo progetto che ho avviato, XCode ha deciso che compila ogni file nel progetto ogni volta che lo eseguo, invece di compilare solo i file che cambiano (e i file dipendenti da quelli). Poiché ci sono sempre più file nel progetto, questo diventa un onere sempre più grande in termini di tempo e durata della batteria.XCode compila l'intero progetto ogni volta che corro

È possibile che sia stata modificata un'impostazione da qualche parte che ha interessato questo; o forse no. Quali sono alcune impostazioni di progetto che dovrei guardare?

+0

Hai mai trovato una soluzione per questo? – ekeren

+0

@ekeren No, non l'ho fatto. Supponendo che sia un bug in Xcode che è stato corretto. – leecbaker

risposta

7

Se Xcode ricompila la maggior parte o tutti i file sorgente ogni volta che si esegue una generazione, ciò significa in genere che tali file dipendono direttamente o indirettamente da un file di intestazione che è stato modificato. Qui ci sono alcune cose da cercare:

  1. fare i file di origine tendono a #import alcuni file di intestazione di livello superiore che si importa ricorsivamente un gruppo di file di intestazione di livello inferiore? Se si modifica qualsiasi file in quell'albero di intestazioni dipendenti, imporrà la ricompilazione di qualsiasi file .m che importa il file di intestazione di livello superiore. Potresti essere in grado di ridurre queste dipendenze importando le intestazioni per i sottomodelli di livello inferiore o, meglio ancora, per i soli header specifici di cui hai bisogno per ogni file. (Nota: alcune librerie che non sono progettate per essere utilizzate in questo modo possono rendere questo approccio difficile o impossibile in alcuni casi.)

  2. Alcuni strumenti di sviluppo di terze parti e librerie statiche eseguono script che generano o modificano codice come parte di il loro processo di costruzione. Se i file di origine dipendono da un file di intestazione generato da uno script, verranno ricompilati ogni volta che lo script rigenera il file di intestazione. Anche se il codice generato dallo script non cambia, i file di origine dipendenti verranno ricompilati se la data dell'ultima modifica del file di intestazione cambia. Potrebbe essere necessario un abile hacking per eliminare la compilazione ridondante se questo è il tuo problema.

  3. Non dimenticare di controllare il file di intestazione precompilato (.pch) per vedere cosa viene importato lì. Il contenuto di quel file viene effettivamente iniettato nella parte superiore di ogni file .m nel tuo progetto in fase di compilazione.

  4. Provare a ridurre le dipendenze spostando il maggior numero possibile di dichiarazioni #import dai file .h e nei file .m. Generalmente puoi farcela semplicemente importando le intestazioni per la superclasse della tua classe e tutti i protocolli implementati dalla tua classe nel suo file .h. È possibile utilizzare le dichiarazioni di inoltro invece delle dichiarazioni #import per qualsiasi altra classe, tipo di dati o protocolli utilizzati nella classe @interface della classe.

+0

Nessuno di questi sembra essere un problema che sto incontrando, tuttavia, sto contrassegnando questo come la risposta accettata perché penso che potrebbe giovare ai principianti che troveranno questa pagina. – leecbaker

7

Mi rendo conto che questa domanda è più di un mese di età, ma ho avuto un problema simile a spostare un vecchio progetto di Xcode 4. Dopo i capelli molto lacerante, ho scoperto che Xcode 4 (4.2 nel mio caso) ha un bug in cui, se sono presenti caratteri non ASCII nel percorso completo di un file di origine o nel percorso completo di qualsiasi intestazione incluso nel file di origine, verrà ricompilato ogni volta che si crea. Ciò include l'intestazione del prefisso, nel qual caso verrà attivata una compilazione completa ogni volta. Nel mio caso, il programmatore precedente aveva aggiunto "ƒ" a diversi nomi di cartelle e, una volta rimossi, funzionava perfettamente.

In ogni caso, mi sono imbattuto in questa domanda durante i miei (non riusciti) tentativi di risposta a Google e ho pensato di condividere la mia soluzione.

+0

sarebbe bello se si aggiungesse "Questo problema con Xcode è stato corretto in Xcode xxx." In caso contrario, i lettori devono elaborare una configurazione dispendiosa in termini di tempo solo per verificare se questo è un problema. , attenzione. –

Problemi correlati