有啥方法可以区分在 iPhone 模拟器和实时设备上运行的代码吗? [复制]

Posted

技术标签:

【中文标题】有啥方法可以区分在 iPhone 模拟器和实时设备上运行的代码吗? [复制]【英文标题】:Any way to differentiate between code running on a iPhone simulator vs live device? [duplicate]有什么方法可以区分在 iPhone 模拟器和实时设备上运行的代码吗? [复制] 【发布时间】:2013-04-25 11:50:24 【问题描述】:

我的 ios 应用程序中有一些逻辑,我希望在 iPhone 模拟器上测试时和在实时设备上运行时执行不同的逻辑。

有没有办法在目标 C 中确定逻辑是在其中一个上执行的?

目前,我在部署到物理 iPhone 之前注释掉了一些代码。不方便。

顺便说一句,(稍微)不同的执行路径背后的原因是我的应用程序使用了与时间/日期相关的数据。在模拟器上,我加载了一个静态数据集,因此我的测试将其考虑在内(即不使用当前系统日期等)。

在实时设备上,数据始终是最新的,因此不会出现此类问题。

【问题讨论】:

谢谢。有趣的是,当我早些时候搜索时,我没有找到那个答案。应该更努力地搜索:-) 【参考方案1】:

根据TARGET_IPHONE_SIMULATOR 宏,它确实应该在编译时知道。如果您需要进行运行时检查:

bool is_simulator()

  NSString *model = [[UIDevice currentDevice] model];
  return [model isEqualToString:@"iPhone Simulator"];

或者不使用 Objective C,你也许可以使用 sysctl,如下所示:

static int32_t sysctl_int32(const char* name)

  int32_t val = 0;
  size_t size = sizeof(val);

  sysctlbyname(name, &val, &size, NULL, 0);

  return val;


bool is_simulator()

  int32_t cpu_type = sysctl_int32("hw.cputype");
  return (cpu_type == CPU_TYPE_I386 || cpu_type == CPU_TYPE_X86_64)

【讨论】:

【参考方案2】:

试试

if (TARGET_IPHONE_SIMULATOR)
     //Running on simulator
else
     //Real one

【讨论】:

【参考方案3】:

使用

#if TARGET_IPHONE_SIMULATOR
    // Using Simulator
#else
// Using device

【讨论】:

以上是关于有啥方法可以区分在 iPhone 模拟器和实时设备上运行的代码吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有 IPHONE 的亚马逊 sns 是不是可以离线使用..如果没有,有啥方法可以实现吗?

iPhone SDK:可以通过iPad设备访问Localhost吗? (调试时)

如何通过 JS 区分 iPhone 5 和 iPhone SE?

iPhone 6 设备和模拟器上的快照方法损坏

背景位置在 iphone 设备中不起作用。有啥办法可以解决这个问题吗?

以编程方式通过 USB 模拟 iPhone(真实设备,而非模拟器)位置