2009-09-10 17 views
7

Quiero identificar el dispositivo en el que está instalada mi aplicación. Eso significa que, cuando instale la aplicación en el iphone, debería decirme la información del dispositivo. La información es similar, el dispositivo es 2G, 3G o 3GS.identificando mediante programación el dispositivo iphone

Actualmente solo obtengo el modelo, el nombre, systemName, systemVersion del dispositivo.

Quiero saber que el dispositivo es 2G, 3G o 3GS.

por favor ayúdame.

+1

¿Mi respuesta ayuda? – Oliver

Respuesta

8

En el historial anterior de la programación de Mac, esto siempre se consideró una pregunta incorrecta.

Lo que realmente necesita saber es una información más específica. Haga una pregunta mucho más limitada para cada decisión de comportamiento en su código. Por ejemplo, es posible que necesite saber si el dispositivo tiene GPS o no. Otra es que no debe decidir cómo usar la pila OpenGL en función de qué dispositivo modelo es, sino más bien en la información de capacidades/extensiones de OpenGL que se proporciona.

La información que está obteniendo ahora es de UIDevice, que desafortunadamente es una API mal diseñada. Le proporciona exactamente la información incorrecta en el peor formato posible: cadenas.

Erica Sadun tiene una extensión para UIDevice que puede ser útil here. Es solo un contenedor para sysctlbyname("hw.machine", ...). Esta propiedad es diferente para cada modelo.

Pero, de nuevo, esta suele ser la pregunta incorrecta.

+3

De acuerdo. A menos que esté trabajando en una aplicación que solo inventaria todos los diferentes iPhone en una flota de corporaciones y necesita poder ordenarlos, probablemente no necesite saber si es 3G o 3G, tanto si es compatible con una característica a la que le gustaría acceder Utilice AvailibilityMacros para averiguar si su funcionalidad necesaria es compatible con el dispositivo. – mahboudz

5

Esto es lo que he usado en mi aplicación y funciona muy bien

NSString *deviceType = [UIDevice currentDevice].model; 
NSLog(@"DEVICE TYPE %@", deviceType); 

struct utsname systemInfo; 
uname(&systemInfo); 

    - (NSString *) platformString{ 
NSString *platform = [NSString stringWithCString:systemInfo.machine 
            encoding:NSUTF8StringEncoding];  
NSLog(@"type ...%@", platform); 


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:@"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:@"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:@"i386"])   return @"Simulator"; 
return platform; 
} 

creo que sirve

+1

¡Hola, hermano! ¡Esto me ayudó! Muchas gracias ! :) –

0

hice esto, que incluso le muestra el número de modelo:

struct utsname systemInfo; 
    uname(&systemInfo); 

    NSString *modelName = [NSString stringWithCString:systemInfo.machine 
              encoding:NSUTF8StringEncoding]; 

    NSString *machinename = [NSString stringWithCString:systemInfo.machine 
               encoding:NSUTF8StringEncoding]; 


    NSString *modelnumber = @"Not listed"; 

    //Simulator 
    if([modelName isEqualToString:@"i386"] || [modelName isEqualToString:@"x86_64"]) { 
     modelName = @"iPhone Simulator"; 
     modelnumber = @"XXXXX"; 

    } 

    //iPhone 
    else if([modelName isEqualToString:@"iPhone1,1"]) { 
     modelName = @"iPhone"; 
     modelnumber = @"A1203"; 
    } 
    else if([modelName isEqualToString:@"iPhone1,2"]) { 
     modelName = @"iPhone 3G"; 
     modelnumber = @"A1241/A1324"; 
    } 
    else if([modelName isEqualToString:@"iPhone2,1"]) { 
     modelName = @"iPhone 3GS"; 
     modelnumber = @"A1303/A1325"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,1"]) { 
     modelName = @"iPhone 4 (GSM)"; 
     modelnumber = @"A1332"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,2"]) { 
     modelName = @"iPhone 4 GSM Rev A"; 
     modelnumber = @"Not listed"; 
    } 
    else if([modelName isEqualToString:@"iPhone3,3"]) { 
     modelName = @"iPhone 4 (CDMA)"; 
     modelnumber = @"A1349"; 
    } 
    else if([modelName isEqualToString:@"iPhone4,1"]) { 
     modelName = @"iPhone 4S"; 
     modelnumber = @"A1387/A1431"; 
    } 
    else if([modelName isEqualToString:@"iPhone5,1"]) { 
     modelName = @"iPhone 5 (GSM)"; 
     modelnumber = @"A1428"; 
    } 
    else if([modelName isEqualToString:@"iPhone5,2"]) { 
     modelName = @"iPhone 5 (GSM+CDMA)"; 
     modelnumber = @"A1429/A1442"; 
    } 

    //iPod touch 
    else if([modelName isEqualToString:@"iPod1,1"]) { 
     modelName = @"iPod touch 1G"; 
     modelnumber = @"A1213"; 
    } 
    else if([modelName isEqualToString:@"iPod2,1"]) { 
     modelName = @"iPod touch 2G"; 
     modelnumber = @"A1288"; 
    } 
    else if([modelName isEqualToString:@"iPod3,1"]) { 
     modelName = @"iPod touch 3G"; 
     modelnumber = @"A1318"; 
    } 
    else if([modelName isEqualToString:@"iPod4,1"]) { 
     modelName = @"iPod touch 4G"; 
     modelnumber = @"A1367"; 
    } 
    else if([modelName isEqualToString:@"iPod5,1"]) { 
     modelName = @"iPod touch 5G"; 
     modelnumber = @"A1421"; 
    } 

    //iPad 
    else if([modelName isEqualToString:@"iPad1,1"]) { 
     modelName = @"iPad 1G"; 
     modelnumber = @"A1219/A1337"; 
    } 
    else if([modelName isEqualToString:@"iPad2,1"]) { 
     modelName = @"iPad 2 (WiFi)"; 
     modelnumber = @"A1395"; 
    } 
    else if([modelName isEqualToString:@"iPad2,2"]) { 
     modelName = @"iPad 2 (GSM)"; 
     modelnumber = @"A1396"; 
    } 
    else if([modelName isEqualToString:@"iPad2,3"]) { 
     modelName = @"iPad 2 (CDMA)"; 
     modelnumber = @"A1397"; 
    } 
    else if([modelName isEqualToString:@"iPad2,4"]) { 
     modelName = @"iPad 2 (WiFi + Rev A)"; 
     modelnumber = @"A1395"; 
    } 
    else if([modelName isEqualToString:@"iPad3,1"]) { 
     modelName = @"iPad 3 (WiFi)"; 
     modelnumber = @"A1416"; 
    } 
    else if([modelName isEqualToString:@"iPad3,2"]) { 
     modelName = @"iPad 3 (GSM+CDMA)"; 
     modelnumber = @"A1403"; 
    } 
    else if([modelName isEqualToString:@"iPad3,3"]) { 
     modelName = @"iPad 3 (GSM)"; 
     modelnumber = @"A1430"; 
    } 
    else if([modelName isEqualToString:@"iPad3,4"]) { 
     modelName = @"iPad 4 (WiFi)"; 
     modelnumber = @"A1458"; 
    } 
    else if([modelName isEqualToString:@"iPad3,5"]) { 
     modelName = @"iPad 4 (GSM)"; 
     modelnumber = @"A1459"; 
    } 
    else if([modelName isEqualToString:@"iPad3,6"]) { 
     modelName = @"iPad 4 (GSM+CDMA)"; 
     modelnumber = @"A1460"; 
    } 

    //iPad mini 
    else if([modelName isEqualToString:@"iPad2,5"]) { 
     modelName = @"iPad mini (WiFi)"; 
     modelnumber = @"A1432"; 
    } 
    else if([modelName isEqualToString:@"iPad2,6"]) { 
     modelName = @"iPad mini (GSM)"; 
     modelnumber = @"A1454"; 
    } 
    else if([modelName isEqualToString:@"iPad2,7"]) { 
     modelName = @"iPad mini (GSM+CDMA)"; 
     modelnumber = @"A1455"; 
    } 

    //Apple TV, just for funn:) 
    else if([modelName isEqualToString:@"AppleTV2,1"]) { 
     modelName = @"Apple TV 2G"; 
     modelnumber = @"A1378"; 
    } 
    else if([modelName isEqualToString:@"AppleTV3,1"]) { 
     modelName = @"Apple TV 3G"; 
     modelnumber = @"A1427"; 
    } 
    else if([modelName isEqualToString:@"AppleTV3,2"]) { 
     modelName = @"Apple TV 3G (Rev A)"; 
     modelnumber = @"A1469"; 
    } 

    NSLog(@"Device model: %@/ %@ /%@",modelName,machinename,modelnumber); 
Cuestiones relacionadas