2009-12-01 10 views
13

Esiste un modo per compilare condizionatamente la mia app in base alla creazione del simulatore o del dispositivo? (La mia app si collega a un server esterno: se sono in esecuzione sul dispositivo, desidero connettermi a localhost; se sono in esecuzione sul dispositivo, desidero andare al mio server di produzione.)Rileva nel progetto Xcode iPhone se sto costruendo per simulatore o dispositivo?

I ' Sto cercando alcune variabili #ifdef che posso rilevare, o anche qualcosa in fase di esecuzione ... non importa.

Grazie.

risposta

18
#if !(TARGET_IPHONE_SIMULATOR) 

o, in alternativa,

#if (TARGET_OS_IPHONE) 

vi dirà se si sta eseguendo sul dispositivo. Al fine di farlo funzionare, è necessario

#include "TargetConditionals.h"

di file che si possono trovare here.

+0

Grazie ... che sembra funzionare. Un modo per scoprire cos'altro è definito in "TargetConditionals.h"? Non riesco a trovare il file da nessuna parte ... –

+2

Correzione ... il tuo secondo esempio (TARGET_OS_IPHONE) ha sempre successo, a condizione, ovviamente, che tu stia facendo lo sviluppo di iPhone. Il tuo primo esempio, TARGET_IPHONE_SIMULATOR, è quello che sto cercando, e che ha successo solo se stai correndo sul simulatore (rispetto al dispositivo.) –

+0

Modificato con un collegamento al file. – luvieere

1

Ho creato una macro in cui è possibile specificare quali azioni si desidera eseguire tra parentesi e queste azioni verranno eseguite solo se il dispositivo viene simulato.

#define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;} 

Questo è usato in questo modo:

SIM(NSLog(@"This will only be logged if the device is simulated")); 
Problemi correlati