如何检测应用程序正在模拟器或设备上运行[重复]

Posted

技术标签:

【中文标题】如何检测应用程序正在模拟器或设备上运行[重复]【英文标题】:How to detect app is running on simulator or device [duplicate] 【发布时间】:2012-03-31 20:39:57 【问题描述】:

可能重复:Programmatically detect if app is being run on device or simulator

如何通过代码检测我的应用是在模拟器上运行还是在设备上运行。

【问题讨论】:

看到这个了吗?? ***.com/questions/5775420/… 重复了很多帖子:***.com/questions/5122149/…、***.com/questions/5775420/…、***.com/questions/458304/… @Fulvio 很抱歉,如果这听起来很刺耳。这个问题在 SO 上被问了很多。难道我们不应该在发布之前搜索与我们的问题相关的现有帖子吗? ***.com/questions/458304/…看看 【参考方案1】:

请记住,UIDevice 已经为您提供了有关设备本身的信息。

[[UIDevice currentDevice] model]

您还可以使用以下内容:

TARGET_IPHONE_SIMULATOR 告诉你是否在 iPhone 模拟器中。

TARGET_OS_IPHONE 告诉您您正在使用 iPhone 而不是 MacOS。

#if TARGET_IPHONE_SIMULATOR

    NSLog(@"Running in Simulator - no app store or giro");

#else

    NSLog(@"Running on the Device");

#endif

只对设备感兴趣时

#if !(TARGET_IPHONE_SIMULATOR)

    NSLog(@"Running on device");

#endif

【讨论】:

【参考方案2】:

你可以使用这个常量

#if TARGET_OS_SIMULATOR
    NSLog(@"This is simulator mode....");
#else
    NSLog(@"This is device mode....");
#endif

【讨论】:

【参考方案3】:

相同的编译应用不能在模拟器和 ios 设备上运行,因为 CPU 指令集完全不同(x86 与 ARM)。 (...除非您正在使用 lipo 构建某种非常奇怪的超级通用二进制文件)

有几种方法可以确定应用程序是否针对 x86 编译。一种是添加不同的运行时代码,具体取决于许多预定义的编译器预处理器宏之一。您可以通过在终端命令行上键入以下内容来获取 x86 编译的预处理器宏列表:

gcc -arch i386 -dM -E -

【讨论】:

以上是关于如何检测应用程序正在模拟器或设备上运行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在少数模拟器上运行,但在真实设备上崩溃 [重复]

iPhone 模拟器 - 如何检测应用程序何时在模拟器上运行(因此可以设置测试数据)?

我们如何以编程方式检测运行设备的iOS版本? [重复]

Android - 如何检测应用程序是否在Nox模拟器上运行?

当我在 Android Studio 中运行 Android 应用程序时,它没有安装在模拟器或设备上

Visual Studio 代码无法检测到模拟器设备或连接的电话