2009-12-01 11 views
13

¿Hay alguna manera de que pueda compilar de forma condicional en mi aplicación en función de si estoy compilando para el simulador o el dispositivo? (Mi aplicación se conecta a un servidor externo: si estoy ejecutando en el dispositivo, quiero conectarme a localhost; si estoy ejecutando en el dispositivo, quiero ir a mi servidor de producción).¿Detecto en el proyecto Xcode iPhone si estoy compilando para simulador o dispositivo?

I ' Estoy buscando alguna variable #ifdef que pueda detectar, o incluso algo en tiempo de ejecución ... no importa.

Gracias.

Respuesta

18
#if !(TARGET_IPHONE_SIMULATOR) 

o, alternativamente,

#if (TARGET_OS_IPHONE) 

le dirá si se está ejecutando en el dispositivo. Con el fin de que funcione, debe

#include "TargetConditionals.h"

archivo que se puede encontrar here.

+0

Gracias ... que parece funcionar. ¿Alguna manera de averiguar qué más se define en "TargetConditionals.h"? No puedo encontrar el archivo en ninguna parte ... –

+2

Corrección ... su segundo ejemplo (TARGET_OS_IPHONE) siempre tiene éxito, siempre que, por supuesto, esté haciendo un desarrollo de iPhone. Su primer ejemplo, TARGET_IPHONE_SIMULATOR, es lo que estoy buscando, y eso solo tiene éxito si está ejecutando en el simulador (frente al dispositivo) –

+0

Editado con un enlace al archivo. – luvieere

1

Creé una macro en la que puede especificar qué acciones desea realizar entre paréntesis y estas acciones solo se llevarán a cabo si el dispositivo se está simulando.

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

Esto se utiliza como esto:

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