web-dev-qa-db-ja.com

アプリがデバイスまたはシミュレーターで実行されているかどうかをプログラムで検出する

実行時にアプリがデバイスで実行されているかシミュレーターで実行されているかを知りたい。これを検出する方法はありますか?

Bluetooth APIをシミュレータでテストする理由: http://volcore.limbicsoft.com/2009/09/iphone-os-31-gamekit-pt-1-woooohooo.html

53
eugene
#if TARGET_OS_SIMULATOR

//Simulator

#else

// Device

#endif

Plsはこの前のSO質問も参照してください iPhone用にコンパイルするときにXcodeによって設定される#definesは何ですか

112
visakh7

括弧内で実行するアクションを指定できるマクロを作成しました。これらのアクションは、デバイスがシミュレートされている場合にのみ実行されます。

#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"));
17

simulatorかどうかを確認します

#if TARGET_IPHONE_SIMULATOR
// Simulator
#endif

デバイスかどうかを確認します

#if !(TARGET_IPHONE_SIMULATOR)
// Device
#endif

bothを確認します

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

TARGET_IPHONE_SIMULATORまたは1のいずれかに常に定義されるため、0ifdefを使用しないでください。

5
hfossli

TARGET_IPHONE_SIMULATORはデバイスで定義されています(ただし、falseに定義されています)。以下のように定義されます

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

DeviceModeを使用して、デバイスとシミュレーターを知るだけです

5
Jhaliya

XCode 9.3+から、Swift

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

特定のデバイスタイプに対してコーディングするのに役立ちます。

2
theapache64

TARGET_IPHONE_SIMULATOR プリプロセッサマクロを使用して、デバイスターゲットとシミュレータターゲットを区別できます。

2
Julio Gorgé

以下のコードを使用してください:

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

Swift 4およびXcode 9.4.1

0
Haroldo Gondim