Comment différencier par programme entre l'iphone 4 et l'iphone 4S?

Je travaille sur une application qui doit vérifier le model de l'iphone, mais je ne trouve pas de solution. Je serai merci pour toute suggestion.

C'est beaucoup plus simple. SIMPLE ASSEZ POUR COPIE ET ​​PÂTE

En outre, j'ai inclus le nom du model correspondant pour le nom de la machine.

//MARK: Required import #import <sys/utsname.h> + (NSSsortingng*)deviceModelName { struct utsname systemInfo; uname(&systemInfo); NSSsortingng *machineName = [NSSsortingng ssortingngWithCSsortingng:systemInfo.machine encoding:NSUTF8SsortingngEncoding]; //MARK: More official list is at //http://theiphonewiki.com/wiki/Models //MARK: You may just return machineName. Following is for convenience NSDictionary *commonNamesDictionary = @{ @"i386": @"iPhone Simulator", @"x86_64": @"iPad Simulator", @"iPhone1,1": @"iPhone", @"iPhone1,2": @"iPhone 3G", @"iPhone2,1": @"iPhone 3GS", @"iPhone3,1": @"iPhone 4", @"iPhone3,2": @"iPhone 4(Rev A)", @"iPhone3,3": @"iPhone 4(CDMA)", @"iPhone4,1": @"iPhone 4S", @"iPhone5,1": @"iPhone 5(GSM)", @"iPhone5,2": @"iPhone 5(GSM+CDMA)", @"iPhone5,3": @"iPhone 5c(GSM)", @"iPhone5,4": @"iPhone 5c(GSM+CDMA)", @"iPhone6,1": @"iPhone 5s(GSM)", @"iPhone6,2": @"iPhone 5s(GSM+CDMA)", @"iPhone7,1": @"iPhone 6+ (GSM+CDMA)", @"iPhone7,2": @"iPhone 6 (GSM+CDMA)", @"iPhone8,1": @"iPhone 6S (GSM+CDMA)", @"iPhone8,2": @"iPhone 6S+ (GSM+CDMA)", @"iPad1,1": @"iPad", @"iPad2,1": @"iPad 2(WiFi)", @"iPad2,2": @"iPad 2(GSM)", @"iPad2,3": @"iPad 2(CDMA)", @"iPad2,4": @"iPad 2(WiFi Rev A)", @"iPad2,5": @"iPad Mini 1G (WiFi)", @"iPad2,6": @"iPad Mini 1G (GSM)", @"iPad2,7": @"iPad Mini 1G (GSM+CDMA)", @"iPad3,1": @"iPad 3(WiFi)", @"iPad3,2": @"iPad 3(GSM+CDMA)", @"iPad3,3": @"iPad 3(GSM)", @"iPad3,4": @"iPad 4(WiFi)", @"iPad3,5": @"iPad 4(GSM)", @"iPad3,6": @"iPad 4(GSM+CDMA)", @"iPad4,1": @"iPad Air(WiFi)", @"iPad4,2": @"iPad Air(GSM)", @"iPad4,3": @"iPad Air(GSM+CDMA)", @"iPad5,3": @"iPad Air 2 (WiFi)", @"iPad5,4": @"iPad Air 2 (GSM+CDMA)", @"iPad4,4": @"iPad Mini 2G (WiFi)", @"iPad4,5": @"iPad Mini 2G (GSM)", @"iPad4,6": @"iPad Mini 2G (GSM+CDMA)", @"iPad4,7": @"iPad Mini 3G (WiFi)", @"iPad4,8": @"iPad Mini 3G (GSM)", @"iPad4,9": @"iPad Mini 3G (GSM+CDMA)", @"iPod1,1": @"iPod 1st Gen", @"iPod2,1": @"iPod 2nd Gen", @"iPod3,1": @"iPod 3rd Gen", @"iPod4,1": @"iPod 4th Gen", @"iPod5,1": @"iPod 5th Gen", @"iPod7,1": @"iPod 6th Gen", }; NSSsortingng *deviceName = commonNamesDictionary[machineName]; if (deviceName == nil) { deviceName = machineName; } return deviceName; } 

Voici une méthode courante de resortingvation du model de périphérique. Il n'y a pas de methods NS pour cela, donc vous devez utiliser c

 #include <sys/types.h> #include <sys/sysctl.h> - (NSSsortingng *)machine { NSSsortingng *machine; size_t size; sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *name = malloc(size); sysctlbyname("hw.machine", name, &size, NULL, 0); machine = [NSSsortingng ssortingngWithUTF8Ssortingng:name]; free(name); return machine; } 
 Update a list of devices: In future will be updated with iPad 4. + (NSSsortingng*)deviceModelName { /* @"i386" on the simulator @"x86_64" on the simulator @"iPod1,1" on iPod Touch @"iPod2,1" on iPod Touch Second Generation @"iPod3,1" on iPod Touch Third Generation @"iPod4,1" on iPod Touch Fourth Generation @"iPod5,1" on iPod Touch Fourth Generation @"iPhone1,1" on iPhone @"iPhone1,2" on iPhone 3G @"iPhone2,1" on iPhone 3GS @"iPad1,1" on iPad @"iPad2,1" on iPad 2 @"iPad2,5" on iPad mini 1 @"iPad3,1" on iPad 3 @"iPhone3,1" on iPhone 4 @"iPhone4,1" on iPhone 4S @"iPhone5,1" on iPhone 5 */ struct utsname systemInfo; uname(&systemInfo); NSSsortingng *modelName = [NSSsortingng ssortingngWithCSsortingng:systemInfo.machine encoding:NSUTF8SsortingngEncoding]; if([modelName isEqualToSsortingng:@"i386"] || [modelName isEqualToSsortingng:@"x86_64"]) { modelName = @"iPhone Simulator"; } else if([modelName isEqualToSsortingng:@"iPhone1,1"]) { modelName = @"iPhone"; } else if([modelName isEqualToSsortingng:@"iPhone1,2"]) { modelName = @"iPhone 3G"; } else if([modelName isEqualToSsortingng:@"iPhone2,1"]) { modelName = @"iPhone 3GS"; } else if([modelName isEqualToSsortingng:@"iPhone3,1"]) { modelName = @"iPhone 4"; } else if([modelName isEqualToSsortingng:@"iPhone4,1"]) { modelName = @"iPhone 4S"; } else if([modelName isEqualToSsortingng:@"iPhone5,1"]) { modelName = @"iPhone 5"; } else if([modelName isEqualToSsortingng:@"iPod1,1"]) { modelName = @"iPod 1st Gen"; } else if([modelName isEqualToSsortingng:@"iPod2,1"]) { modelName = @"iPod 2nd Gen"; } else if([modelName isEqualToSsortingng:@"iPod3,1"]) { modelName = @"iPod 3rd Gen"; } else if([modelName isEqualToSsortingng:@"iPod4,1"]) { modelName = @"iPod 4th Gen"; } else if([modelName isEqualToSsortingng:@"iPod5,1"]) { modelName = @"iPod 5th Gen"; } else if([modelName isEqualToSsortingng:@"iPad1,1"]) { modelName = @"iPad"; } else if([modelName isEqualToSsortingng:@"iPad2,1"]) { modelName = @"iPad 2(WiFi)"; } else if([modelName isEqualToSsortingng:@"iPad2,2"]) { modelName = @"iPad 2(GSM)"; } else if([modelName isEqualToSsortingng:@"iPad2,3"]) { modelName = @"iPad 2(CDMA)"; } else if([modelName isEqualToSsortingng:@"iPad2,4"]) { modelName = @"iPad 2(WiFi + New Chip)"; } else if([modelName isEqualToSsortingng:@"iPad2,5"]) { modelName = @"iPad mini (WiFi)"; } else if([modelName isEqualToSsortingng:@"iPad2,6"]) { modelName = @"iPad mini (GSM)"; } else if([modelName isEqualToSsortingng:@"iPad3,1"]) { modelName = @"iPad 3(WiFi)"; } else if([modelName isEqualToSsortingng:@"iPad3,2"]) { modelName = @"iPad 3(GSM)"; } else if([modelName isEqualToSsortingng:@"iPad3,3"]) { modelName = @"iPad 3(CDMA)"; } return modelName; 

}

Pour ma part, j'ai écrit une petite bibliothèque qui résume les appels C sous-jacents et présente une interface Objective-C.

 NSLog(@"Big model number: %d", deviceDetails.bigModel); //Big model number: 4 NSLog(@"Small model number: %d", deviceDetails.smallModel); //Small model number: 1 if (deviceDetails.model == GBDeviceModeliPhone4S) { NSLog(@"It's a 4S"); } //It's a 4S if (deviceDetails.family != GBDeviceFamilyiPad) { NSLog(@"It's not an iPad"); } //It's not an iPad NSLog(@"systemInfo ssortingng: %@", [GBDeviceInfo rawSystemInfoSsortingng]); //systemInfo ssortingng: iPhone4,1 

C'est sur github: GBDeviceInfo

Utilisez ce code. Ceci est une list complète de tout iDevice réel et le numéro de model, la list peut être mise à jour facilement en vérifiant http://theiphonewiki.com/wiki/Models .

 #import <sys/utsname.h> struct utsname systemInfo; uname(&systemInfo); NSSsortingng *modelName = [NSSsortingng ssortingngWithCSsortingng:systemInfo.machine encoding:NSUTF8SsortingngEncoding]; NSSsortingng *machinename = [NSSsortingng ssortingngWithCSsortingng:systemInfo.machine encoding:NSUTF8SsortingngEncoding]; NSSsortingng *modelnumber = @"?"; //Simulator if([modelName isEqualToSsortingng:@"i386"] || [modelName isEqualToSsortingng:@"x86_64"]) { modelName = @"iPhone Simulator"; } //iPhone else if([modelName isEqualToSsortingng:@"iPhone1,1"]) { modelName = @"iPhone"; modelnumber = @"A1203"; } else if([modelName isEqualToSsortingng:@"iPhone1,2"]) { modelName = @"iPhone 3G"; modelnumber = @"A1241/A1324"; } else if([modelName isEqualToSsortingng:@"iPhone2,1"]) { modelName = @"iPhone 3GS"; modelnumber = @"A1303/A1325"; } else if([modelName isEqualToSsortingng:@"iPhone3,1"]) { modelName = @"iPhone 4 (GSM)"; modelnumber = @"A1332"; } else if([modelName isEqualToSsortingng:@"iPhone3,2"]) { modelName = @"iPhone 4 GSM Rev A"; modelnumber = @"?"; } else if([modelName isEqualToSsortingng:@"iPhone3,3"]) { modelName = @"iPhone 4 (CDMA)"; modelnumber = @"A1349"; } else if([modelName isEqualToSsortingng:@"iPhone4,1"]) { modelName = @"iPhone 4S"; modelnumber = @"A1387/A1431"; } else if([modelName isEqualToSsortingng:@"iPhone5,1"]) { modelName = @"iPhone 5 (GSM)"; modelnumber = @"A1428"; } else if([modelName isEqualToSsortingng:@"iPhone5,2"]) { modelName = @"iPhone 5 (GSM+CDMA)"; modelnumber = @"A1429/A1442"; } //iPod touch else if([modelName isEqualToSsortingng:@"iPod1,1"]) { modelName = @"iPod touch 1G"; modelnumber = @"A1213"; } else if([modelName isEqualToSsortingng:@"iPod2,1"]) { modelName = @"iPod touch 2G"; modelnumber = @"A1288"; } else if([modelName isEqualToSsortingng:@"iPod3,1"]) { modelName = @"iPod touch 3G"; modelnumber = @"A1318"; } else if([modelName isEqualToSsortingng:@"iPod4,1"]) { modelName = @"iPod touch 4G"; modelnumber = @"A1367"; } else if([modelName isEqualToSsortingng:@"iPod5,1"]) { modelName = @"iPod touch 5G"; modelnumber = @"A1421"; } //iPad else if([modelName isEqualToSsortingng:@"iPad1,1"]) { modelName = @"iPad 1G"; modelnumber = @"A1219/A1337"; } else if([modelName isEqualToSsortingng:@"iPad2,1"]) { modelName = @"iPad 2 (WiFi)"; modelnumber = @"A1395"; } else if([modelName isEqualToSsortingng:@"iPad2,2"]) { modelName = @"iPad 2 (GSM)"; modelnumber = @"A1396"; } else if([modelName isEqualToSsortingng:@"iPad2,3"]) { modelName = @"iPad 2 (CDMA)"; modelnumber = @"A1397"; } else if([modelName isEqualToSsortingng:@"iPad2,4"]) { modelName = @"iPad 2 (WiFi + Rev A)"; modelnumber = @"A1395"; } else if([modelName isEqualToSsortingng:@"iPad3,1"]) { modelName = @"iPad 3 (WiFi)"; modelnumber = @"A1416"; } else if([modelName isEqualToSsortingng:@"iPad3,2"]) { modelName = @"iPad 3 (GSM+CDMA)"; modelnumber = @"A1403"; } else if([modelName isEqualToSsortingng:@"iPad3,3"]) { modelName = @"iPad 3 (GSM)"; modelnumber = @"A1430"; } else if([modelName isEqualToSsortingng:@"iPad3,4"]) { modelName = @"iPad 4 (WiFi)"; modelnumber = @"A1458"; } else if([modelName isEqualToSsortingng:@"iPad3,5"]) { modelName = @"iPad 4 (GSM)"; modelnumber = @"A1459"; } else if([modelName isEqualToSsortingng:@"iPad3,6"]) { modelName = @"iPad 4 (GSM+CDMA)"; modelnumber = @"A1460"; } //iPad mini else if([modelName isEqualToSsortingng:@"iPad2,5"]) { modelName = @"iPad mini (WiFi)"; modelnumber = @"A1432"; } else if([modelName isEqualToSsortingng:@"iPad2,6"]) { modelName = @"iPad mini (GSM)"; modelnumber = @"A1454"; } else if([modelName isEqualToSsortingng:@"iPad2,7"]) { modelName = @"iPad mini (GSM+CDMA)"; modelnumber = @"A1455"; } //Apple TV, just for funn:) else if([modelName isEqualToSsortingng:@"AppleTV2,1"]) { modelName = @"Apple TV 2G"; modelnumber = @"A1378"; } else if([modelName isEqualToSsortingng:@"AppleTV3,1"]) { modelName = @"Apple TV 3G"; modelnumber = @"A1427"; } else if([modelName isEqualToSsortingng:@"AppleTV3,2"]) { modelName = @"Apple TV 3G (Rev A)"; modelnumber = @"A1469"; } NSLog(@"Device model: %@/ %@",modelName,modelnumber); 

Cela pourrait être la sortie: Device model: iPhone 4 GSM/ iPhone3,1

Essayez d'utiliser suivant: vous obtiendrez toutes les informations détaillées sur le périphérique …

 NSLog(@"uniqueIdentifier: %@", [[UIDevice currentDevice] uniqueIdentifier]); NSLog(@"name: %@", [[UIDevice currentDevice] name]); NSLog(@"systemName: %@", [[UIDevice currentDevice] systemName]); NSLog(@"systemVersion: %@", [[UIDevice currentDevice] systemVersion]); NSLog(@"model: %@", [[UIDevice currentDevice] model]); NSLog(@"localizedModel: %@", [[UIDevice currentDevice] localizedModel]); 

Si ci-dessus ne fonctionne pas pour vous, alors utilisez le projet github

MODIFIER :

Que vous soyez sur un iPhone ou un iPod Touch:

 UIDevice *device = [UIDevice currentDevice]; NSSsortingng *systemName = [device systemName]; 

Pour détecter la version de l'OS:

 UIDevice *device = [UIDevice currentDevice]; NSSsortingng *systemVersion = [device systemVersion]; 

Pour reference: comment puis-je détecter si j'ai l'iPhone 2G, 3G, 3GS

Toutefois, si vous exécutez une application sur simulateur, vous ne recevrez jamais le nom de l'appareil comme "iPhone 6" de "iPhone6 ​​+" ou quelque chose comme ça. J'utilise actuellement Xcode Version 6.2 (6C131e) dans lequel j'ai vérifié avec succès le type d'appareil même sur un simulateur en utilisant quelques macros. Ce sont

 // ******************* DEVICE INDENTIFICATION MACROS *****************// #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) #define IS_IPHONE4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f) #define IS_IPHONE5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f) #define IS_IPHONE6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0) #define IS_IPHONE6PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0) #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))