web-dev-qa-db-fra.com

Détecter par programme si l'application est en cours d'exécution sur l'appareil ou le simulateur

J'aimerais savoir si mon application est en cours d'exécution sur un appareil ou un simulateur au moment de l'exécution. Y a-t-il un moyen de détecter cela?

Raison d'être pour tester api Bluetooth avec simulateur: http://volcore.limbicsoft.com/2009/09/iphone-os-31-gamekit-pt-1-woooohooo.html

53
eugene
#if TARGET_OS_SIMULATOR

//Simulator

#else

// Device

#endif

Veuillez vous référer également à cette question SO précédente Quelles sont les définitions définies par Xcode lors de la compilation pour iPhone

111
visakh7

J'ai créé une macro dans laquelle vous pouvez spécifier les actions que vous souhaitez effectuer entre parenthèses. Ces actions ne seront exécutées que si le périphérique est simulé.

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

Ceci est utilisé comme ceci:

SIM(NSLog(@"This will only be logged if the device is simulated"));
17
Fernando Cervantes

Vérifiez si simulateur

#if TARGET_IPHONE_SIMULATOR
// Simulator
#endif

Vérifiez si périphérique

#if !(TARGET_IPHONE_SIMULATOR)
// Device
#endif

Vérifiez pour les deux

#if TARGET_IPHONE_SIMULATOR
// Simulator
#else
// Device
#endif

Veuillez noter que vous ne devriez pas ifdef sur TARGET_IPHONE_SIMULATOR car il sera toujours défini sur 1 ou 0.

5
hfossli

TARGET_IPHONE_SIMULATOR est défini sur le périphérique (mais défini sur false). et défini comme ci-dessous 

#if TARGET_IPHONE_SIMULATOR
NSString * const DeviceMode = @"Simulator";
#else
NSString * const DeviceMode = @"Device";
#endif

Il suffit d'utiliser DeviceMode pour savoir entre l'appareil et le simulateur 

5
Jhaliya

À partir de XCode 9.3+, Swift

#if targetEnvironment(simulator)
//Simulator
#else
//Real device
#endif

Vous aide à coder par type de périphérique.

2
theapache64

Vous pouvez utiliser la macro de préprocesseur TARGET_IPHONE_SIMULATOR pour distinguer les cibles de périphérique et de simulateur.

2
Julio Gorgé

Utilisez ce code ci-dessous:

#if targetEnvironment(simulator)
   // iOS Simulator
#else
   // Device
#endif

Fonctionne pour Swift 4 et Xcode 9.4.1

0
Haroldo Gondim