-1

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

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

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

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

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

4

3 回答 3

1

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

bool is_simulator()
{
  NSString *model = [[UIDevice currentDevice] model];
  return [model isEqualToString:@"iPhone Simulator"];
}

或者不使用目标 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)
}
于 2013-05-01T13:26:57.447 回答
0

尝试

if (TARGET_IPHONE_SIMULATOR){
     //Running on simulator
}else{
     //Real one
}
于 2013-05-01T13:20:32.470 回答
0

利用

#if TARGET_IPHONE_SIMULATOR
    // Using Simulator
#else
// Using device
于 2013-05-01T13:20:39.763 回答