Me preguntaba si es posible determinar qué tipo de iPhone (por ejemplo) es el dispositivo actual. Sé que es posible obtener el modelo a través del
NSString *deviceType = [[UIDevice currentDevice] model];
cual solo devolveré si tengo un "iPhone" o un "iPod", PERO me preguntaba si es posible detectar / saber si tengo un iPhone 3GS vs. y un iPhone 4 vs. un iPhone 4S (en realidad, todo lo que realmente quiero hacer es determinar si tengo un 3G o no, porque estoy haciendo cosas bastante intensivas en gráficos) .
Así que sí, házmelo saber, ¡gracias!
ios
objective-c
iphone
ipad
Nathan Fraenkel
fuente
fuente
Respuestas:
PRUEBE esta biblioteca: http://github.com/erica/uidevice-extension/ (por Erica Sadun). (La biblioteca tiene entre 7 y 8 años y, por lo tanto, está obsoleta)
(Código de muestra):
O puede usar este método:
Puede obtener el número de modelo del dispositivo usando uname de sys / utsname.h. Por ejemplo:
C objetivo
Swift 3
El resultado debería ser:
fuente
Ampliando la respuesta de OhhMee anterior, agregué algunos a prueba de fallas para admitir dispositivos futuros que (todavía) no están incluidos en la lista:
También omití la información detallada (p. Ej., "Modelo A1507, A1516, A1526 (China), A1529 | Global") y la coloqué en los comentarios, en caso de que desee utilizar esto como cadenas orientadas al usuario y no asustarlas.
Editar: esta respuesta proporciona una implementación similar con Swift 2.
Edición 2: Acabo de agregar los modelos iPad Pro (ambos tamaños). Para referencia futura, los números de modelo / etc. se puede encontrar en The iPhone Wiki .
Edición 3: Agregue soporte para iPhone XS, iPhone XS Max y iPhone XR.
Edición 4: Agregue soporte para iPhone 11, iPhone 11 Pro y iPhone 11 Pro Max.
fuente
deviceName
, cuando tenía la intención de buscarcode
. Alguien sugirió una edición, pero no pude aprobarla antes de que otras personas la rechazaran, así que corrigí la respuesta yo mismo. Gracias a quien lo sugirió.He creado el archivo plist para ayudarlo a obtener el nombre completo de cada dispositivo (código fuente justo al final de mi respuesta)
Según la respuesta de OhhMee , puede usarlo así:
Swift 4.0
No olvide agregar
#import <sys/utsname.h>
su encabezado de puente.C objetivo
El archivo plist:
fuente
[[UIDevice currentDevice] model]
simplemente regresaiPhone
oiPod
no obtiene los números del modelo que le permitirán diferenciar entre diferentes generaciones de dispositivos.Codifique este método:
Y llame al método
[self getModel]
cuando necesite el modelo y obtendrá, por ejemplo: "iPhone5,1" para el iPhone 5 ridículamente delgado y rápido.Una buena práctica es crear una clase llamada
Utils.h/Utils.m
y poner métodos comogetModel
allí para que pueda obtener esta información desde cualquier lugar de su aplicación simplemente importando la clase e invocando[Utils getModel];
fuente
Optimicé la implementación de NicolasMiari y agregué
Simulator
aquí:`` `
fuente
A continuación se muestra el código para eso (es posible que el código no contenga toda la cadena del dispositivo, estoy con otros chicos que mantienen el mismo código en GitHub, así que tome el último código de allí )
Objetivo-C : GitHub / DeviceUtil
Swift : GitHub / DeviceGuru
fuente
Una categoría para alejarse de la descripción de NSString
En general, es deseable evitar comparaciones de cadenas arbitrarias en todo el código. Es mejor actualizar las cadenas en un lugar y ocultar la cadena mágica de su aplicación. Proporciono una categoría
UIDevice
para ese propósito.Para mis necesidades específicas, necesito saber qué dispositivo estoy usando sin la necesidad de conocer detalles sobre la capacidad de red que pueden recuperarse fácilmente de otras maneras. Por lo tanto, encontrará un grano más grueso
enum
que la creciente lista de dispositivos.La actualización es una cuestión de agregar el dispositivo a la enumeración y la tabla de búsqueda.
UIDevice + NTNUExtensions.h
UIDevice + NTNUExtensions.m
fuente
Nombre del dispositivo y nombres de máquina, basados en hardware de dispositivo real iOS
Mi solución a este problema básicamente se ve relacionada con la respuesta de @NicolasMiari dentro de este hilo. La clase de utilidad separada tiene un conjunto predefinido de nombres de Dispositivo y Máquina y luego, dependiendo del nombre real de la máquina, recupera el Nombre del dispositivo.
Nota: Esta respuesta y su proyecto GitHub vinculado se han actualizado para identificar los últimos iPhones actuales (iPhone 8, 8+, X) a partir de octubre de 2017. Y esto también funciona en iOS11 . Visite el repositorio de GitHub y vea, y deme su opinión si algo está mal.
He agregado esta implementación y algunos otros métodos de utilidad convenientes en una clase y los publiqué en este repositorio de GitHub . Y también puede encontrar la lista actualizada de información del dispositivo dentro de esta página Wiki .
Visítala y úsala.
Actualizar:
Es posible que necesite importar el marco del sistema,
fuente
Compatible con Swift 3
fuente
Esta solución funciona tanto para dispositivos físicos como para simuladores iOS de una manera que el simulador devuelve el mismo modelo que el dispositivo físico devolvería para un modelo, por ejemplo, "iPhone10,6" para iPhone X (GSM) en lugar de "x86_64".
Definición - Swift 4:
Uso:
fuente
fuente
Debajo de la función Funciona perfectamente en iOS7 o una versión posterior en Swift
fuente
Agregue un nuevo archivo con el siguiente código y simplemente llame
UIDevice.modelName
Esto consiste en todos los modelos lanzados hasta la fecha, incluidas las series iPhone 11 y Swift 5.0fuente
Para ahorrar tiempo a los demás. Debido a que se ha aceptado, se debe votar la biblioteca de propuesta de respuesta que utiliza API privada y mi aplicación se rechazó debido a la extensión uidevice ayer. Estoy cambiando a la biblioteca GBDeviceInfo, instalada también como pod, por ahora se ve bien, se mantiene y se actualiza a los últimos dispositivos.
fuente
Swift 4 o posterior
fuente
ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"]
es suficiente.¿Por qué no crear una categoría? No use el problema de fuga de seguridad del método malloc. Utiliza funciones seguras.
Ver las implementaciones
fuente
Si tiene una serie de dispositivos (por ejemplo, mantenidos por @Tib arriba en https://stackoverflow.com/a/17655825/849616 ) para manejarlo si Swift 3 usaría:
Más tarde puedes llamarlo usando
UIDevice.modelName()
.Los créditos adicionales van a @Tib (para plist), @Aniruddh Joshi (para
deviceSystemCode()
función).fuente
¿Qué pasa con el uso de ideviceinfo para obtener estos valores? Debería poder instalarlo usando
brew install ideviceinfo
Entonces corre:
fuente