Программно определить, запущено ли приложение на устройстве или симуляторе - PullRequest
53 голосов
/ 25 апреля 2011

Я хотел бы знать, запущено ли мое приложение на устройстве или симуляторе во время выполнения. Есть ли способ обнаружить это?

Причина тестирования bluetooth api с помощью симулятора: http://volcore.limbicsoft.com/2009/09/iphone-os-31-gamekit-pt-1-woooohooo.html

Ответы [ 7 ]

112 голосов
/ 25 апреля 2011
#if TARGET_OS_SIMULATOR

//Simulator

#else

// Device

#endif

Просьба также сослаться на этот предыдущий вопрос SO Что #defines устанавливает Xcode при компиляции для iPhone

17 голосов
/ 29 марта 2012

Я создал макрос, в котором вы можете указать, какие действия вы хотите выполнить в скобках, и эти действия будут выполняться только при моделировании устройства.

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

Это используется так:

SIM(NSLog(@"This will only be logged if the device is simulated"));
5 голосов
/ 11 сентября 2014

Проверьте, если симулятор

#if TARGET_IPHONE_SIMULATOR
// Simulator
#endif

Проверьте, если устройство

#if !(TARGET_IPHONE_SIMULATOR)
// Device
#endif

Проверьте для обоих

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

Обратите внимание, что вы не должны ifdef на TARGET_IPHONE_SIMULATOR, поскольку он всегда будет определяться либо 1, либо 0.

5 голосов
/ 25 апреля 2011

TARGET_IPHONE_SIMULATOR определено на устройстве (но определено как ложное). и определяется как ниже

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

Просто используйте DeviceMode, чтобы узнать между устройством и симулятором

2 голосов
/ 30 апреля 2018

Из XCode 9.3+, Swift

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

Помогает вам кодировать данные для конкретного типа устройства.

2 голосов
/ 25 апреля 2011

Вы можете использовать макрос препроцессора TARGET_IPHONE_SIMULATOR , чтобы различать цели устройства и симулятора.

0 голосов
/ 18 июля 2018

Используйте этот код ниже:

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

Работает для Swift 4 и Xcode 9.4.1

...