108 votes

Détecter le modèle spécifique iPhone/iPod touch

Double Possible:
Déterminer appareil (iPhone, iPod Touch) avec le SDK de l'iPhone

Je suis de faire un jeu qui utilise le peer-to-peer, la fonction bluetooth de l'iPhone (et probablement l'iPod touch 2e génération). Cependant, pour arrêter les utilisateurs d'essayer de jouer à un jeu multi-joueurs sur un iPod 1ère génération et iPhone 2G, j'ai besoin de vérifier pour le modèle de l'appareil.

[[UIDevice currentDevice] modèle] s'dites-moi seulement si l'appareil est un "iPhone" ou un "iPod touch". Est-il un moyen de vérifier le modèle de lecteur spécifique, comme: "iPhone 3GS", "iPod touch 1ère génération", ou quelque chose.

EDIT:

Il existe une catégorie de UIDevice (je pense qu'il est créé par Erica Sadun, je ne prends pas de crédit) qui utilise le code suivant pour obtenir ce modèle de lecteur spécifique. Vous pouvez trouver l'ensemble de la catégorie ici avec d'autres choses utiles: https://github.com/erica/uidevice-extension

#include <sys/types.h>
#include <sys/sysctl.h>

@implementation UIDevice (Hardware)

/*
 Platforms
 iPhone1,1 -> iPhone 1G
 iPhone1,2 -> iPhone 3G 
 iPod1,1   -> iPod touch 1G 
 iPod2,1   -> iPod touch 2G 
*/

- (NSString *) platform
{
  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);
  return platform;
}

Cela fonctionne et les applications à l'aide de cette, a été récemment approuvé dans l'AppStore.

154voto

Will Harris Points 17002

Vous pouvez obtenir le numéro de modèle de l'appareil à l'aide de uname de sys/utsname.h. Par exemple:

#import <sys/utsname.h>

NSString*
machineName()
{
    struct utsname systemInfo;
    uname(&systemInfo);

    return [NSString stringWithCString:systemInfo.machine
                              encoding:NSUTF8StringEncoding];
}

Le résultat devrait être:

@"i386" sur le simulateur
@"iPod1,1" sur l'iPod Touch
@"iPod2,1" sur l'iPod Touch de Deuxième Génération
@"iPod3,1" sur l'iPod Touch de Troisième Génération
@"iPod4,1" sur l'iPod Touch de Quatrième Génération
@"iPhone1,1" sur iPhone
@"iPhone1,2" sur l'iPhone 3G
@"iPhone2,1" sur l'iPhone 3GS
@"iPad1,1" sur iPad
@"iPad2,1" sur l'iPad 2
@"iPad3,1" sur l'iPad 3 (aka new iPad)
@"iPhone3,1" sur l'iPhone 4
@"iPhone4,1" sur l'iPhone 4S
@"iPhone5,1" sur l'iPhone 5
@"iPhone5,2" de l'iPhone 5

66voto

djromero Points 11713

Catégorie de UIDevice (matériel) plus complète est sans doute http://github.com/erica/uidevice-extension/ (par Erica Sadun) :

23voto

Rodrigo Points 2692

Que diriez-vous de ce code, si la nouvelle version est sorti, vous aurez sais pas identificateur avec le dernier périphérique

4voto

gotnull Points 4918
BOOL hasHighResScreen = NO;
if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
    CGFloat scale = [[UIScreen mainScreen] scale];
    if (scale > 1.0) {
        hasHighResScreen = YES;
    }
}

4voto

Sten Points 906

iPhone 4 est iPhone3, 1 et iPhone3, 2
iPhone 4 s est iPhone4, 1
iPad 2 est iPad 2, 1 iPad2, 2 et iPad2, 3 selon version (GSM, etc.)
iPad 3 est iPad3, 1 iPad3, 2 et iPad3, 3 selon version (GSM, etc.)

Voir les secrets de l’Iphone (faites défiler jusqu'à « codes de produit interne »)

Une autre bonne source est : everyiphone.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X