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