Hay una manera para determinar el dispositivo ejecuta una aplicación. Quiero distinguir entre iPhone y iPod Touch, si es posible.

InformationsquelleAutor Rob | 2009-01-15

30 Comentarios

  1. 284

    Puede utilizar el UIDevice clase como esta:

    NSString *deviceType = [UIDevice currentDevice].model;
    
    if([deviceType isEqualToString:@"iPhone"])
        //it's an iPhone
    • El código en el que link es un chequeo en tiempo de compilación Universal apps (aplicaciones que se compilan por separado para el iPhone y el iPad). Este código es una comprobación en tiempo de ejecución. También hay que tener en cuenta que esta pregunta y la respuesta fueron escritas mucho antes de que el iPad nunca existió.
    • estoy de acuerdo con usted.. ha ha escrito una respuesta muy larga vuelta que es agradable de trabajo …. me dijo en lugar de utilizar el modelo puede utilizar UIUserInterfaceIdiomPad que se da para que solo propósito…
    • yo no creo que es compatible con OS 3.0
    • sugiero se desmarca esta como la mejor respuesta y marcar la siguiente, con la plena UIDeviceHardware código de la clase, como la mejor, por favor?
    • seguro para su uso en aplicaciones que todavía soporta iOS < 3.2: es un macro en UIDevice.h escrito específicamente para predeterminada para UIUserInterfaceIdiomPhone en los mayores tales versiones de iOS.
    • Las grandes obras. Sólo quiero cambiar a [deviceType containsString:@"iPhone"] para que funciona en el Simulador así.

  2. 277

    Esta es una actualización para UIDeviceHardware.m de la respuesta de arriba.

    - (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:@"iPhone3,3"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone7,1"])    return @"iPhone 6";
    if ([platform isEqualToString:@"iPhone7,2"])    return @"iPhone 6 Plus";
    if ([platform isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";
    if ([platform isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";
    if ([platform isEqualToString:@"iPhone8,4"])    return @"iPhone SE";
    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:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPod7,1"])      return @"iPod Touch 6G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad mini 2G (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad mini 2G (Cellular)";
    if ([platform isEqualToString:@"iPad5,1"])      return @"iPad mini 4 (WiFi)";
    if ([platform isEqualToString:@"iPad5,2"])      return @"iPad mini 4 (Cellular)";
    if ([platform isEqualToString:@"iPad5,3"])      return @"iPad Air 2 (WiFi)";
    if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
    if ([platform isEqualToString:@"iPad6,3"])      return @"iPad Pro 9.7 inch (WiFi)";
    if ([platform isEqualToString:@"iPad6,4"])      return @"iPad Pro 9.7 inch (Cellular)";
    if ([platform isEqualToString:@"iPad6,7"])      return @"iPad Pro 12.9 inch (WiFi)";
    if ([platform isEqualToString:@"iPad6,8"])      return @"iPad Pro 12.9 inch (Cellular)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
    }
    • Lo siento, no resultado de una función en un bucle infinito debido a la primera línea? ¿Quién es ‘auto’ aquí?
    • Sí, me di la vuelta que cambiar
    • He visto un buen número de iPad3,2 dispositivos en el salvaje se está demostrando con aproximadamente 1/3 de la frecuencia de la iPad3,3 dispositivos.
    • ¿Por qué el nombre de iPad 3G? Es que el nombre oficial del nuevo iPad? Creo que el iPad 4G o iPad 3 tiene más sentido.
    • Por favor, actualice el valor de «plataforma» para el iPhone 5….
    • He actualizado para las plataformas más recientes utilizando este enlace
    • existe una mejor manera de almacenar este grupo de sentencias que no tienen que estar en el código directamente? (por ejemplo en un archivo plist o algo así)
    • Podría actualizar esto para el nuevo iPad aire si es posible?
    • Acaba de actualizar la plataforma de cadenas para el iPad mini 2G
    • El nombre de una cascada NSString comparación de rendimiento NSString es NSDictionary.El nombre para definir uno sin el código de dependencias es .plist.
    • Lista actualizada para iPhone 6 y 6 plus está aquí: stackoverflow.com/a/19584526/1374512
    • Por favor, actualización para el iPhone 6/6 Plus. ‘iPhone 6 Plus’ = ‘iPhone7,1’, ‘iPhone 6’ = ‘iPhone7,2’.
    • FYI – parece que una lista actualizada se mantiene aquí – theiphonewiki.com/wiki/Models
    • Mi aplicación que utiliza uname función recientemente fueron rechazadas por la aplicación de la revisión de la no-pública de uso de la API, pero no el nombre de cualquiera de API en el comentario. Es uname segura recientemente?
    • qué pasó con el iPad Air 2?

  3. 122

    Por favor, siéntase libre de utilizar esta clase (gist @ github)

    CÓDIGO Y REUBICADO A

    https://gist.github.com/1323251

    ACTUALIZACIÓN (01/14/11)

    Obviamente, este código es un poco fuera de fecha por ahora, pero sin duda se puede actualizar mediante el código de este hilo proporcionada por Brian Robbins que incluye un código similar con actualización de los modelos. Gracias por el apoyo en este hilo.

    • ¿Funciona con el iPad así? Sé que no tendría que ser otra declaración de si, pero la pregunta es, ¿el iPad almacenar la información de la misma manera? (Ej: si ([platformisEqualToString:@»ipad1,1″]) return @»iPad 1G»; ) Gracias por esto!
    • No me lo podía decir. No he hecho ningún desarrollo para iPad.
    • -1 Esto es totalmente confiable. Tan pronto como un nuevo dispositivo que sale, este código se rompe. También, el análisis de la salida de sysctl es una idea estúpida, especialmente para algo tan simple como conseguir el modelo de dispositivo.
    • El código no se rompe, simplemente devuelve un poco menos bonita de la cadena. ¿Tienes un mejor método para obtener el modelo de dispositivo? Y por modelo, me refiero a algo más que sólo «iPhone» o «iPod», pero la versión específica.
    • una cosa que no entiendo es por qué no está la definición de aquellos como los métodos de la clase, ya que no eres el mantenimiento de cualquier estado. Simplemente reemplazar – (NSString *) por + (NSString *) y te ahorrarás un alloc / liberación cuando se utiliza.
    • Acaba de agregar una línea que falta para Brian Robbins‘s respuesta, para el Verizon iPhone 4. Su código de hardware debe ser iPhone3,2.
    • Actualizado post. Gracias.
    • Se cree que hay una necesidad de caché de aquellos valores que no se llame a veinte o más if-then-else cada vez.
    • Cada vez? Usted debe ser capaz de llamar a esta clase/método de una vez y obtener el valor correcto para su uso en toda la aplicación. No está seguro de lo que su objeción es, exactamente.
    • Yo no estoy viendo ningún iPhone3.2 en nuestros registros de acceso. Sin embargo, estoy viendo un gran número de iPhone3.3 dispositivos. Aproximadamente el 4% de nuestros accesos vienen de eso. Creo que es el teléfono de Verizon
    • He hecho una actualización para agregar iPhone 3,3 cual es el id de modelo en mi Verizon iPhone 4. Y no puedo encontrar ninguna referencia a iPhone 3,2 en cualquier lugar excepto en la pre-Verizon web de publicaciones; no estoy seguro de que el dispositivo existe…
    • cuando me encuentro con esto… UIDeviceHardware *h=[[UIDeviceHardware alloc] init]; [self setDeviceModel:[h platformString]]; [h release]; recibí una advertencia «Método» setDevice:’ no encontrado» he añadido esto a mi archivo de encabezado #import «UIDeviceHardware.h» #include <sys/types.h> #include <sys/sysctl.h>
    • He editado tu respuesta : la clase como una UIDevice categoría de fácil uso, se añadió una enumeración de tipo de retorno, se ha actualizado el desuso de la llamada, vuelva a colocar la base de la plataforma de llamadas privados solo para uso interno. Por supuesto, he probado que el nuevo código para asegurarse de que es todavía plenamente funcionales.
    • Wow de forma totalmente re-escribir mi código. Que no es el propósito de la edición, así que me di la vuelta. Ediciones nunca debe cambiar el contenido de un post, sólo su legibilidad. Leer Más: meta.stackexchange.com/questions/80513/…
    • Gracias Jay. Este código ya ha sido actualizado varias veces desde que fue publicado por primera vez. Primer post fue en Octubre de 2009, y se puede ver su estado actualizado tan lejos como Verizon iPhone 4
    • Esta línea : NSString *plataforma = [NSString stringWithCString:máquinas]; , debe ser NSString *plataforma = [NSString stringWithUTF8String:máquinas]; desde stringWithCString está en desuso.
    • Algunas noticias sobre el iPhone 4S ?
    • Añadido. Es «iPhone4,1»
    • Lo probado. Funciona, editado el post para reflejar su sugerencia.
    • ¿Qué acerca de la próxima generación de iPod? No hay un nuevo modelo?
    • Mi sugerencia es agregar esta bastante simple trozo de código como un gist en github, o como un pequeño proyecto de código abierto. Desde Desbordamiento de la Pila no es adecuado para este tipo de desarrollo 😉
    • Hecho. Buena idea.
    • Acabamos la esencia y no creo que el nuevo iPad (iPad 3), ha sido incluido por el momento. Alguien sabe los códigos para él?
    • Esta esencia no está siendo activamente editado. Usted tendrá que actualizar es como mejor le parezca. Tengo que asumir el iPad3 sería iPad3,1 para la primera revisión.
    • Ver Actualizado Rama de la Esencia. Se cubre el iPad 3: gist.github.com/2238516
    • Me parece theiphonewiki.com/wiki/Models bastante bueno, como una fuente de nuevos identificadores de hardware
    • Es bueno que el código más reciente está disponible en esencia, pero el código original no debería haber sido eliminado. Los usuarios no deberían tener que ir a un sitio externo para encontrar la respuesta completa. Usted debe dejar el código aquí, pero el vínculo esencial con el consejo de que una versión actualizada puede estar disponible allí.

  4. 37

    Puedo usar esto en mi aplicación. A fecha de diciembre de 2012.

    - (NSString *) platformString {
    //Gets a string with the device model
    size_t size;  
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);  
    char *machine = malloc(size);  
    sysctlbyname("hw.machine", machine, &size, NULL, 0);  
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];  
    free(machine); 
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 2G";
    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:@"iPhone3,2"])    return @"iPhone 4";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"iPhone 4 (CDMA)";    
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPod1,1"])      return @"iPod Touch (1 Gen)";
    if ([platform isEqualToString:@"iPod2,1"])      return @"iPod Touch (2 Gen)";
    if ([platform isEqualToString:@"iPod3,1"])      return @"iPod Touch (3 Gen)";
    if ([platform isEqualToString:@"iPod4,1"])      return @"iPod Touch (4 Gen)";
    if ([platform isEqualToString:@"iPod5,1"])      return @"iPod Touch (5 Gen)";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad1,2"])      return @"iPad 3G";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
    }  
    • es lanzar una advertencia diciendo «declaración Implícita de la función ‘sysctlbyname’ no es válida en C99» en la línea sysctlbyname(«hw.la máquina», NULL, &tamaño, NULL, 0);
    • Para resolver la ‘declaración Implícita de la función..’ advertencia usted necesita para agregar el siguiente: #import <sys/sysctl.h>
  5. 27
    if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
    //Device is ipad 
    }else{
    //Device is iphone
    }
    • ¿Qué acerca de los iPods?
    • el iphone y el ipod touch es uno de la misma cosa …
    • Si usted mira la pregunta Rob habla de «la quiero a distinguir entre el iPhone y el iPod Touch si es posible». La solución no la dirección de este.
  6. 14

    Actualizada de la plataforma de cadenas para iPad Air 2 y iPad mini 3:

    - (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:@"iPhone3,3"])    return @"Verizon iPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
    if ([platform isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
    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:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad mini 2G (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad mini 2G (Cellular)";
    if ([platform isEqualToString:@"iPad4,7"])      return @"iPad mini 3 (WiFi)";
    if ([platform isEqualToString:@"iPad4,8"])      return @"iPad mini 3 (Cellular)";
    if ([platform isEqualToString:@"iPad4,9"])      return @"iPad mini 3 (China Model)";
    if ([platform isEqualToString:@"iPad5,3"])      return @"iPad Air 2 (WiFi)";
    if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
    if ([platform isEqualToString:@"iPad6,8"])      return @"iPad Pro";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
    }
  7. 12

    Más utilizable

    #include <sys/types.h>
    #include <sys/sysctl.h>
    @interface UIDevice(Hardware)
    - (NSString *) platform;
    - (BOOL)hasRetinaDisplay;
    - (BOOL)hasMultitasking;
    - (BOOL)hasCamera;
    @end
    @implementation UIDevice(Hardware)
    - (NSString *) platform{
    int mib[2];
    size_t len;
    char *machine;
    mib[0] = CTL_HW;
    mib[1] = HW_MACHINE;
    sysctl(mib, 2, NULL, &len, NULL, 0);
    machine = malloc(len);
    sysctl(mib, 2, machine, &len, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
    free(machine);
    return platform;
    }
    - (BOOL)hasRetinaDisplay {
    NSString *platform = [self platform];
    BOOL ret = YES;
    if ([platform isEqualToString:@"iPhone1,1"]) {
    ret = NO;
    }
    else
    if ([platform isEqualToString:@"iPhone1,2"])    ret = NO;
    else 
    if ([platform isEqualToString:@"iPhone2,1"])    ret = NO;
    else 
    if ([platform isEqualToString:@"iPod1,1"])      ret = NO;
    else
    if ([platform isEqualToString:@"iPod2,1"])      ret = NO;
    else
    if ([platform isEqualToString:@"iPod3,1"])      ret = NO;
    return ret;
    }
    - (BOOL)hasMultitasking {
    if ([self respondsToSelector:@selector(isMultitaskingSupported)]) {
    return [self isMultitaskingSupported];
    }
    return NO;
    }
    - (BOOL)hasCamera {
    BOOL ret = NO;
    //check camera availability
    return ret;
    }
    @end

    usted puede leer las propiedades con

    NSLog(@"platform %@, retita %@, multitasking %@", [[UIDevice currentDevice] platform], [[UIDevice currentDevice] hasRetinaDisplay] ? @"YES" : @"NO" , [[UIDevice currentDevice] hasMultitasking] ? @"YES" : @"NO");
    • En lugar de un complicado if/else árbol, usted puede simplemente comprobar si [[UIScreen mainScreen] scale] es de 2 o no (para iOS 5+).
    • No incluye un necesario «hasVibration» característica.
  8. 10

    Aquí es una actualización menor con nuevos modelos:

    - (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:@"i386"])   return @"iPhone Simulator";
    return platform;
    }
    • Otra actualización menor adición de la 4 ª generación de iPod y iPad:
  9. 10

    Sé una respuesta ha sido ya marcado, pero para referencia en el futuro, siempre se puede usar el tamaño de pantalla del dispositivo para averiguar qué dispositivo es así:

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if (result.height == 480) {
    //3.5 inch display - iPhone 4S and below
    NSLog(@"Device is an iPhone 4S or below");
    }
    else if (result.height == 568) {
    //4 inch display - iPhone 5
    NSLog(@"Device is an iPhone 5/S/C");
    }
    else if (result.height == 667) {
    //4.7 inch display - iPhone 6
    NSLog(@"Device is an iPhone 6");
    }
    else if (result.height == 736) {
    //5.5 inch display - iPhone 6 Plus
    NSLog(@"Device is an iPhone 6 Plus");
    }
    } 
    else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    //iPad 9.7 or 7.9 inch display.
    NSLog(@"Device is an iPad.");
    }
    • Es que funciona incluso con el diseño automático?
    • Sí, por supuesto!
    • más fácil y código de trabajo que los demás, ya aquí
  10. 8

    Sólo añadir que el iPhone 4S código de dispositivo para este hilo…

    El iPhone 4S se devuelve la cadena @»iPhone4,1″.

    • He añadido esto a la mayoría de los «subido» post
  11. 6

    Cómo acerca de este código, si la nueva versión fue lanzada, se identificador con el último saber dispositivo

    - (NSString *)getModel {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *model = malloc(size);
    sysctlbyname("hw.machine", model, &size, NULL, 0);
    NSString *sDeviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
    free(model);                              
    if ([sDeviceModel isEqual:@"i386"])      return @"Simulator";  //iPhone Simulator
    if ([sDeviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G";   //iPhone 1G
    if ([sDeviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G";   //iPhone 3G
    if ([sDeviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS";  //iPhone 3GS
    if ([sDeviceModel isEqual:@"iPhone3,1"]) return @"iPhone3GS";  //iPhone 4 - AT&T
    if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone3GS";  //iPhone 4 - Other carrier
    if ([sDeviceModel isEqual:@"iPhone3,3"]) return @"iPhone4";    //iPhone 4 - Other carrier
    if ([sDeviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S";   //iPhone 4S
    if ([sDeviceModel isEqual:@"iPod1,1"])   return @"iPod1stGen"; //iPod Touch 1G
    if ([sDeviceModel isEqual:@"iPod2,1"])   return @"iPod2ndGen"; //iPod Touch 2G
    if ([sDeviceModel isEqual:@"iPod3,1"])   return @"iPod3rdGen"; //iPod Touch 3G
    if ([sDeviceModel isEqual:@"iPod4,1"])   return @"iPod4thGen"; //iPod Touch 4G
    if ([sDeviceModel isEqual:@"iPad1,1"])   return @"iPadWiFi";   //iPad Wifi
    if ([sDeviceModel isEqual:@"iPad1,2"])   return @"iPad3G";     //iPad 3G
    if ([sDeviceModel isEqual:@"iPad2,1"])   return @"iPad2";      //iPad 2 (WiFi)
    if ([sDeviceModel isEqual:@"iPad2,2"])   return @"iPad2";      //iPad 2 (GSM)
    if ([sDeviceModel isEqual:@"iPad2,3"])   return @"iPad2";      //iPad 2 (CDMA)
    NSString *aux = [[sDeviceModel componentsSeparatedByString:@","] objectAtIndex:0];
    //If a newer version exist
    if ([aux rangeOfString:@"iPhone"].location!=NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
    if (version == 3) return @"iPhone4"
    if (version >= 4) return @"iPhone4s";
    }
    if ([aux rangeOfString:@"iPod"].location!=NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
    if (version >=4) return @"iPod4thGen";
    }
    if ([aux rangeOfString:@"iPad"].location!=NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
    if (version ==1) return @"iPad3G";
    if (version >=2) return @"iPad2";
    }
    //If none was found, send the original string
    return sDeviceModel;
    }
    • No me gusta lo que haces. Devuelve malas referencias para los dispositivos desconocidos. Buena idea, pero la mala implementación.
    • ¿Qué sugiere usted? Tienen que pensar que si un nuevo dispositivo fue lanzado en, usted no puede cambiar el código, y para mí es la causa de un error.
    • Cómo identificar el iPhone 5/iPod 5? es @»iPhone5,1″ @»iPod5,1″ la manera correcta de usar?
  12. 6

    Añadir a Arash del código, no me importa para mi aplicación por lo que el modelo que estoy usando, sólo quiero saber qué tipo de dispositivo, así que, puedo probar de la siguiente manera:

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
    NSLog(@"I'm definitely an iPad");
    } else {
    NSString *deviceType = [UIDevice currentDevice].model;
    if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound)
    {
    NSLog(@"I must be an iPhone");
    } else {
    NSLog(@"I think I'm an iPod");
    }
    }
  13. 5

    Basa en muy buenas respuestas, esto es lo que se me ocurrió. Esto es muy similar a la de @Rodrigo de la respuesta, pero las direcciones @Oliver preocupación de los comentarios en la respuesta. Esto también proporciona la opción de incluir el modelo de la cadena en la cadena de salida.

    + (NSString *) deviceModel {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *model = malloc(size);
    sysctlbyname("hw.machine", model, &size, NULL, 0);
    NSString *deviceModel = [NSString stringWithCString:model encoding:NSUTF8StringEncoding];
    free(model);      
    return deviceModel;
    }
    + (NSString *) deviceName {
    NSString *deviceModel = [DeviceGateway deviceModel];                    
    if ([deviceModel isEqual:@"i386"])      return @"Simulator";  //iPhone Simulator
    if ([deviceModel isEqual:@"iPhone1,1"]) return @"iPhone1G";   //iPhone 1G
    if ([deviceModel isEqual:@"iPhone1,2"]) return @"iPhone3G";   //iPhone 3G
    if ([deviceModel isEqual:@"iPhone2,1"]) return @"iPhone3GS";  //iPhone 3GS
    if ([deviceModel isEqual:@"iPhone3,1"]) return @"iPhone4";    //iPhone 4 - AT&T
    if ([deviceModel isEqual:@"iPhone3,2"]) return @"iPhone4";    //iPhone 4 - Other carrier
    if ([deviceModel isEqual:@"iPhone3,3"]) return @"iPhone4";    //iPhone 4 - Other carrier
    if ([deviceModel isEqual:@"iPhone4,1"]) return @"iPhone4S";   //iPhone 4S
    if ([deviceModel isEqual:@"iPod1,1"])   return @"iPod1stGen"; //iPod Touch 1G
    if ([deviceModel isEqual:@"iPod2,1"])   return @"iPod2ndGen"; //iPod Touch 2G
    if ([deviceModel isEqual:@"iPod3,1"])   return @"iPod3rdGen"; //iPod Touch 3G
    if ([deviceModel isEqual:@"iPod4,1"])   return @"iPod4thGen"; //iPod Touch 4G
    if ([deviceModel isEqual:@"iPad1,1"])   return @"iPadWiFi";   //iPad Wifi
    if ([deviceModel isEqual:@"iPad1,2"])   return @"iPad3G";     //iPad 3G
    if ([deviceModel isEqual:@"iPad2,1"])   return @"iPad2";      //iPad 2 (WiFi)
    if ([deviceModel isEqual:@"iPad2,2"])   return @"iPad2";      //iPad 2 (GSM)
    if ([deviceModel isEqual:@"iPad2,3"])   return @"iPad2";      //iPad 2 (CDMA)
    NSString *aux = [[deviceModel componentsSeparatedByString:@","] objectAtIndex:0];
    //If a newer version exists
    if ([aux rangeOfString:@"iPhone"].location != NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPhone" withString:@""] intValue];
    if (version == 3) return @"iPhone4";
    if (version == 4) return @"iPhone4s";
    return @"Newer iPhone";
    }
    if ([aux rangeOfString:@"iPod"].location != NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPod" withString:@""] intValue];
    if (version == 4) return @"iPod4thGen";
    return @"Newer iPod";
    }
    if ([aux rangeOfString:@"iPad"].location != NSNotFound) {
    int version = [[aux stringByReplacingOccurrencesOfString:@"iPad" withString:@""] intValue];
    if (version == 1) return @"iPad3G";
    if (version == 2) return @"iPad2";
    return @"Newer iPad";
    }
    //If none was found, send the original string
    return deviceModel;
    }
    + (NSString *) deviceNameWithDeviceModel:(BOOL)shouldIncludeDeviceModel {
    if (shouldIncludeDeviceModel) {
    return [NSString stringWithFormat:@"%@ (%@)", [DeviceGateway deviceName], [DeviceGateway deviceModel]];
    }
    return [DeviceGateway deviceName];
    }
    • Se utiliza para una aplicación del AppStore ? es este código usando la API privada (sysctlbyname) ? Tx por su ayuda
    • La No utilización de los privados Api de aquí. Este ha pasado de validación automatizada en XCode.
    • De donde sacas DeviceGateway de?
    • DeviceGateway es el nombre de la clase cuyos métodos estáticos se muestran. Por lo que la línea que usted está preguntando acerca de él sólo invocando el otro método estático en el citado código. Siéntase libre de nombre de la clase lo que quieras.
  14. 5

    Hay una muy maduro de la biblioteca (por mí) para que la llama SDVersion.
    Usted puede comprobar el funcionamiento del dispositivo de la modelo, tamaño de pantalla, y muchos otros parámetros. También es compatible OSX.

    Ejemplo:

          //Check for device model
    if ([SDVersion deviceVersion] == iPhone6)
    NSLog(@"You got the iPhone 6. Sweet 🍭!");
    else if ([SDVersion deviceVersion] == iPhone6Plus)
    NSLog(@"iPhone 6 Plus? Bigger is better!");
    else if ([SDVersion deviceVersion] == iPadAir2)
    NSLog(@"You own an iPad Air 2 🌀!");
    //Check for device screen size
    if ([SDVersion deviceSize] == Screen4inch)
    NSLog(@"Your screen is 4 inches");
    • Muchas gracias! Esto es perfecto (Y actualizado!)
    • cómo utilizar en swift ?
  15. 4
    #import <sys/utsname.h> 
    NSString *iPhone = [self iPhoneVersion]; 
    -(NSString*)iPhoneVersion
    {
    NSString *platform;
    struct utsname systemInfo;
    uname(&systemInfo);
    platform = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
    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:@"iPhone3,3"])    return @"VerizoniPhone 4";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (GSM+CDMA)";
    if ([platform isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
    if ([platform isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
    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:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (GSM+CDMA)";
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,3"])      return @"iPad Air";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad Mini 2G (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad Mini 2G (Cellular)";
    if ([platform isEqualToString:@"iPad4,6"])      return @"iPad Mini 2G";
    if ([platform isEqualToString:@"iPad4,7"])      return @"iPad Mini 3 (WiFi)";
    if ([platform isEqualToString:@"iPad4,8"])      return @"iPad Mini 3 (Cellular)";
    if ([platform isEqualToString:@"iPad4,9"])      return @"iPad Mini 3 (China)";
    if ([platform isEqualToString:@"iPad5,3"])      return @"iPad Air 2 (WiFi)";
    if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
    if ([platform isEqualToString:@"AppleTV2,1"])   return @"Apple TV 2G";
    if ([platform isEqualToString:@"AppleTV3,1"])   return @"Apple TV 3";
    if ([platform isEqualToString:@"AppleTV3,2"])   return @"Apple TV 3 (2013)";
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";
    return platform;
    }
  16. 3

    Me tomó un poco más y se convierte en el gran «isEqualToString» bloque dentro de una clasificación de las máscaras de bits para el tipo de dispositivo, la generación, y que otro calificador después de la coma (lo voy a llamar el sub generación). Se envuelve en una clase con un singleton llamada SGPlatform que evita un montón de repetitivo de la cadena de operaciones. El código está disponible https://github.com/danloughney/spookyGroup

    La clase permite hacer cosas como esta:

    if ([SGPlatform iPad] && [SGPlatform generation] > 3) {
    //set for high performance
    }

    y

    switch ([SGPlatform deviceMask]) {
    case DEVICE_IPHONE:
    break;
    case DEVICE_IPAD:
    break;
    case DEVICE_IPAD_MINI:
    break;
    }

    La clasificación de los dispositivos está en el platformBits método. Ese método debe ser muy familiar para los lectores de este hilo. He clasificado los dispositivos por su tipo de generación, porque estoy interesada en el rendimiento general, pero la fuente puede ser ajustado para proporcionar cualquier clasificación que usted está interesado en, la pantalla retina, capacidades de red, etc..

  17. 3

    Que se mencionan a continuación el fragmento de código debe ayudar a :

     if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    //iPhone device
    }
    else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    //iPad device
    }
    else {
    //Other device i.e. iPod
    }
  18. 2
    - (BOOL)deviceiPhoneOriPod
    {
    NSString *deviceType = [UIDevice currentDevice].model;
    if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound)
    return YES;
    else
    return NO;
    }
  19. 1

    Dutchie432 y Brian Robbins han proporcionado grandes soluciones. Pero aún hay un modelo que faltan, la Verizon iPhone 4. Aquí está la línea que falta.

    if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4"; //Verizon
    • Curiosamente, parece que ahora hay un iPhone3,3?
    • Sí. En realidad, algunos de Verizon iPhone 4 resultó ser de 3,3.
    • Alguien sabe el identificador para el iPhone 4S todavía?
  20. 1

    Respuesta rápida 3,

    struct DeviceInformation {
    //UIDevice.current.model's value is "iPhone" or "iPad",which does not include details; the following "model" is detailed, such as, iPhone7,1 is actually iPhone 6 plus
    static let model: String = {
    var size = 0
    sysctlbyname("hw.machine", nil, &size, nil, 0)
    var machine = [CChar](repeating: 0,  count: Int(size))
    sysctlbyname("hw.machine", &machine, &size, nil, 0)
    return String(cString: machine)
    }()
    static let uuid = UIDevice.current.identifierForVendor?.uuidString ?? ""
    static let idForAdService = ASIdentifierManager.shared().advertisingIdentifier.uuidString
    static func diviceTypeReadableName() -> String {
    switch model {
    case "iPhone1,1":   return "iPhone 1G"
    case "iPhone1,2":   return "iPhone 3G"
    case "iPhone2,1":   return "iPhone 3GS"
    case "iPhone3,1":   return "iPhone 4"
    case "iPhone3,3":   return "iPhone 4 (Verizon)"
    case "iPhone4,1":   return "iPhone 4S"
    case "iPhone5,1":   return "iPhone 5 (GSM)"
    case "iPhone5,2":   return "iPhone 5 (GSM+CDMA)"
    case "iPhone5,3":   return "iPhone 5c (GSM)"
    case "iPhone5,4":   return "iPhone 5c (GSM+CDMA)"
    case "iPhone6,1":   return "iPhone 5s (GSM)"
    case "iPhone6,2":   return "iPhone 5s (GSM+CDMA)"
    case "iPhone7,2":   return "iPhone 6"
    case "iPhone7,1":   return "iPhone 6 Plus"
    case "iPhone8,1":   return "iPhone 6s"
    case "iPhone8,2":   return "iPhone 6s Plus"
    case "iPhone8,4":   return "iPhone SE"
    case "iPhone9,1":   return "iPhone 7"
    case "iPhone9,3":   return "iPhone 7"
    case "iPhone9,2":   return "iPhone 7 Plus"
    case "iPhone9,4":   return "iPhone 7 Plus"
    case "iPod1,1":     return "iPod Touch 1G"
    case "iPod2,1":     return "iPod Touch 2G"
    case "iPod3,1":     return "iPod Touch 3G"
    case "iPod4,1":     return "iPod Touch 4G"
    case "iPod5,1":     return "iPod Touch 5G"
    case "iPod7,1":     return "iPod Touch 6G"
    case "iPad1,1":     return "iPad 1G"
    case "iPad2,1":     return "iPad 2 (Wi-Fi)"
    case "iPad2,2":     return "iPad 2 (GSM)"
    case "iPad2,3":     return "iPad 2 (CDMA)"
    case "iPad2,4":     return "iPad 2 (Wi-Fi)"
    case "iPad2,5":     return "iPad Mini (Wi-Fi)"
    case "iPad2,6":     return "iPad Mini (GSM)"
    case "iPad2,7":     return "iPad Mini (GSM+CDMA)"
    case "iPad3,1":     return "iPad 3 (Wi-Fi)"
    case "iPad3,2":     return "iPad 3 (GSM+CDMA)"
    case "iPad3,3":     return "iPad 3 (GSM)"
    case "iPad3,4":     return "iPad 4 (Wi-Fi)"
    case "iPad3,5":     return "iPad 4 (GSM)"
    case "iPad3,6":     return "iPad 4 (GSM+CDMA)"
    case "iPad4,1":     return "iPad Air (Wi-Fi)"
    case "iPad4,2":     return "iPad Air (Cellular)"
    case "iPad4,3":     return "iPad Air (China)"
    case "iPad4,4":     return "iPad Mini 2G (Wi-Fi)"
    case "iPad4,5":     return "iPad Mini 2G (Cellular)"
    case "iPad4,6":     return "iPad Mini 2G (China)"
    case "iPad4,7":     return "iPad Mini 3 (Wi-Fi)"
    case "iPad4,8":     return "iPad Mini 3 (Cellular)"
    case "iPad4,9":     return "iPad Mini 3 (China)"
    case "iPad5,1":     return "iPad Mini 4 (Wi-Fi)"
    case "iPad5,2":     return "iPad Mini 4 (Cellular)"
    case "iPad5,3":     return "iPad Air 2 (Wi-Fi)"
    case "iPad5,4":     return "iPad Air 2 (Cellular)"
    case "iPad6,3":     return "iPad Pro 9.7' (Wi-Fi)"
    case "iPad6,4":     return "iPad Pro 9.7' (Cellular)"
    case "iPad6,7":     return "iPad Pro 12.9' (Wi-Fi)"
    case "iPad6,8":     return "iPad Pro 12.9' (Cellular)"
    case "AppleTV2,1":  return "Apple TV 2G"
    case "AppleTV3,1":  return "Apple TV 3"
    case "AppleTV3,2":  return "Apple TV 3 (2013)"
    case "AppleTV5,3":  return "Apple TV 4"
    case "Watch1,1":    return "Apple Watch Series 1 (38mm, S1)"
    case "Watch1,2":    return "Apple Watch Series 1 (42mm, S1)"
    case "Watch2,6":    return "Apple Watch Series 1 (38mm, S1P)"
    case "Watch2,7":    return "Apple Watch Series 1 (42mm, S1P)"
    case "Watch2,3":    return "Apple Watch Series 2 (38mm, S2)"
    case "Watch2,4":    return "Apple Watch Series 2 (42mm, S2)"
    case "i386":        return "Simulator"
    case "x86_64":      return "Simulator"
    default:
    return ""
    }
    }
    }
  21. 1

    Por simple comparación siempre me gusta macro:

    #define IS_IPOD [[UIDevice currentDevice].model containsString:@"iPod"]
    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

    Es simple y fácil de usar.

  22. 0

    Me gustaría añadir que para recuperar la parte frontal y la carcasa de color del dispositivo hay una API privada:

    UIDevice *device = [UIDevice currentDevice];
    SEL selector = NSSelectorFromString([device.systemVersion hasPrefix:@"7"] ? @"_deviceInfoForKey:" :  @"deviceInfoForKey:");
    if ([device respondsToSelector:selector]) {
    NSLog(@"DeviceColor: %@ DeviceEnclosureColor: %@", [device performSelector:selector withObject:@"DeviceColor"], [device performSelector:selector withObject:@"DeviceEnclosureColor"]);
    }

    He blogueado acerca de esto y proporcionar una aplicación de muestra:

    http://www.futuretap.com/blog/device-colors/

  23. 0
    NSString *deviceType = [[UIDevice currentDevice] systemName];

    Puedo asegurar que el anterior sugiere funcionará en iOS 7 y anteriores. Creo que va a funcionar en iOS 6 también. Pero no estoy seguro de eso.

  24. 0

    Puede comprobar GBDeviceInfo en GitHub, también disponible a través de CocoaPods. Ofrece una sencilla API para la detección de varias propiedades con el apoyo de todos los últimos dispositivos:

    • Familia de dispositivos

    [GBDeviceInfo deviceDetails].family == GBDeviceFamilyiPhone;

    • Modelo de dispositivo

    [GBDeviceInfo deviceDetails].model == GBDeviceModeliPhone6.

    Para más información, véase Léame.

  25. 0

    Los posibles valores de

    [[UIDevice currentDevice] model];

    son iPod touch, iPhone, iPhone Simulator, iPad, iPad Simulator

    Si quieres saber que hardware iOS está arruinando como iPhone3, iPhone4, iPhone5 etc a continuación está el código para que


    NOTA: El código de abajo, no puede contener todos los dispositivos de la cadena, estoy con otros chicos que están manteniendo el mismo código en GitHub así que por favor tome el último código de allí

    Objective-C : GitHub/DeviceUtil

    Swift : GitHub/DeviceGuru


    #include <sys/types.h>
    #include <sys/sysctl.h>
    - (NSString*)hardwareDescription {
    NSString *hardware = [self hardwareString];
    if ([hardware isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";
    if ([hardware isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";
    if ([hardware isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
    if ([hardware isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
    if ([hardware isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
    if ([hardware isEqualToString:@"iPod1,1"]) return @"iPodTouch 1G";
    if ([hardware isEqualToString:@"iPod2,1"]) return @"iPodTouch 2G";
    if ([hardware isEqualToString:@"iPad1,1"]) return @"iPad";
    if ([hardware isEqualToString:@"iPad2,6"]) return @"iPad Mini";
    if ([hardware isEqualToString:@"iPad4,1"]) return @"iPad Air WIFI";
    //there are lots of other strings too, checkout the github repo
    //link is given at the top of this answer
    if ([hardware isEqualToString:@"i386"]) return @"Simulator";
    if ([hardware isEqualToString:@"x86_64"]) return @"Simulator";
    return nil;
    }
    - (NSString*)hardwareString {
    size_t size = 100;
    char *hw_machine = malloc(size);
    int name[] = {CTL_HW,HW_MACHINE};
    sysctl(name, 2, hw_machine, &size, NULL, 0);
    NSString *hardware = [NSString stringWithUTF8String:hw_machine];
    free(hw_machine);
    return hardware;
    }
  26. 0

    A identifiy iPhone 4S, simplemente marque la siguiente:

    var isIphone4S: Bool {
    let width = UIScreen.main.bounds.size.width
    let height = UIScreen.main.bounds.size.height
    let proportions = width > height ? width / height : height / width
    return proportions == 1.5 && UIDevice.current.model == "iPhone"
    }
  27. 0

    He creado una extensión que te permite tener 3 niveles de identificación:

    1. tipo de dispositivo
    2. tipo de iPhone/iPad por pulgada
    3. modelo de dispositivo

    Se actualiza con los últimos dispositivos iOS

    UIDeviceDetector

  28. -1

    Actualización de la plataforma de cadena.

    //Created from this thread: https://gist.github.com/Jaybles/1323251
    //Apple TV
    if ([platform isEqualToString:@"AppleTV2,1"])   return @"Apple TV 2G";
    if ([platform isEqualToString:@"AppleTV3,1"])   return @"Apple TV 3G";
    if ([platform isEqualToString:@"AppleTV3,2"])   return @"Apple TV 3G";
    if ([platform isEqualToString:@"AppleTV5,3"])   return @"Apple TV 4G";
    //Apple Watch
    if ([platform isEqualToString:@"Watch1,1"])     return @"Apple Watch";
    if ([platform isEqualToString:@"Watch1,2"])     return @"Apple Watch";
    //iPhone
    if ([platform isEqualToString:@"iPhone1,1"])    return @"iPhone 2G";
    if ([platform isEqualToString:@"iPhone1,2"])    return @"iPhone 3G";
    if ([platform isEqualToString:@"iPhone2,1"])    return @"iPhone 3GS";
    if ([platform isEqualToString:@"iPhone3,1"])    return @"iPhone 4 (GSM)";
    if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4 (GSM/2012)";
    if ([platform isEqualToString:@"iPhone3,3"])    return @"iPhone 4 (CDMA)";
    if ([platform isEqualToString:@"iPhone4,1"])    return @"iPhone 4S";
    if ([platform isEqualToString:@"iPhone5,1"])    return @"iPhone 5 (GSM)";
    if ([platform isEqualToString:@"iPhone5,2"])    return @"iPhone 5 (Global)";
    if ([platform isEqualToString:@"iPhone5,3"])    return @"iPhone 5c (GSM)";
    if ([platform isEqualToString:@"iPhone5,4"])    return @"iPhone 5c (Global)";
    if ([platform isEqualToString:@"iPhone6,1"])    return @"iPhone 5s (GSM)";
    if ([platform isEqualToString:@"iPhone6,2"])    return @"iPhone 5s (Global)";
    if ([platform isEqualToString:@"iPhone7,2"])    return @"iPhone 6";
    if ([platform isEqualToString:@"iPhone7,1"])    return @"iPhone 6 Plus";
    if ([platform isEqualToString:@"iPhone8,1"])    return @"iPhone 6s";
    if ([platform isEqualToString:@"iPhone8,2"])    return @"iPhone 6s Plus";
    if ([platform isEqualToString:@"iPhone8,4"])    return @"iPhone SE";
    if ([platform isEqualToString:@"iPhone9,1"])    return @"iPhone 7 (Global)";
    if ([platform isEqualToString:@"iPhone9,3"])    return @"iPhone 7 (GSM)";
    if ([platform isEqualToString:@"iPhone9,2"])    return @"iPhone 7 Plus (Global)";
    if ([platform isEqualToString:@"iPhone9,4"])    return @"iPhone 7 Plus (GSM)";
    //iPad
    if ([platform isEqualToString:@"iPad1,1"])      return @"iPad 1";
    if ([platform isEqualToString:@"iPad2,1"])      return @"iPad 2 (WiFi)";
    if ([platform isEqualToString:@"iPad2,2"])      return @"iPad 2 (GSM)";
    if ([platform isEqualToString:@"iPad2,3"])      return @"iPad 2 (CDMA)";
    if ([platform isEqualToString:@"iPad2,4"])      return @"iPad 2 (Mid 2012)";
    if ([platform isEqualToString:@"iPad3,1"])      return @"iPad 3 (WiFi)";
    if ([platform isEqualToString:@"iPad3,2"])      return @"iPad 3 (CDMA)";
    if ([platform isEqualToString:@"iPad3,3"])      return @"iPad 3 (GSM)";
    if ([platform isEqualToString:@"iPad3,4"])      return @"iPad 4 (WiFi)";
    if ([platform isEqualToString:@"iPad3,5"])      return @"iPad 4 (GSM)";
    if ([platform isEqualToString:@"iPad3,6"])      return @"iPad 4 (Global)";
    //iPad Air
    if ([platform isEqualToString:@"iPad4,1"])      return @"iPad Air (WiFi)";
    if ([platform isEqualToString:@"iPad4,2"])      return @"iPad Air (Cellular)";
    if ([platform isEqualToString:@"iPad4,3"])      return @"iPad Air (China)";
    if ([platform isEqualToString:@"iPad5,3"])      return @"iPad Air 2 (WiFi)";
    if ([platform isEqualToString:@"iPad5,4"])      return @"iPad Air 2 (Cellular)";
    //iPad Mini
    if ([platform isEqualToString:@"iPad2,5"])      return @"iPad Mini (WiFi)";
    if ([platform isEqualToString:@"iPad2,6"])      return @"iPad Mini (GSM)";
    if ([platform isEqualToString:@"iPad2,7"])      return @"iPad Mini (Global)";
    if ([platform isEqualToString:@"iPad4,4"])      return @"iPad Mini 2 (WiFi)";
    if ([platform isEqualToString:@"iPad4,5"])      return @"iPad Mini 2 (Cellular)";
    if ([platform isEqualToString:@"iPad4,6"])      return @"iPad Mini 2 (China)";
    if ([platform isEqualToString:@"iPad4,7"])      return @"iPad Mini 3 (WiFi)";
    if ([platform isEqualToString:@"iPad4,8"])      return @"iPad Mini 3 (Cellular)";
    if ([platform isEqualToString:@"iPad4,9"])      return @"iPad Mini 3 (China)";
    if ([platform isEqualToString:@"iPad5,1"])      return @"iPad Mini 4 (WiFi)";
    if ([platform isEqualToString:@"iPad5,2"])      return @"iPad Mini 4 (Cellular)";
    //iPad Pro
    if ([platform isEqualToString:@"iPad6,3"])      return @"iPad Pro (9.7 inch/WiFi)";
    if ([platform isEqualToString:@"iPad6,4"])      return @"iPad Pro (9.7 inch/Cellular)";
    if ([platform isEqualToString:@"iPad6,7"])      return @"iPad Pro (12.9 inch/WiFi)";
    if ([platform isEqualToString:@"iPad6,8"])      return @"iPad Pro (12.9 inch/Cellular)";
    //iPod
    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:@"iPod5,1"])      return @"iPod Touch 5G";
    if ([platform isEqualToString:@"iPod7,1"])      return @"iPod Touch 6G";
    //Simulator
    if ([platform isEqualToString:@"i386"])         return @"Simulator";
    if ([platform isEqualToString:@"x86_64"])       return @"Simulator";

Dejar respuesta

Please enter your comment!
Please enter your name here