我想知道我的应用程序是否在运行时在设备或模拟器上运行。有没有办法检测到这个?
使用模拟器测试蓝牙api的原因: http://volcore.limbicsoft.com/2009/09/iphone-os-31-gamekit-pt-1-woooohooo.html
答案 0 :(得分:111)
#if TARGET_OS_SIMULATOR
//Simulator
#else
// Device
#endif
请参考此前的SO问题What #defines are set up by Xcode when compiling for iPhone
答案 1 :(得分:17)
我创建了一个宏,您可以在其中指定要在括号内执行的操作,并且只有在模拟设备时才会执行这些操作。
#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"));
答案 2 :(得分:5)
TARGET_IPHONE_SIMULATOR 在设备上定义(但定义为false)。并定义如下
#if TARGET_IPHONE_SIMULATOR
NSString * const DeviceMode = @"Simulator";
#else
NSString * const DeviceMode = @"Device";
#endif
只需使用DeviceMode
来了解设备和模拟器
答案 3 :(得分:5)
检查模拟器
#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
。
答案 4 :(得分:2)
您可以使用TARGET_IPHONE_SIMULATOR预处理器宏来区分设备和模拟器目标。
答案 5 :(得分:2)
#if targetEnvironment(simulator)
//Simulator
#else
//Real device
#endif
帮助您针对特定的设备类型进行编码。
答案 6 :(得分:0)
使用以下代码:
#if targetEnvironment(simulator)
// iOS Simulator
#else
// Device
#endif
适用于Swift 4
和Xcode 9.4.1
答案 7 :(得分:0)
如果有人正在寻找Unity
解决方案,我就是这样做的,这是我找到方法的唯一方法。
using System.Globalization;
public static bool IsArm() {
return CultureInfo.InvariantCulture.CompareInfo.IndexOf(SystemInfo.processorType, "ARM", CompareOptions.IgnoreCase) >= 0;
}