Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 有没有办法区分iPhone模拟器上运行的代码和实时设备上运行的代码?_Ios_Objective C - Fatal编程技术网

Ios 有没有办法区分iPhone模拟器上运行的代码和实时设备上运行的代码?

Ios 有没有办法区分iPhone模拟器上运行的代码和实时设备上运行的代码?,ios,objective-c,Ios,Objective C,我的iOS应用程序中有一些逻辑,我希望在iPhone模拟器上测试时与在实时设备上运行时执行不同的逻辑 在目标C中,是否有任何方法可以确定逻辑是在一个上执行还是在另一个上执行 目前,在部署到物理iPhone之前,我会注释掉一些代码。不方便 顺便说一句,执行路径(稍微)不同的原因是我的应用程序使用的数据依赖于时间/日期。在模拟器上,我加载了一个静态数据集,所以我的测试考虑到了这一点(即不使用当前系统日期等) 在实时设备上,数据总是最新的,因此没有此类问题。试试看 if (TARGET_IPHONE_

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

在目标C中,是否有任何方法可以确定逻辑是在一个上执行还是在另一个上执行

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

顺便说一句,执行路径(稍微)不同的原因是我的应用程序使用的数据依赖于时间/日期。在模拟器上,我加载了一个静态数据集,所以我的测试考虑到了这一点(即不使用当前系统日期等)

在实时设备上,数据总是最新的,因此没有此类问题。

试试看

if (TARGET_IPHONE_SIMULATOR){
     //Running on simulator
}else{
     //Real one
}
使用


根据
TARGET\u IPHONE\u 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)
}

谢谢有趣的是,我之前搜索时没有找到答案。应该更努力地搜索:-)
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)
}