2010-08-06 20 views
54

El uso de la macro TARGET_IPHONE_SIMULATOR da como resultado que los mismos valores constantes se definan en la aplicación am. Por ejemplo:Objetivo iPhone Macro del simulador no funciona

#ifdef TARGET_IPHONE_SIMULATOR 
NSString * const Mode = @"Simulator"; 
#else 
NSString * const Mode = @"Device"; 
#endif 

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    ... 
    NSLog(@"Mode: %@", Mode); 
    ... 
} 

Siempre se produce un "Modo: Simulador" que se registra. Actualmente estoy ejecutando XCode 3.2.4 si eso ayuda. Gracias.

+5

cambie ifdef a if – Taranfx

+0

TARGET_IPHONE_SIMUATOR tiene un error tipográfico (falta 'L'), y se muestra en la vista previa de búsqueda de google como tal. – wilsonmichaelpatrick

+0

@wilsonmichaelpatrick corregido –

Respuesta

103

TARGET_OS_SIMULATOR se define en el dispositivo (pero se define como falso). La solución es:

#include <TargetConditionals.h> // required in Xcode 8+ 

#if TARGET_OS_SIMULATOR 
NSString * const Mode = @"Simulator"; 
#else 
NSString * const Mode = @"Device"; 
#endif 

No estoy seguro de cuándo se modificó esto. Estoy bastante seguro de que era posible usar 'ifdef' en el pasado.

+1

Este es un error común en muchas bibliotecas, e.h. aquí: https://github.com/domesticcatsoftware/DCIntrospect/issues/24. ¡Gracias por compartir su solución! – steipete

+3

Gracias por el tema; Pensé que me estaba volviendo loco, o peor (olvidando mis muchos años de desarrollo de C). –

+1

TARGET_IPHONE_SIMULATOR está en desuso en iOS 9. Utiliza TARGET_OS_SIMULATOR en XCode 7 –

3

Intentaré implementar macro si va a ser utilizado en diferentes clases a través de la aplicación.

en el archivo PCH,

#if TARGET_IPHONE_SIMULATOR 
#define isSimulator() YES 
#else 
#define isSimulator() NO 
#endif 

y en cualquier clase puedo comprobar llamando isSimulator().

1

Por alguna razón TARGET_IPHONE_SIMULATOR no funciona para mí en xcode v6.4. El siguiente fragmento de código funciona perfectamente:

#if (!arch(i386) && !arch(x86_64)) 
    camera   = Camera() 
#else 
    camera   = MockCamera() 
#endif 
12

Para mí explícitamente incluyendo TargetConditionals.h ayudó

#include <TargetConditionals.h> 
+0

¡Salvaste mis días! – jayatubi

+0

Me parece que a partir de una versión específica de Xcode en (actualmente estoy usando 7.3.1) esto es necesario. – appleitung

+0

Puede confirmar que esto es obligatorio en Xcode 8.2.1 – Sebyddd

5

TARGET_OS_SIMULATOR intento, como es obsoleto TARGET_IPHONE_SIMULATOR.

Cuestiones relacionadas