2012-09-17 12 views
6

Nella ricerca di questo ho potuto trovare solo informazioni per altre lingue. Vorrei conoscere le migliori pratiche per la scrittura statments condizionali come:Xcode - modalità di sviluppo condizionale o produzione

if (DEV_MODE){ 
    //do something 
}else{ 
    //do the real stuff 
} 

E quindi impostando dev_mode o disattivare in qualche file globale così ho solo per cambiare la situazione di attivare o disattivare invece di cambiare codice in più posti. Ho alcune idee ma sto cercando consigli sul modo migliore per farlo.

+0

Vuoi 'DEV_MODE' per essere determinato al momento della compilazione? O vuoi essere in grado di cambiare 'DEV_MODE' in fase di esecuzione senza ricompilare? –

risposta

14

Prova questo:

#ifdef DEBUG 
    // do stuff 
#endif 

L'attuale la versione di Xcode imposta automaticamente questa macro in nuovi progetti. Vai ai tuoi progetti Impostazioni di configurazione per essere sicuro. Se non è lì si deve aggiungere voi stessi:

enter image description here

+0

Sì, le mie impostazioni lo riflettono. Quindi non devo mai cambiare niente, giusto? Presumo che quando utilizzo lo schema AppStore, DEBUG sarà automaticamente 0. – soleil

0

Nelle impostazioni del progetto è presente una sezione denominata "Macro di preprocessore". In quella sezione puoi aggiungere una stringa per la tua build di Debug come "DEV_MODE" o qualsiasi altra cosa tu voglia. Quindi puoi fare le condizioni che hai elencato sopra e quando la tua app viene creata per "Release" o qualsiasi altra impostazione che non contenga la macro, il tuo controllo dovrebbe fallire.

1

variabili preprocessore sono ciò che si vuole, in configurazioni di build definiscono una variabile (DEV_MODE per esempio), e quindi utilizzare i controlli del preprocessore come:

#if DEV_MODE 
    //dev mode code 
#else 
    //non-dev mode code 
#endif 
+0

È meglio usare 'DEBUG', è definito/non definito da Xcode di default (ovviamente non è il caso di usare un altro IDE/una toolchain della riga di comando). –

8

(. Questa domanda è non riferibili alla Xcode)

Detto questo, invece di inquinare il codice con FI C-style, è possibile utilizzare le direttive del preprocessore per filtrare la modalità di debug e rilascio. Per quanto ne so, è una pratica comune definire la macro DEBUG su 1 se in modalità test e non per definirla se in modalità di rilascio. (Inoltre, Xcode può definire questo per te, ho visto che questo comportamento è stato invocato.) La ragione è che l'uso del preprocessore è più leggibile, dal momento che non entra nel rientro, è meglio separato dal codice visivamente. Per riassumere, provare

#ifdef DEBUG 
    // do debug stuff here 
#else 
    // do release stuff here 
#endif 

Un argomento in più per le macro del preprocessore è che si può condizionare il namespace globale, che non si poteva al codice C. I. e., Con le macro del preprocessore, è possibile scrivere

#ifdef DEBUG 
    int functionOne() 
    { 
    } 
#else 
    char *functionTwo(int a) 
    { 
    } 
#endif 

Non si poteva fare questo senza il preprocessore.

+0

Grazie per la spiegazione. – soleil

Problemi correlati