2011-11-07 26 views
8

Necesito distinguir iPhone 4S de iPhone 4. Revisé las publicaciones y obtuve el siguiente código. Por favor, avíseme si esta es la única forma de hacerlo y confirme que Apple no tiene ningún problema si se usa.Distinga entre iPhone 4 y iPhone 4S

  struct utsname systemInfo; 
      uname(&systemInfo); 
      NSString *iPhoneVersion = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; 

Para 4S, la cadena de iPhoneVersion me dará iPhone4,1 y iPhone 4 dirá iPhone3,1.

Gracias por sus sugerencias.

+0

posible duplicado de [¿Cómo saber si su código se está ejecutando en un iPhone o un iPhone3G?] (Http://stackoverflow.com/questions/688001/how-to-tell-if-your-code-is- running-on-a-iphone-or-a-iphone3g) –

+2

¿Me atrevo a preguntar por qué? –

Respuesta

6

iPhone 4 también se puede llamar iPhone3,3 en el caso del modelo CDMA (here is a not-quite-up-to-date list). En general, es mucho más seguro y "compatible con versiones posteriores" para probar las capacidades de la plataforma (por ejemplo, [someSystemClass respondsToSelector:@selector(someMethodName)] o similar) en lugar de determinar manualmente las capacidades en función del modelo del dispositivo. ¿Podría decir por qué necesita distinguir entre iPhone 4 y 4S?

+0

Una razón por la que podría pensar que el OP querría es informar estadísticas de uso por dispositivo. – jbrennan

+2

Si informa estadísticas de uso, entonces es mucho mejor simplemente usar el valor bruto del tipo de hardware y luego ordenarlo en el servidor al que está informando. Entonces no tiene que actualizar su aplicación cada vez que Apple presenta un nuevo hardware. –

+0

@Martin: Quiero mostrar las resoluciones de las fotos, la original y la mediana para los dispositivos iPhone. Usando el método [[UIScreen mainScreen] scale], podría separar 3GS del iPhone 4. – Sana

5

Como otros han sugerido, en lugar de seleccionar para un dispositivo específico (que se romperá cuando Apple distribuya las variaciones o el siguiente modelo), debe enfocarse en las capacidades que necesita. Casi las únicas aplicaciones de iPhone que se rompieron cuando se lanzó el iPad fueron las que sí detectaron el modelo de hardware, porque no tenían idea de que el iPad venía y por lo tanto no podían buscar esa ID de dispositivo específica.

Si su aplicación absolutamente no se puede ejecutar en un iPhone 4, debido a los requisitos de hardware específicos como Bluetooth 4.0 apoyo de baja potencia, que sería mejor servido para añadir el bluetooth-le a su UIRequiredDeviceCapabilities en su Info.plist, como describo here . Eso evitará que los usuarios instalen su aplicación en un dispositivo que no sea 4S, pero deja abierta la posibilidad de que esto funcione para futuros iPhones que probablemente tengan hardware Bluetooth Low Power.

Si necesita escalar las capacidades del hardware para tomar ventaja de la A5, es posible que desee ver en la comprobación de apoyo a algunas de las nuevas extensiones OpenGL ES que la A5 dispone, mediante el uso de glGetString(GL_EXTENSIONS) y la comprobación de extensiones como APPLE_shadow_samplers. Estas extensiones no están presentes en el A4, pero están en el A5 y deberían estar ahí para las próximas dos iteraciones del hardware de Apple.

Es posible que también pueda utilizar el nuevo marco Core Bluetooth levemente documentado para probar la presencia del hardware 4.0 Low Power en su dispositivo en tiempo de ejecución, pero no he pasado mucho tiempo con ese marco.

Cuestiones relacionadas