如何检测应用程序在模拟器或设备上运行

25

2
看到这个了吗?https://dev59.com/t2025IYBdhLWcg3w1JeG - Vin
1
重复的帖子太多了:https://dev59.com/A2435IYBdhLWcg3w9E9Y,https://dev59.com/t2025IYBdhLWcg3w1JeG,https://dev59.com/hXRB5IYBdhLWcg3w9Lvn - Yama
1
@Fulvio,如果听起来有点严厉,我很抱歉。这个问题在SO上已经被问过很多次了。在发帖之前,我们不是应该先搜索与我们问题相关的已有帖子吗? - Vin
请看此链接:https://dev59.com/hXRB5IYBdhLWcg3w9Lvn - rashii
3个回答

84

请记住,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

9
您可以使用这个常量。
#if TARGET_OS_SIMULATOR
    NSLog(@"This is simulator mode....");
#else
    NSLog(@"This is device mode....");
#endif

1

由于 CPU 指令集完全不同(x86 vs ARM),因此相同编译的应用程序无法同时在模拟器和 iOS 设备上运行。(除非您使用 lipo 构建某种非常奇怪的超级通用二进制文件)

有几种方法可以确定应用程序是否为 x86 编译。其中一种是添加运行时代码,其根据许多预定义的编译器预处理器宏之一而有所不同。您可以通过在终端命令行上输入以下内容来获取 x86 编译的预处理器宏列表:

gcc -arch i386 -dM -E - < /dev/null | sort


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接