Erkennen der spezifischen iPhone / iPod touch-Modell [Duplicate]
-
12-09-2019 - |
Frage
Mögliche Duplizieren:
Bestimmen Gerät (iPhone, iPod Touch) mit iOS
ich ein Spiel mache, dass die Peer-to-Peer-Bluetooth-Funktionen des iPhone (und wahrscheinlich auch der iPod touch der 2. Generation) verwendet. Um jedoch die Benutzer verhindern versuchen, einen Multiplayer auf einem iPod 1. Generation und iPhone 2G I für die spezifische Gerätemodell überprüfen müssen zu spielen.
[[UIDevice currentDevice] Modell] wird mir nur sagen, ob das Gerät ein "iPhone" oder ein "iPod touch". Gibt es eine Möglichkeit für die jeweilige Gerätemodell zu überprüfen, wie:. „IPhone 3GS“, „iPod touch 1. Generation“ oder etwas
EDIT:
Es gibt eine Kategorie zu UIDevice (ich glaube es von Erica Sadun erstellt wird, übernehme ich keine Gutschrift für sie), die den folgenden Code verwendet das spezifische Gerätemodell zu erhalten. Sie können die ganze Kategorie finden Sie hier zusammen mit anderen nützlichen Dingen: https://github.com/erica/uidevice -Erweiterung
#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;
}
Dies funktioniert und Anwendungen diese wurden mit in letzter Zeit in dem App Store zugelassen.
Lösung
Die komplette UIDevice (Hardware) Kategorie wahrscheinlich ist http://github.com/erica/uidevice- Erweiterung / (von Erica Sadun):
[[UIDevice currentDevice] platformType] // ex: UIDevice4GiPhone
[[UIDevice currentDevice] platformString] // ex: @"iPhone 4G"
Andere Tipps
Sie können das Gerät die Modellnummer mit uname
von sys/utsname.h
bekommen. Zum Beispiel:
#import <sys/utsname.h>
NSString*
machineName()
{
struct utsname systemInfo;
uname(&systemInfo);
return [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
}
Das Ergebnis sollte sein:
@"i386" 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 @"iPhone1,1" on iPhone @"iPhone1,2" on iPhone 3G @"iPhone2,1" on iPhone 3GS @"iPad1,1" on iPad @"iPad2,1" on iPad 2 @"iPad3,1" on iPad 3 (aka new iPad) @"iPhone3,1" on iPhone 4 @"iPhone4,1" on iPhone 4S @"iPhone5,1" on iPhone 5 @"iPhone5,2" on iPhone 5
Wie über diesen Code, wenn eine neue Version veröffentlicht wurde, werden Sie mit der letzten bekannten Gerätekennung
#include <sys/types.h>
#include <sys/sysctl.h>
- (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 @"iPhone4 AT&T"; //iPhone 4 - AT&T
if ([sDeviceModel isEqual:@"iPhone3,2"]) return @"iPhone4 Other"; //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:@"iPhone5,1"]) return @"iPhone5"; //iPhone 5 (GSM)
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;
}
BOOL hasHighResScreen = NO;
if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
CGFloat scale = [[UIScreen mainScreen] scale];
if (scale > 1.0) {
hasHighResScreen = YES;
}
}
iPhone 4 ist iPhone3,1 und iPhone3,2
iPhone 4S ist iPhone4,1
iPad 2 ist iPad2,1 iPad2,2 und iPad2,3 je nach Ausführung (GSM etc.)
iPad 3 ist iPad3,1 iPad3,2 und iPad3,3 je nach Ausführung (GSM etc.)
Siehe Iphone Geheimnisse (nach unten scrollen, um "internem Produktcodes")
Eine weitere gute Quelle ist: everyiphone.com
NSString* valueDevice = [[UIDevice currentDevice] model];
und dann prüfen, ob die Zeichenfolge gleich, was auch immer Gerät, das Sie für wie suchen:
if(value==@"iPod1,1" )
{}
und Sie sollten gut gehen