2012-04-11 48 views
1

在我的应用程序中,我需要找到正在使用哪个ios设备。现在我工作在ios sdk 5.1查找使用哪个ios设备

struct utsname systemInfo; 
uname(&systemInfo); 
NSString *platform=[NSString stringWithCString:systemInfo.machine 
             encoding:NSUTF8StringEncoding]; 

上面的代码是在ios SDK 5.0中完美的工作,但不工作在ios 5.1中。 我怎样才能找到IOS 5.1一样,iPhone 3/3G/4/4S或iPad/IPAD2等设备版本..

+0

由于问题已经得到解答。但是为了将来,对于所有设备统计信息,您可以使用发布的代码。尝试一次并检查一次。 – Kuldeep 2012-04-11 07:06:32

回答

4
NSString *device = [[UIDevice currentDevice]model ] ; 
NSLog(@"%@",device); 

它给你的设备名称(iPhone,iPad的)

float version = [[[UIDevice currentDevice] systemVersion] floatValue]; 
NSLog(@"%f",version); 

它给你ios版本。不是设备名称。

+0

@Chinthu:谢谢你:)它工作 – iphonecool 2012-04-11 06:52:12

+0

@iphonecool ty buddy ... :) – 2012-04-11 06:53:26

+0

@Chinthu如果设备是iPhone 4s na.what是它显示的版本 – iphonecool 2012-04-11 07:02:40

1

UIDevice类可以告诉你很多关于当前设备及其操作系统,并且大概可以更好地信任回报未来的设备/ iOS的版本比POSIX API,如unamesysctl有用的信息。

但是,您不应该使用设备名称来确定是否激活您的应用程序中的功能。这会导致您的应用在较新的设备上失败,并且您的客户将不高兴。例如,前段时间,一些应用程序正在测试名为“iPhone 4”的设备,以启用Retina显示图形......当第4代iPod touch和iPhone 4S配备类似的显示器时,这些应用程序无法很好地适应。

相反,测试能力,你需要。 了解屏幕尺寸和外形因素(又称“用户界面习惯用语”,iPhone/iPod vs iPad)。位置服务可以告诉你设备可以提供什么样的位置精度。 AVFoundation可以告诉你是否有静止或摄像机以及它可以提供哪些分辨率。通常,您可以查看您用于功能的API,以确定设备是否可以支持它。

+0

旧的回答,但他肯定有一点,没有人能保证posix apis将来可以访问,猜测未知futuredevice可能会很容易出错。的UIDevice。 – 2013-12-03 08:31:27

0
// To decide whether device is iPhone-4 or 3 
#include <sys/types.h> 
#include <sys/sysctl.h> 


@interface UIDevice(Hardware) 

- (NSString *) platform; 

- (BOOL)hasRetinaDisplay; 

- (BOOL)hasCamera; 



@end 

@implementation UIDevice(Hardware) 

- (NSString *) platform{ 
     int mib[2]; 
     size_t len; 
     char *machine; 

     mib[0] = CTL_HW; 
     mib[1] = HW_MACHINE; 
     sysctl(mib, 2, NULL, &len, NULL, 0); 
     machine = malloc(len); 
     sysctl(mib, 2, machine, &len, NULL, 0); 

     NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding]; 
     free(machine); 
     return platform; 
} 



- (BOOL)hasRetinaDisplay { 
      NSString *platform = [self platform]; 
      BOOL ret = YES; 
      if ([platform isEqualToString:@"iPhone1,1"]) { 
       ret = NO; 
      } 
      else 
       if ([platform isEqualToString:@"iPhone1,2"]) ret = NO; 
      else 
       if ([platform isEqualToString:@"iPhone2,1"]) ret = NO; 
      else 
       if ([platform isEqualToString:@"iPod1,1"])  ret = NO; 
      else 
       if ([platform isEqualToString:@"iPod2,1"])  ret = NO; 
      else 
       if ([platform isEqualToString:@"iPod3,1"])  ret = NO; 
     return ret; 
} 

- (BOOL)hasMultitasking { 
     if ([self respondsToSelector:@selector(isMultitaskingSupported)]) { 
      return [self isMultitaskingSupported]; 
     } 
     return NO; 


} 

- (BOOL)hasCamera { 
     BOOL ret = NO; 
     // check camera availability 
     return ret; 
} 

@end