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

4

3 回答 3

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

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

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

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

于 2012-04-11T06:22:41.993 回答
1

该类UIDevice可以告诉您很多关于当前设备及其操作系统的信息,并且可能比 POSIX APIunamesysctl.

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

相反,测试您需要的功能UIDevice了解屏幕尺寸和外形尺寸(又名“用户界面习语”,iPhone/iPod 与 iPad)。定位服务可以告诉您设备可以提供什么样的定位精度。AVFoundation 可以告诉您是否拥有仅静态或摄像机以及它可以提供的分辨率。一般来说,您可以查看您正在使用的 API 来确定设备是否支持该功能。

于 2012-04-11T06:56:09.823 回答
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
于 2012-04-11T07:04:34.920 回答