Определить конкретную модель iPhone /iPod touch [копия]

  

Возможный дубликат:
Определить устройство (iPhone, iPod Touch) с помощью iPhone SDK

Я делаю игру, в которой используются возможности одноранговой связи iPhone (и, возможно, iPod touch 2-го поколения). Однако, чтобы пользователи не пытались играть в мультиплеер на iPod 1st gen и iPhone 2G, мне нужно проверить конкретную модель устройства.

[[UIDevice currentDevice] model] только скажет мне, является ли устройство «iPhone» или «iPod touch». Есть ли способ проверить конкретную модель устройства, например: «iPhone 3GS», «iPod touch 1-го поколения» или что-то подобное.

EDIT:

Существует категория для UIDevice (я думаю, что она создана Эрикой Садун, я не беру на себя ответственность за это), которая использует следующий код для получения конкретной модели устройства. Вы можете найти всю категорию здесь вместе с другими полезными материалами: https://github.com/erica/uidevice -продолжении

#include <sys/types.h>
#include <sys/sysctl.h>

@implementation UIDevice (Hardware)

/*
 Platforms
 iPhone1,1 -> iPhone 1G
 iPhone1,2 -> iPhone 3G 
 iPod1,1   -> iPod touch 1G 
 iPod2,1   -> iPod touch 2G 
*/

- (NSString *) platform
{
  size_t size;
  sysctlbyname("hw.machine", NULL, &size, NULL, 0);
  char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
  free(machine);
  return platform;
}

Это работает, и приложения, использующие это, были недавно одобрены в AppStore.

105 голосов | спросил Dimitris 10 J000000Friday09 2009, 14:40:36

6 ответов


0

Наиболее полная категория UIDevice (Hardware), вероятно, http://github.com/erica/uidevice расширение / (Эрика Садун):

[[UIDevice currentDevice] platformType]   // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"
ответил djromero 29 J000000Thursday10 2010, 21:32:34
0

Номер модели устройства можно получить с помощью uname из sys/utsname.h. Например:

#import <sys/utsname.h>

NSString*
machineName()
{
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine
                              encoding:NSUTF8StringEncoding];
}

Результат должен быть следующим:

@ "i386" на симуляторе
@ «iPod1,1» на iPod Touch
@ «iPod2,1» на iPod Touch второго поколения
@ «iPod3,1» на iPod Touch третьего поколения
@ «iPod4,1» на iPod Touch четвертого поколения
@ "iPhone1,1" на iPhone
@ "iPhone1,2" на iPhone 3G
@ "iPhone2,1" на iPhone 3GS
@ "iPad1,1" на iPad
@ "iPad2,1" на iPad 2
@ "iPad3,1" на iPad 3 (он же новый iPad)
@ "iPhone3,1" на iPhone 4
@ "iPhone4,1" на iPhone 4S
@ "iPhone5,1" на iPhone 5
@ "iPhone5,2" на iPhone 5
ответил Will Harris 10 J000000Friday09 2009, 15:00:56
0

Как насчет этого кода, если новая версия была выпущена, вы будете идентифицировать с последним известным устройством

#include <sys/types.h>
#include <sys/sysctl.h>

- (NSString *)getModel {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *model = malloc(size);
    sysctlbyname("hw.machine", model, &size, NULL, 0);
    NSString *sDeviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
    free(model);                              
    if ([sDeviceModel isEqual:@"i386"])      return @"Simulator";  //iPhone Simulator
    if ([sDeviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G";   //iPhone 1G
    if ([sDeviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G";   //iPhone 3G
    if ([sDeviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS";  //iPhone 3GS
    if ([sDeviceModel isEqual:@"iPhone3,1"]) return @"iPhone4 AT&T";  //iPhone 4 - AT&T
    if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone4 Other";  //iPhone 4 - Other carrier
    if ([sDeviceModel isEqual:@"iPhone3,3"]) return @"iPhone4";    //iPhone 4 - Other carrier
    if ([sDeviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S";   //iPhone 4S
    if ([sDeviceModel isEqual:@"iPhone5,1"]) return @"iPhone5";    //iPhone 5 (GSM)
    if ([sDeviceModel isEqual:@"iPod1,1"])   return @"iPod1stGen"; //iPod Touch 1G
    if ([sDeviceModel isEqual:@"iPod2,1"])   return @"iPod2ndGen"; //iPod Touch 2G
    if ([sDeviceModel isEqual:@"iPod3,1"])   return @"iPod3rdGen"; //iPod Touch 3G
    if ([sDeviceModel isEqual:@"iPod4,1"])   return @"iPod4thGen"; //iPod Touch 4G
    if ([sDeviceModel isEqual:@"iPad1,1"])   return @"iPadWiFi";   //iPad Wifi
    if ([sDeviceModel isEqual:@"iPad1,2"])   return @"iPad3G";     //iPad 3G
    if ([sDeviceModel isEqual:@"iPad2,1"])   return @"iPad2";      //iPad 2 (WiFi)
    if ([sDeviceModel isEqual:@"iPad2,2"])   return @"iPad2";      //iPad 2 (GSM)
    if ([sDeviceModel isEqual:@"iPad2,3"])   return @"iPad2";      //iPad 2 (CDMA)

    NSString *aux = [[sDeviceModel componentsSeparatedByString:@","] objectAtIndex:0];

//If a newer version exist
    if ([aux rangeOfString:@"iPhone"].location!=NSNotFound) {
        int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
        if (version == 3) return @"iPhone4"
        if (version >= 4) return @"iPhone4s";

    }
    if ([aux rangeOfString:@"iPod"].location!=NSNotFound) {
        int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
        if (version >=4) return @"iPod4thGen";
    }
    if ([aux rangeOfString:@"iPad"].location!=NSNotFound) {
        int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
        if (version ==1) return @"iPad3G";
        if (version >=2) return @"iPad2";
    }
    //If none was found, send the original string
    return sDeviceModel;
}
ответил Rodrigo 12 MonEurope/Moscow2011-12-12T21:59:07+04:00Europe/Moscow12bEurope/MoscowMon, 12 Dec 2011 21:59:07 +0400 2011, 21:59:07
0
BOOL hasHighResScreen = NO;
if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
    CGFloat scale = [[UIScreen mainScreen] scale];
    if (scale > 1.0) {
        hasHighResScreen = YES;
    }
}
ответил fuzz 4 SatEurope/Moscow2010-12-04T16:01:09+03:00Europe/Moscow12bEurope/MoscowSat, 04 Dec 2010 16:01:09 +0300 2010, 16:01:09
0

iPhone 4 - это iPhone3,1 и iPhone3,2
iPhone 4S - это iPhone4,1
iPad 2 - это iPad2,1, iPad2,2 и iPad2,3, в зависимости от версии (GSM и т. д.)
iPad 3 - это iPad3,1, iPad3,2 и iPad3,3, в зависимости от версии (GSM и т. д.)

См. секреты Iphone (прокрутите вниз до «внутренних кодов продуктов»)

Еще один хороший источник: everyiphone.com

ответил Sten 20 J0000006Europe/Moscow 2011, 13:14:19
0
NSString* valueDevice = [[UIDevice currentDevice] model];

, а затем проверьте, совпадает ли строка с тем устройством, которое вы ищете:

if([email protected]"iPod1,1" ) 
{}

и тебе надо идти

ответил Ajith 17 FebruaryEurope/MoscowbThu, 17 Feb 2011 15:08:32 +0300000000pmThu, 17 Feb 2011 15:08:32 +030011 2011, 15:08:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132