2013-06-03 3 views
-5

Я хочу получить доступ к информации о типе устройства в Xcode, чтобы определить, является ли это iPhone 4, 4S, 5, IPad и т.д.Определение типа устройства IOS в Xcode

Кто-нибудь знает решение?

EDIT: этот вопрос решен. Я использую следующий код, используя ответ:

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

    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; 
    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; 
    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; 
    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; 
    if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; 
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; 
    if ([platform isEqualToString:@"iPod1,1"])  return @"iPod Touch 1G"; 
    if ([platform isEqualToString:@"iPod2,1"])  return @"iPod Touch 2G"; 
    if ([platform isEqualToString:@"iPod3,1"])  return @"iPod Touch 3G"; 
    if ([platform isEqualToString:@"iPod4,1"])  return @"iPod Touch 4G"; 
    if ([platform isEqualToString:@"iPad1,1"])  return @"iPad"; 
    if ([platform isEqualToString:@"iPad1,2"])  return @"iPad (3G)"; 
    if ([platform isEqualToString:@"iPad2,1"])  return @"iPad 2 (WiFi)"; 
    if ([platform isEqualToString:@"iPad2,2"])  return @"iPad 2 (GSM)"; 
    if ([platform isEqualToString:@"iPad2,3"])  return @"iPad 2 (CDMA)"; 
    if ([platform isEqualToString:@"iPad3,1"])  return @"iPad 3 (WiFi)"; 
    if ([platform isEqualToString:@"iPad3,2"])  return @"iPad 3 (GSM)"; 
    if ([platform isEqualToString:@"iPad3,3"])  return @"iPad 3 (CDMA)"; 
    if ([platform isEqualToString:@"i386"])   return @"Simulator"; 

    return platform; 
} 

Я знаю, что это небезопасно решение, но он будет работать сейчас, пока я не сделал с более важными задачами.

+0

Вы действительно хотите эту информацию в Xcode (desktop IDE) или в приложении iOS, созданном с использованием Xcode? –

+1

Вопрос, который так много раз спрашивал. Проверьте этот http://stackoverflow.com/questions/1108859/detect-the-specific-iphone-ipod-touch-model или используйте экран устройства ... – Larme

+0

Невозможно найти, какое устройство вы используете. Лучше пойдите для размера экрана и соответствующим образом обработайте свои взгляды. Поиск устройств - это далеко идущий подход, и Apple не рекомендует его. – Saify

ответ

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

    if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 1G"; 
    if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G"; 
    if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS"; 
    if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4"; 
    if ([platform isEqualToString:@"iPhone3,3"]) return @"Verizon iPhone 4"; 
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; 
    if ([platform isEqualToString:@"iPod1,1"])  return @"iPod Touch 1G"; 
    if ([platform isEqualToString:@"iPod2,1"])  return @"iPod Touch 2G"; 
    if ([platform isEqualToString:@"iPod3,1"])  return @"iPod Touch 3G"; 
    if ([platform isEqualToString:@"iPod4,1"])  return @"iPod Touch 4G"; 
    if ([platform isEqualToString:@"iPad1,1"])  return @"iPad"; 
    if ([platform isEqualToString:@"iPad1,2"])  return @"iPad (3G)"; 
    if ([platform isEqualToString:@"iPad2,1"])  return @"iPad 2 (WiFi)"; 
    if ([platform isEqualToString:@"iPad2,2"])  return @"iPad 2 (GSM)"; 
    if ([platform isEqualToString:@"iPad2,3"])  return @"iPad 2 (CDMA)"; 
    if ([platform isEqualToString:@"iPad3,1"])  return @"iPad 3 (WiFi)"; 
    if ([platform isEqualToString:@"iPad3,2"])  return @"iPad 3 (GSM)"; 
    if ([platform isEqualToString:@"iPad3,3"])  return @"iPad 3 (CDMA)"; 
    if ([platform isEqualToString:@"i386"])   return @"Simulator"; 

    return platform; 
} 
+3

ОЧЕНЬ ВАЖНО: Apple рекомендует НЕ использовать этот код. Это связано с тем, что в некоторых сценариях это может быть обнаружено неправильно. Проверьте сессию 123 WWDC 2011 на 3'30, и вы увидите, что они показывают этот точный код и говорят, что не использовать ... Qouted из вопроса, который вы взяли у него из ..... -_- –

Смежные вопросы