我的 iOS 应用程序中有一些逻辑,我希望在 iPhone 模拟器上进行测试时与在实时设备上运行时执行不同的操作。
有没有办法在目标 C 中确定逻辑是在其中一个上执行的?
目前,我在部署到物理 iPhone 之前注释掉了一些代码。不方便。
顺便说一句,(稍微)不同的执行路径背后的原因是我的应用程序使用了与时间/日期相关的数据。在模拟器上,我加载了一个静态数据集,因此我的测试将其考虑在内(即不使用当前系统日期等)。
在实时设备上,数据始终是最新的,因此不会出现此类问题。
我的 iOS 应用程序中有一些逻辑,我希望在 iPhone 模拟器上进行测试时与在实时设备上运行时执行不同的操作。
有没有办法在目标 C 中确定逻辑是在其中一个上执行的?
目前,我在部署到物理 iPhone 之前注释掉了一些代码。不方便。
顺便说一句,(稍微)不同的执行路径背后的原因是我的应用程序使用了与时间/日期相关的数据。在模拟器上,我加载了一个静态数据集,因此我的测试将其考虑在内(即不使用当前系统日期等)。
在实时设备上,数据始终是最新的,因此不会出现此类问题。
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)
}
尝试
if (TARGET_IPHONE_SIMULATOR){
//Running on simulator
}else{
//Real one
}
利用
#if TARGET_IPHONE_SIMULATOR
// Using Simulator
#else
// Using device