2010-10-21 7 views

Respuesta

7

Probar:

char deviceString[256]; 
size_t size = 255; 
sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
if (size > 255) { size = 255; } 
sysctlbyname("hw.machine", deviceString, &size, NULL, 0); 
if (strcmp(deviceString,"iPhone1,1") == 0) { etc... } // 2G 

1,2 es un 3G, 2,1 es un 3GS, 3,1 es un i4, etc.

+0

Intenté esto, ''sysctlbyname 'no fue declarado en este alcance'. ¿Cómo lo declaro? –

+1

Agregue: #include al archivo .h relevante. – hotpaw2

+0

Gracias. ¿Puedes encontrar el iPod/Pad de la misma manera? –

1

-[UIDevice model], pero no estoy seguro si devuelve algo más específico que "iPhone" o "iPod Touch".

+0

Sí lo intentó, solo le da iPhone/iPod/iPad. –

1

Pensé que iTunes/Xcode Organizer ya lo hizo por algún motivo (al menos creo recordar que identificó correctamente mi viejo iPod Touch como primera generación), definitivamente este no es el caso de mi iPhone 3GS. Tampoco lo hace la utilidad de configuración de iPhone.

Así que encendí System Profiler para ver si el dispositivo aparece en la lista USB; lo hace. También muestra el "ID del producto" (en mi caso, 0x1294). He escrito esto en Google y se acercó con esto:

http://theiphonewiki.com/wiki/index.php?title=Normal_Mode

ID de dispositivo

Parece que utiliza diferentes ID de dispositivo:

iPhone - 0x1290

iPod touch - 0x1291

iPhone 3G - 0x1292

iPod touch 2G - 0x1293

iPhone 3GS - 0x1294

iPod touch 3G - 0x1299

iPad - 0x129a

iPhone 4 -

iPod touch 4G - 0x129e

Apple TV 2G -

6

creo que esto ya se contesta aquí: Determine device (iPhone, iPod Touch) with iPhone SDK, aunque he añadido un poco a ella:

- (NSString *) platformString{ 
NSString *platform = [self 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:@"i386"]) return @"iPhone Simulator"; 
return platform; 

}

para dar cuenta de las últimas incorporaciones a la familia. Puede consultar everyipod.com, por ejemplo, specs for iPhone 4 para obtener cadenas de plataforma.

+1

¡Oye gracias, ya has hecho esto! –

+0

@westsider ¿Tiene el iPhone 4GS la cadena de plataforma 'iPhone3,2'? – Besi

+0

No puedo decir con certeza, pero el sitio web mencionado anteriormente dice que iPhone 4S (no GS) tiene cadena de plataforma iPhone 4,1. Por favor vea: http://www.everymac.com/systems/apple/iphone/specs/apple-iphone-4s-specs.html HTH. – westsider

Cuestiones relacionadas