Simulador de iPhone: cómo detectar cuándo la aplicación se está ejecutando en el simulador (por lo que puede configurar los datos de testing)?

Cualquier código de muestra que me muestre cómo, en mi código de aplicación de iPhone:

  1. Cómo detectar si la aplicación acaba de ser DESPLEGADA para ejecutarse en un simulador (y no en un dispositivo) [si "Despliegue" no está disponible, solo se detectará cuándo la aplicación se ejecuta en el simulador en lugar de en un dispositivo)
  2. ¿En qué parte del código de la aplicación de mi iPhone pondría las líneas que configuran mis datos de testing en el simulador? Esto significa que quería que los datos de testing se limpien / restablezcan de manera efectiva cada vez que compilo y presiono al simulador (sin embargo, realmente no quería que este código se ejecutara durante el uso de la aplicación en el simulador; por ejemplo, debería poder intercambiar aplicaciones en el simulador y luego, cuando vuelva a iniciar mi aplicación en el simulador, no debería ejecutar el código de configuration de datos

Cualquier otra mejor sugerencia sobre cómo cubrir la gestión de estos datos de testing en el simulador sería buena. El background aquí es que estoy hablando de datos de testing en el Calendario (por ejemplo, utilizando el Kit de events), por lo que no quiero que la aplicación coloque elementos de calendar en mi iPhone cuando los implemento en mi dispositivo (lo siento, solo tengo 1 personal iPhone aquí).

Obviamente uso algo como esto …

#import <TargetConditionals.h> #if TARGET_IPHONE_SIMULATOR // Simulator specific code #else // TARGET_IPHONE_SIMULATOR // Device specific code #endif // TARGET_IPHONE_SIMULATOR 

Y a tu segunda pregunta … Algo así debería ayudarte. En su delegado de la aplicación:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"initialized"] ) { // Setup stuff [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"initialized"]; } ... your code ... } 

Si desea verificar el time de ejecución (en su lugar, compile time con la macro del comstackdor #), use este código:

 UIDevice *currentDevice = [UIDevice currentDevice]; if ([currentDevice.model rangeOfString:@"Simulator"].location == NSNotFound) { //running on device } else { // running in Simulator } 

Vea también esta pregunta: ¿Cómo puedo determinar mediante progtwigción si mi aplicación se está ejecutando en el simulador de iPhone?

El bloque de código que funcionó para mí:

 #if defined(__i386__) || defined(__x86_64__) /* Run code if in Simulator */ #else /* Run code if in device */ #end 

Noté que __i386__ no funciona para simuladores de iPhone 6, así que agregué x86_64