在xcode 7 beta版中无法识别iPhone和iOS模拟器之间的区别?

时间:2015-09-17 09:40:37

标签: ios

我正在使用以下代码来调用app.In xcode 5它运行正常。但是在xcode 7 beta版本中,我在iOS模拟器上运行我的应用程序,并且if ([[device model] isEqualToString:@"iPhone"] )对于模拟器来说是正确的。怎么样?

 if ([[device model] isEqualToString:@"iPhone"] )
 {  
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel:130-032-2837"]]];
 }
 else
 {
      UIAlertView *notPermitted=[[UIAlertView alloc] initWithTitle:@"Error" message:@"Your device doesn't support this feature." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
      [notPermitted show];
 }

3 个答案:

答案 0 :(得分:0)

它无法解决您无法检测到模拟器的问题,但我很确定如果您之前询问是否可以打开该URL,则在模拟器上它将返回no。

- canOpenURL:

文档here

答案 1 :(得分:0)

设备或模拟器定义为基于所选目标的构建时间。这是通过在UIDevice上添加类别来实现此目的的:

@implementation UIDevice (Addition)


- (BOOL)isSimulator {
#if TARGET_IPHONE_SIMULATOR
    return true;
#else
    return false;
#endif  
}


+ (BOOL)isSimulator {
    return [[self currentDevice] isSimulator];
}

然后简单地致电:

[UIDevice isSimulator]

答案 2 :(得分:0)

如果您只是想检查一下您是在模拟器中运行还是在真实设备上运行,我强烈建议您使用TARGET_OS_SIMULATOR定义(包含在SDK中)

像这样使用:

#if !(TARGET_IPHONE_SIMULATOR)
//use case for iPhone
#else
//use case for simulator
#endif

我在当前项目Xcode 7iOS9 SDK

中使用它

编辑: 正如trojanfoe所说,这是一个编译时检查,而不是运行时检查。

如果您想要对模拟器进行运行时特定检查,可以使用:

    if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound) {
}