2009-03-27 7 views
22

Estoy tratando de determinar si mi código se está ejecutando en un iPhone o un iPhone3G. Mi primer intento fue utilizar la clase UIDevice en UIKit, pero tanto el iPhone y el iPhone3G devolver las mismas respuestas:¿Cómo saber si su código se ejecuta en un iPhone o un iPhone3G?

NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user 
NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string 
NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS" 
NSLog([[UIDevice currentDevice] systemVersion]); // "2.2.1" 
NSLog([[UIDevice currentDevice] model]); // "iPhone" on both devices 
NSLog([[UIDevice currentDevice] localizedModel]); // "iPhone" on both devices 

Esos son los únicos parámetros que UIDevice le permite consultar.

Miré un poco en Foundation Framework pero todavía no he encontrado las llamadas apropiadas.

Estoy seguro de que hay alguna pieza de hardware que podría consultar (como algo en servicios de localización) pero parece un truco. ¿Alguien sabe una manera simple de determinar esto?

Respuesta

21

El iPhone ejecuta OS X. Here's cómo determinar su plataforma de hardware en un escritorio Macintosh. Here's cómo en un iPhone. Es lo mismo. En resumen, sysctlbyname("hw.machine", str, sz, 0, 0) escribirá el nombre de la plataforma en str. Esto pasa a ser "iPhone1,1" o "iPhone1,2" para iPhone y iPhone 3G, respectivamente.

+0

FYI, iPhone 4 aparece como iPhone3,1 para los curiosos desde '09. – UltimateBrent

+0

¿Qué hay de iPhone 3GS? – Jonny

+0

@Jonny iPhone 3GS se identifica como "iPhone2,1", y el iPhone 4 se identifica como "iPhone3,1". Debería poder encontrar esta información para usted en Google. – ephemient

6

No soy un desarrollador de iPhone, pero la verificación de la plataforma subyacente en lugar de las capacidades de la plataforma es casi siempre la opción incorrecta. Si el iPhone obtiene la funcionalidad que necesita, seguirá sin poder ejecutar. También existe la posibilidad de que tome una decisión incorrecta en el próximo iPhone 4.0 (o como se llame).

+0

Esto es solo para fines de registro, específicamente el registro de quién está usando nuestra aplicación y en qué tipo de plataforma están. Entonces, en este caso, no se realiza ninguna elección o rama en la plataforma, solo un registro. Gracias por el consejo, aunque Steve. – Aftermathew

+0

Bien. En ese caso, la verificación debería estar bien. –

+1

Puede usarlo por motivos de rendimiento. Hay una gran diferencia en la potencia entre iPhone 3G y iPhone 4. Puede empaquetar muchos más efectos para usuarios de iPhone 4. – Jonny

0

Supongo que hay una funcionalidad en el iPhone que no está en el iPhon3G que le preocupa a su software. Mi sugerencia es consultar sobre ese hardware específico en lugar de cambiar el comportamiento del software según la plataforma.

Por ejemplo. en lugar de verificar la disponibilidad del GPS al preguntar, se trata de una consulta de iPhone o iPhone3G sobre la disponibilidad del GPS e ir desde allí. De esta forma su código funcionará en cualquier plataforma (iphone/ipod touch/iphone 3G)

+0

Gracias por el consejo hhafez. Como mencioné en mi comentario anterior a Steve Rowe, esto es solo para fines de registro, así que realmente estoy buscando determinar cuál es la plataforma real. – Aftermathew

Cuestiones relacionadas