Cómo determinar el modelo de iPhone en Swift: guía completa para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo determinar el modelo de iPhone en Swift: análisis para principiantes

\n\n

¿Alguna vez te has preguntado por qué tu aplicación en Swift funciona perfectamente en un iPhone 13, pero en un iPhone SE (segunda generación) se ve como si la hubieran dibujado a toda prisa? ¿O por qué algunas funciones que agregaste de repente no están disponibles en modelos antiguos? La respuesta es simple: diferentes iPhones tienen diferentes capacidades, desde el tamaño de la pantalla hasta la presencia de Face ID y la retroalimentación háptica.

\n\n

En este artículo, analizaremos cómo determinar el modelo de iPhone en Swift, desde el método simple con UIDevice hasta el enfoque profesional con sysctlbyname. Aprenderás no solo a obtener "iPhone", sino a saber exactamente si tienes un iPhone 14 Pro Max o un iPhone 8. ¡Allá vamos!

\n\n

¿Por qué es importante?

\n

Todo desarrollador de iOS, tarde o temprano, se enfrenta a la necesidad de adaptar la interfaz o la lógica a un dispositivo específico. Aquí hay algunos escenarios reales:

\n
    \n
  • Diseño adaptable: en iPhones con "muesca" (iPhone X y posteriores), los elementos deben colocarse de manera diferente que en los modelos antiguos con botón de inicio.
  • \n
  • Optimización del rendimiento: en dispositivos antiguos (iPhone 6s, iPhone 7), vale la pena desactivar animaciones o efectos pesados.
  • \n
  • Limitaciones funcionales: no todos los modelos son compatibles con ARKit, LiDAR, pantalla de 120 Hz o MagSafe.
  • \n
  • Analítica: comprender qué modelos utilizan tus usuarios ayuda a tomar decisiones de producto.
  • \n
\n\n

Nivel 1: UIDevice (simple, pero limitado)

\n

La forma más sencilla es usar la clase incorporada UIDevice. Devuelve información general sobre el dispositivo, pero, desafortunadamente, no muestra el modelo exacto.

\n\n
import UIKit\n\nlet device = UIDevice.current\nprint("Nombre del dispositivo: \\(device.name)")\nprint("Modelo: \\(device.model)")           // "iPhone" o "iPad"\nprint("Sistema: \\(device.systemName)")     // "iOS"\nprint("Versión: \\(device.systemVersion)")   // "17.0"\n
\n\n

Lo que obtendrás: device.model devolverá simplemente "iPhone" o "iPad". Esto es útil para saber que es un dispositivo móvil, pero no para una identificación precisa.

\n\n

Cuándo usarlo: si solo necesitas verificar que la aplicación se ejecuta en un iPhone y no en un iPad o iPod touch. Por ejemplo, para ocultar funciones específicas de iPad.

\n\n

Nivel 2: sysctlbyname (enfoque profesional)

\n

Para obtener el modelo exacto de iPhone, debes recurrir a la llamada del sistema sysctlbyname. Devuelve una cadena como "iPhone14,2" (que es el iPhone 13 Pro). Conociendo estos identificadores, puedes asignarlos a nombres legibles por humanos.

\n\n

Aquí está el código funcional en Swift:

\n\n
import UIKit\n\nfunc getDeviceModelCode() -> String {\n    var size = 0\n    sysctlbyname("hw.machine", nil, &size, nil, 0)\n    var machine = [CChar](repeating: 0, count: size)\n    sysctlbyname("hw.machine", &machine, &size, nil, 0)\n    return String(cString: machine)\n}\n\n// Uso\nlet modelCode = getDeviceModelCode()\nprint("Código del modelo: \\(modelCode)") // Por ejemplo: "iPhone14,2"\n
\n\n

Ahora tienes "iPhone14,2". ¿Pero qué modelo es? Necesitarás un diccionario de correspondencias.

\n\n

Diccionario de modelos de iPhone (actualizado a 2024)

\n

A continuación se muestra una lista incompleta, pero suficiente para la mayoría de las tareas. La lista completa se puede encontrar en fuentes abiertas o mantenerla como un archivo separado.

\n\n
func getDeviceModelName() -> String {\n    let modelCode = getDeviceModelCode()\n    \n    let modelMap: [String: String] = [\n        // Serie iPhone 15\n        "iPhone15,4": "iPhone 15",\n        "iPhone15,5": "iPhone 15 Plus",\n        "iPhone16,1": "iPhone 15 Pro",\n        "iPhone16,2": "iPhone 15 Pro Max",\n        \n        // Serie iPhone 14\n        "iPhone14,7": "iPhone 14                

Blogs

Book Recommendations