找出正在使用的ios设备

时间:2012-04-11 06:19:30

标签: iphone version device ios5.1

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

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等。

3 个答案:

答案 0 :(得分:4)

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

它为您提供设备名称(iPhone,iPad)

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

它为您提供ios版本。不是设备名称。

答案 1 :(得分:1)

UIDevice类可以告诉您有关当前设备及其操作系统的大量信息,并且可能更好地信任在未来的设备/ iOS版本上返回有关信息,而不是像uname和{{}这样的POSIX API。 1}}。

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

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

答案 2 :(得分: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