有啥方法可以区分在 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?