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
#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
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"));
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
.
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
#if targetEnvironment(simulator)
//Simulator
#else
//Real device
#endif
Vous aide à coder par type de périphérique.
Vous pouvez utiliser la macro de préprocesseur TARGET_IPHONE_SIMULATOR pour distinguer les cibles de périphérique et de simulateur.
Utilisez ce code ci-dessous:
#if targetEnvironment(simulator)
// iOS Simulator
#else
// Device
#endif
Fonctionne pour Swift 4
et Xcode 9.4.1