2009-09-10 17 views
5

Sto scrivendo un'app Cocoa in Objective C che sta comunicando con un webservice e voglio che si connetta a una sandbox in modalità debug e al vero webservice in modalità di rilascio. Tutto ciò di cui ho bisogno è di cambiare linea di codice dove viene istanziato un oggetto che contiene la configurazione (con un diverso messaggio di inizializzazione e diversi parametri).Codice diverso/config in Release & Debug build (Obj-C)

Quindi, come posso scambiare una riga di codice per la modalità di rilascio o di debug?

risposta

7

si potrebbe verificare per #ifdef DEBUG, ma io consiglierei di non farlo.

Ci sono molte differenze tra le versioni di debug e release. Diverse ottimizzazioni del compilatore, diversi insiemi di simboli, ecc ...

Invariabilmente, ti troverai in una situazione in cui desideri eseguire la build di rilascio contro la tua sandbox per scopi di debug .... e la tua build di debug contro il webservice di produzione perché alcuni clienti hanno un problema che si riproduce solo in modalità Release.

Quindi, per quello, suggerirei un utente predefinito. Vedi NSUserDefaults.

Si noti che è possibile impostare semplici valori predefiniti dall'utente dalla riga di comando.

Così, si potrebbe fare qualcosa di simile:

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug 
+0

Tecnica interessante, dovrò ricordarlo. – pix0r

+1

Grazie per questo suggerimento! Il tuo comando terminale non ha funzionato davvero per me. Ho trovato "default scrivere my.bundle.identifier SandboxModeFlag -bool YES" per funzionare bene per me. – Christian

2

Prima di tutto, definire un simbolo del preprocessore impostato solo nella configurazione di build Debug, come da domanda 367368 - chiamarlo, ad esempio, DEBUG. Poi si può fare

#ifdef DEBUG 
    // Code that only compiles in debug configuration 
#else 
    // Code that compiles in other configurations (i.e. release) 
#endif 
8

È possibile utilizzare definisce specifiche-config per modificare il codice che viene eseguita. Leggi prima come fare il define a preprocessor symbol in Xcode. Quindi, nel tuo codice, fai qualcosa di simile a questo:

#if DEBUG_MODE 
#define BACKEND_URL @"http://testing.myserver.com" 
#else 
#define BACKEND_URL @"http://live.myserver.com" 
#end 

NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]]; 
+0

Anche se ho preferito la soluzione di bbum, ora capisco come funziona e lo terrò a mente. Grazie. – Christian

Problemi correlati