在我的应用程序中,我需要找到正在使用的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等。
答案 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