Apakah ada cara untuk menentukan perangkat yang menjalankan aplikasi. Saya ingin membedakan antara iPhone
dan iPod Touch
, jika mungkin.
Apakah ada cara untuk menentukan perangkat yang menjalankan aplikasi. Saya ingin membedakan antara iPhone
dan iPod Touch
, jika mungkin.
Jawaban:
Anda dapat menggunakan UIDevice
kelas seperti ini:
NSString *deviceType = [UIDevice currentDevice].model;
if([deviceType isEqualToString:@"iPhone"])
// it's an iPhone
UI_USER_INTERFACE_IDIOM()
adalah aman untuk digunakan dalam aplikasi yang masih mendukung iOS <3.2: itu adalah makro di UIDevice.h
khusus ditulis untuk default UIUserInterfaceIdiomPhone
pada versi iOS yang lebih tua tersebut.
Ini adalah pembaruan untuk UIDeviceHardware.m
dari jawaban di atas .
- (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;
}
NSString
menghasilkan perbandingan kaskade NSString
adalah NSDictionary
. Nama untuk mendefinisikan satu tanpa ketergantungan kode adalah .plist
.
Silakan menggunakan kelas ini ( intisari github )
KODE DIHAPUS DAN TERKAIT DENGAN
PEMBARUAN (14/1/11)
Jelas, kode ini agak ketinggalan zaman sekarang, tetapi pasti dapat diperbarui menggunakan kode pada utas ini yang disediakan oleh Brian Robbins
yang mencakup kode serupa dengan model yang diperbarui. Terima kasih atas dukungan di utas ini.
Saya menggunakan ini di aplikasi saya. Diperbarui pada Desember 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;
}
#import <sys/sysctl.h>
Pembaruan terbaru - Oktober 2019: Menambahkan iPhone 11 , iPhone 11 Pro , iPhone 11 Pro Max , iPad (generasi ke-7)
Pembaruan sebelumnya - Maret 2019: Menambahkan iPad Air 2019 (generasi ke-3), iPad mini 2019 (generasi ke-5), iPod Touch 2019 (generasi ke-7)
(Diuji pada Swift 5, Swift 4, Swift 3)
Fungsi di bawah ini mengembalikan string dengan nama perangkat saat ini.
func userDeviceName() -> String {
let platform: 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)
}()
//iPhone
if platform == "iPhone1,1" { return "iPhone (1st generation)" }
else if platform == "iPhone1,2" { return "iPhone 3G" }
else if platform == "iPhone2,1" { return "iPhone 3GS" }
else if platform == "iPhone3,1" { return "iPhone 4 (GSM)" }
else if platform == "iPhone3,2" { return "iPhone 4 (GSM, 2nd revision)" }
else if platform == "iPhone3,3" { return "iPhone 4 (CDMA)" }
else if platform == "iPhone4,1" { return "iPhone 4S" }
else if platform == "iPhone5,1" { return "iPhone 5 (GSM)" }
else if platform == "iPhone5,2" { return "iPhone 5 (GSM+CDMA)" }
else if platform == "iPhone5,3" { return "iPhone 5c (GSM)" }
else if platform == "iPhone5,4" { return "iPhone 5c (GSM+CDMA)" }
else if platform == "iPhone6,1" { return "iPhone 5s (GSM)" }
else if platform == "iPhone6,2" { return "iPhone 5s (GSM+CDMA)" }
else if platform == "iPhone7,2" { return "iPhone 6" }
else if platform == "iPhone7,1" { return "iPhone 6 Plus" }
else if platform == "iPhone8,1" { return "iPhone 6s" }
else if platform == "iPhone8,2" { return "iPhone 6s Plus" }
else if platform == "iPhone8,4" { return "iPhone SE" }
else if platform == "iPhone9,1" { return "iPhone 7 (GSM+CDMA)" }
else if platform == "iPhone9,3" { return "iPhone 7 (GSM)" }
else if platform == "iPhone9,2" { return "iPhone 7 Plus (GSM+CDMA)" }
else if platform == "iPhone9,4" { return "iPhone 7 Plus (GSM)" }
else if platform == "iPhone10,1" { return "iPhone 8 (GSM+CDMA)" }
else if platform == "iPhone10,4" { return "iPhone 8 (GSM)" }
else if platform == "iPhone10,2" { return "iPhone 8 Plus (GSM+CDMA)" }
else if platform == "iPhone10,5" { return "iPhone 8 Plus (GSM)" }
else if platform == "iPhone10,3" { return "iPhone X (GSM+CDMA)" }
else if platform == "iPhone10,6" { return "iPhone X (GSM)" }
else if platform == "iPhone11,2" { return "iPhone XS" }
else if platform == "iPhone11,6" { return "iPhone XS Max" }
else if platform == "iPhone11,8" { return "iPhone XR" }
else if platform == "iPhone12,1" { return "iPhone 11" }
else if platform == "iPhone12,3" { return "iPhone 11 Pro" }
else if platform == "iPhone12,5" { return "iPhone 11 Pro Max" }
//iPod Touch
else if platform == "iPod1,1" { return "iPod Touch (1st generation)" }
else if platform == "iPod2,1" { return "iPod Touch (2nd generation)" }
else if platform == "iPod3,1" { return "iPod Touch (3rd generation)" }
else if platform == "iPod4,1" { return "iPod Touch (4th generation)" }
else if platform == "iPod5,1" { return "iPod Touch (5th generation)" }
else if platform == "iPod7,1" { return "iPod Touch (6th generation)" }
else if platform == "iPod9,1" { return "iPod Touch (7th generation)" }
//iPad
else if platform == "iPad1,1" { return "iPad (1st generation)" }
else if platform == "iPad2,1" { return "iPad 2 (Wi-Fi)" }
else if platform == "iPad2,2" { return "iPad 2 (GSM)" }
else if platform == "iPad2,3" { return "iPad 2 (CDMA)" }
else if platform == "iPad2,4" { return "iPad 2 (Wi-Fi, Mid 2012)" }
else if platform == "iPad3,1" { return "iPad (3rd generation) (Wi-Fi)" }
else if platform == "iPad3,2" { return "iPad (3rd generation) (GSM+CDMA)" }
else if platform == "iPad3,3" { return "iPad (3rd generation) (GSM)" }
else if platform == "iPad3,4" { return "iPad (4th generation) (Wi-Fi)"}
else if platform == "iPad3,5" { return "iPad (4th generation) (GSM)" }
else if platform == "iPad3,6" { return "iPad (4th generation) (GSM+CDMA)" }
else if platform == "iPad6,11" { return "iPad (5th generation) (Wi-Fi)" }
else if platform == "iPad6,12" { return "iPad (5th generation) (Cellular)" }
else if platform == "iPad7,5" { return "iPad (6th generation) (Wi-Fi)" }
else if platform == "iPad7,6" { return "iPad (6th generation) (Cellular)" }
else if platform == "iPad7,11" { return "iPad (7th generation) (Wi-Fi)" }
else if platform == "iPad7,12" { return "iPad (7th generation) (Cellular)" }
//iPad Mini
else if platform == "iPad2,5" { return "iPad mini (Wi-Fi)" }
else if platform == "iPad2,6" { return "iPad mini (GSM)" }
else if platform == "iPad2,7" { return "iPad mini (GSM+CDMA)" }
else if platform == "iPad4,4" { return "iPad mini 2 (Wi-Fi)" }
else if platform == "iPad4,5" { return "iPad mini 2 (Cellular)" }
else if platform == "iPad4,6" { return "iPad mini 2 (China)" }
else if platform == "iPad4,7" { return "iPad mini 3 (Wi-Fi)" }
else if platform == "iPad4,8" { return "iPad mini 3 (Cellular)" }
else if platform == "iPad4,9" { return "iPad mini 3 (China)" }
else if platform == "iPad5,1" { return "iPad mini 4 (Wi-Fi)" }
else if platform == "iPad5,2" { return "iPad mini 4 (Cellular)" }
else if platform == "iPad11,1" { return "iPad mini (5th generation) (Wi-Fi)" }
else if platform == "iPad11,2" { return "iPad mini (5th generation) (Cellular)" }
//iPad Air
else if platform == "iPad4,1" { return "iPad Air (Wi-Fi)" }
else if platform == "iPad4,2" { return "iPad Air (Cellular)" }
else if platform == "iPad4,3" { return "iPad Air (China)" }
else if platform == "iPad5,3" { return "iPad Air 2 (Wi-Fi)" }
else if platform == "iPad5,4" { return "iPad Air 2 (Cellular)" }
else if platform == "iPad11,3" { return "iPad Air (3rd generation) (Wi-Fi)" }
else if platform == "iPad11,4" { return "iPad Air (3rd generation) (Cellular)" }
//iPad Pro
else if platform == "iPad6,3" { return "iPad Pro 9.7\" (Wi-Fi)" }
else if platform == "iPad6,4" { return "iPad Pro 9.7\" (Cellular)" }
else if platform == "iPad6,7" { return "iPad Pro 12.9\" (Wi-Fi)" }
else if platform == "iPad6,8" { return "iPad Pro 12.9\" (Cellular)" }
else if platform == "iPad7,1" { return "iPad Pro 12.9\" (2nd generation) (Wi-Fi)" }
else if platform == "iPad7,2" { return "iPad Pro 12.9\" (2nd generation) (Cellular)" }
else if platform == "iPad7,3" { return "iPad Pro 10.5\" (Wi-Fi)" }
else if platform == "iPad7,4" { return "iPad Pro 10.5\" (Cellular)" }
else if platform == "iPad8,1" { return "iPad Pro 11\" (Wi-Fi)" }
else if platform == "iPad8,2" { return "iPad Pro 11\" (Wi-Fi, 1TB)" }
else if platform == "iPad8,3" { return "iPad Pro 11\" (Cellular)" }
else if platform == "iPad8,4" { return "iPad Pro 11\" (Cellular 1TB)" }
else if platform == "iPad8,5" { return "iPad Pro 12.9\" (3rd generation) (Wi-Fi)" }
else if platform == "iPad8,6" { return "iPad Pro 12.9\" (3rd generation) (Cellular)" }
else if platform == "iPad8,7" { return "iPad Pro 12.9\" (3rd generation) (Wi-Fi, 1TB)" }
else if platform == "iPad8,8" { return "iPad Pro 12.9\" (3rd generation) (Cellular, 1TB)" }
//Apple TV
else if platform == "AppleTV2,1" { return "Apple TV 2G" }
else if platform == "AppleTV3,1" { return "Apple TV 3" }
else if platform == "AppleTV3,2" { return "Apple TV 3 (2013)" }
else if platform == "AppleTV5,3" { return "Apple TV 4" }
else if platform == "AppleTV6,2" { return "Apple TV 4K" }
//Apple Watch
else if platform == "Watch1,1" { return "Apple Watch (1st generation) (38mm)" }
else if platform == "Watch1,2" { return "Apple Watch (1st generation) (42mm)" }
else if platform == "Watch2,6" { return "Apple Watch Series 1 (38mm)" }
else if platform == "Watch2,7" { return "Apple Watch Series 1 (42mm)" }
else if platform == "Watch2,3" { return "Apple Watch Series 2 (38mm)" }
else if platform == "Watch2,4" { return "Apple Watch Series 2 (42mm)" }
else if platform == "Watch3,1" { return "Apple Watch Series 3 (38mm Cellular)" }
else if platform == "Watch3,2" { return "Apple Watch Series 3 (42mm Cellular)" }
else if platform == "Watch3,3" { return "Apple Watch Series 3 (38mm)" }
else if platform == "Watch3,4" { return "Apple Watch Series 3 (42mm)" }
else if platform == "Watch4,1" { return "Apple Watch Series 4 (40mm)" }
else if platform == "Watch4,2" { return "Apple Watch Series 4 (44mm)" }
else if platform == "Watch4,3" { return "Apple Watch Series 4 (40mm Cellular)" }
else if platform == "Watch4,4" { return "Apple Watch Series 4 (44mm Cellular)" }
//else if platform == "Watch" { return "Apple Watch Series 5 (40mm)" } //5,1?
//else if platform == "Watch" { return "Apple Watch Series 5 (44mm)" } //5,2?
//else if platform == "Watch" { return "Apple Watch Series 5 (40mm Cellular)" } //5,3?
//else if platform == "Watch" { return "Apple Watch Series 5 (44mm Cellular)" } //5,4?
//Simulator
else if platform == "i386" { return "Simulator" }
else if platform == "x86_64" { return "Simulator"}
return platform
}
Anda dapat mengujinya menggunakan kode berikut:
print("Current device is: ", self.userDeviceName())
Saya juga menambahkan perangkat baru ke kode Objective-C
Jangan lupa untuk mengimpor sys / sysctl.h
#import <sys/sysctl.h>
- (NSString *) userDeviceName {
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);
//iPhone
if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone (1st generation)";
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, 2nd revision)";
if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4 (Verizon)";
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:@"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 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone9,3"]) return @"iPhone 7 (GSM)";
if ([platform isEqualToString:@"iPhone9,2"]) return @"iPhone 7 Plus (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone9,4"]) return @"iPhone 7 Plus (GSM)";
if ([platform isEqualToString:@"iPhone10,1"]) return @"iPhone 8 (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,4"]) return @"iPhone 8 (GSM)";
if ([platform isEqualToString:@"iPhone10,2"]) return @"iPhone 8 Plus (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,5"]) return @"iPhone 8 Plus (GSM)";
if ([platform isEqualToString:@"iPhone10,3"]) return @"iPhone X (GSM+CDMA)";
if ([platform isEqualToString:@"iPhone10,6"]) return @"iPhone X (GSM)";
if ([platform isEqualToString:@"iPhone11,2"]) return @"iPhone XS";
if ([platform isEqualToString:@"iPhone11,6"]) return @"iPhone XS Max";
if ([platform isEqualToString:@"iPhone11,8"]) return @"iPhone XR";
if ([platform isEqualToString:@"iPhone12,1"]) return @"iPhone 11";
if ([platform isEqualToString:@"iPhone12,3"]) return @"iPhone 11 Pro";
if ([platform isEqualToString:@"iPhone12,5"]) return @"iPhone 11 Pro Max";
//iPod Touch
if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch (1st generation)";
if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch (2nd generation)";
if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch (3rd generation)";
if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch (4th generation)";
if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch (5th generation)";
if ([platform isEqualToString:@"iPod7,1"]) return @"iPod Touch (6th generation)";
if ([platform isEqualToString:@"iPod9,1"]) return @"iPod Touch (7th generation)";
//iPad
if ([platform isEqualToString:@"iPad1,1"]) return @"iPad (1st generation)";
if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2 (Wi-Fi)";
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 (Wi-Fi, Mid 2012)";
if ([platform isEqualToString:@"iPad3,1"]) return @"iPad (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad3,2"]) return @"iPad (3rd generation) (GSM+CDMA)";
if ([platform isEqualToString:@"iPad3,3"]) return @"iPad (3rd generation) (GSM)";
if ([platform isEqualToString:@"iPad3,4"]) return @"iPad (4th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad3,5"]) return @"iPad (4th generation) (GSM)";
if ([platform isEqualToString:@"iPad3,6"]) return @"iPad (4th generation) (GSM+CDMA)";
if ([platform isEqualToString:@"iPad6,11"]) return @"iPad (5th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,12"]) return @"iPad (5th generation) (Cellular)";
if ([platform isEqualToString:@"iPad7,5"]) return @"iPad (6th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,6"]) return @"iPad (6th generation) (Cellular)";
if ([platform isEqualToString:@"iPad7,11"]) return @"iPad (7th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,12"]) return @"iPad (7th generation) (Cellular)";
//iPad Air
if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air (Wi-Fi)";
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 (Wi-Fi)";
if ([platform isEqualToString:@"iPad5,4"]) return @"iPad Air 2 (Cellular)";
if ([platform isEqualToString:@"iPad11,3"]) return @"iPad Air (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad11,4"]) return @"iPad Air (3rd generation) (Cellular)";
//iPad Pro
if ([platform isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7\" (Cellular)";
if ([platform isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9\" (Cellular)";
if ([platform isEqualToString:@"iPad7,1"]) return @"iPad Pro 12.9\" (2nd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,2"]) return @"iPad Pro 12.9\" (2nd generation) (Cellular)";
if ([platform isEqualToString:@"iPad7,3"]) return @"iPad Pro 10.5\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad7,4"]) return @"iPad Pro 10.5\" (Cellular)";
if ([platform isEqualToString:@"iPad8,1"]) return @"iPad Pro 11\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,2"]) return @"iPad Pro 11\" (Wi-Fi, 1TB)";
if ([platform isEqualToString:@"iPad8,3"]) return @"iPad Pro 11\" (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,4"]) return @"iPad Pro 11\" (Cellular)";
if ([platform isEqualToString:@"iPad8,5"]) return @"iPad Pro 12.9\" (3rd generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad8,6"]) return @"iPad Pro 12.9\" (3rd generation) (Cellular)";
if ([platform isEqualToString:@"iPad8,7"]) return @"iPad Pro 12.9\" (3rd generation) (Wi-Fi, 1TB)";
if ([platform isEqualToString:@"iPad8,8"]) return @"iPad Pro 12.9\" (3rd generation) (Cellular, 1TB)";
//iPad mini
if ([platform isEqualToString:@"iPad2,5"]) return @"iPad mini (Wi-Fi)";
if ([platform isEqualToString:@"iPad2,6"]) return @"iPad mini (GSM)";
if ([platform isEqualToString:@"iPad2,7"]) return @"iPad mini (GSM+CDMA)";
if ([platform isEqualToString:@"iPad4,4"]) return @"iPad mini 2 (Wi-Fi)";
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 (Wi-Fi)";
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 (Wi-Fi)";
if ([platform isEqualToString:@"iPad5,2"]) return @"iPad mini 4 (Cellular)";
if ([platform isEqualToString:@"iPad11,1"]) return @"iPad mini (5th generation) (Wi-Fi)";
if ([platform isEqualToString:@"iPad11,2"]) return @"iPad mini (5th generation) (Cellular)";
//Apple TV
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:@"AppleTV5,3"]) return @"Apple TV 4";
if ([platform isEqualToString:@"AppleTV6,2"]) return @"Apple TV 4K";
//Apple Watch
if ([platform isEqualToString:@"Watch1,1"]) return @"Apple Watch (1st generation) (38mm)";
if ([platform isEqualToString:@"Watch1,2"]) return @"Apple Watch (1st generation) (42mm)";
if ([platform isEqualToString:@"Watch2,6"]) return @"Apple Watch Series 1 (38mm)";
if ([platform isEqualToString:@"Watch2,7"]) return @"Apple Watch Series 1 (42mm)";
if ([platform isEqualToString:@"Watch2,3"]) return @"Apple Watch Series 2 (38mm)";
if ([platform isEqualToString:@"Watch2,4"]) return @"Apple Watch Series 2 (42mm)";
if ([platform isEqualToString:@"Watch3,1"]) return @"Apple Watch Series 3 (38mm Cellular)";
if ([platform isEqualToString:@"Watch3,2"]) return @"Apple Watch Series 3 (42mm Cellular)";
if ([platform isEqualToString:@"Watch3,3"]) return @"Apple Watch Series 3 (38mm)";
if ([platform isEqualToString:@"Watch3,4"]) return @"Apple Watch Series 3 (42mm)";
if ([platform isEqualToString:@"Watch4,1"]) return @"Apple Watch Series 4 (40mm)";
if ([platform isEqualToString:@"Watch4,2"]) return @"Apple Watch Series 4 (44mm)";
if ([platform isEqualToString:@"Watch4,3"]) return @"Apple Watch Series 4 (40mm Cellular)";
if ([platform isEqualToString:@"Watch4,4"]) return @"Apple Watch Series 4 (44mm Cellular)";
//if ([platform isEqualToString:@"Watch"]) return @"Apple Watch Series 5 (40mm)";
//if ([platform isEqualToString:@"Watch"]) return @"Apple Watch Series 5 (44mm)";
//if ([platform isEqualToString:@"Watch"]) return @"Apple Watch Series 5 (40mm Cellular)";
//if ([platform isEqualToString:@"Watch"]) return @"Apple Watch Series 5 (44mm Cellular)";
//Simulator
if ([platform isEqualToString:@"i386"]) return @"Simulator";
if ([platform isEqualToString:@"x86_64"]) return @"Simulator";
return platform;
}
Anda dapat mengujinya menggunakan kode berikut:
NSLog(@"Current device is: %@", [self userDeviceName]);
iPhone7,2
apakah 6 tetapi iPhone8,1
6S? mereka terbalik untuk 6 dan 6S?
if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
//Device is ipad
}else{
//Device is iphone
}
String platform yang diperbarui untuk iPad Air 2
dan 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;
}
Lebih bermanfaat
#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
Anda dapat membaca properti dengan
NSLog(@"platform %@, retita %@, multitasking %@", [[UIDevice currentDevice] platform], [[UIDevice currentDevice] hasRetinaDisplay] ? @"YES" : @"NO" , [[UIDevice currentDevice] hasMultitasking] ? @"YES" : @"NO");
[[UIScreen mainScreen] scale]
2 atau tidak (untuk iOS 5+).
Berikut pembaruan kecil dengan model-model baru:
- (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;
}
Saya tahu jawaban sudah dicentang, tetapi untuk referensi di masa mendatang, Anda selalu dapat menggunakan ukuran layar perangkat untuk mencari tahu di mana perangkat itu seperti ini:
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.");
}
Hanya menambahkan kode perangkat iPhone 4S ke utas ini ...
IPhone 4S akan mengembalikan string @ "iPhone4,1".
Bagaimana dengan kode ini, jika versi baru dirilis, Anda akan mengidentifikasi dengan perangkat yang tahu terakhir
- (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;
}
Menambah kode Arash, saya tidak peduli untuk aplikasi saya model apa yang saya gunakan, saya hanya ingin tahu jenis perangkat apa, jadi, saya bisa menguji sebagai berikut:
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");
}
}
Berdasarkan jawaban yang sangat bagus di atas, inilah yang saya temukan. Ini sangat mirip dengan jawaban @ Rodrigo, tetapi alamat keprihatinan @ Oliver dari komentar pada jawaban itu. Ini juga menyediakan opsi untuk memasukkan string model ke dalam string output.
+ (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];
}
Ada perpustakaan yang cukup matang (oleh saya) untuk itu yang disebut SDVersion . Anda dapat memeriksa untuk menjalankan model perangkat, ukuran layar dan banyak parameter lainnya. Ini juga mendukung OSX.
Contoh:
// 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");
NSString *deviceType = [UIDevice currentDevice].model;
#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;
}
Saya mengambilnya sedikit lebih jauh dan mengubah blok "isEqualToString" yang besar menjadi klasifikasi bit mask untuk tipe perangkat, generasi, dan kualifikasi lainnya setelah koma (saya menyebutnya sub generasi). Itu dibungkus dalam kelas dengan panggilan singleton SGPlatform yang menghindari banyak operasi string berulang. Kode tersedia https://github.com/danloughney/spookyGroup
Kelas memungkinkan Anda melakukan hal-hal seperti ini:
if ([SGPlatform iPad] && [SGPlatform generation] > 3) {
// set for high performance
}
dan
switch ([SGPlatform deviceMask]) {
case DEVICE_IPHONE:
break;
case DEVICE_IPAD:
break;
case DEVICE_IPAD_MINI:
break;
}
Klasifikasi perangkat berada dalam metode platformBits. Metode itu harus sangat akrab bagi pembaca utas ini. Saya telah mengklasifikasikan perangkat berdasarkan jenis dan generasi mereka karena saya sebagian besar tertarik pada kinerja keseluruhan, tetapi sumbernya dapat disesuaikan untuk memberikan klasifikasi yang Anda minati, layar retina, kemampuan jaringan, dll.
Cuplikan kode yang disebutkan di bawah ini akan membantu:
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
// iPhone device
}
else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
// iPad device
}
else {
// Other device i.e. iPod
}
- (BOOL)deviceiPhoneOriPod
{
NSString *deviceType = [UIDevice currentDevice].model;
if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound)
return YES;
else
return NO;
}
Dutchie432
dan Brian Robbins
telah memberikan solusi hebat. Namun masih ada satu model yang hilang, Verizon iPhone 4 . Inilah garis yang hilang.
if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4"; //Verizon
Saya suka barang Erica Sadun. Dia termasuk perangkat AppleTV dan lainnya yang mungkin tidak Anda pikirkan.
https://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.h
Kemungkinan katup
[[UIDevice currentDevice] model];
adalah iPod touch
, iPhone
, iPhone Simulator
, iPad
,iPad Simulator
Jika Anda ingin tahu mana perangkat keras iOS
adalah merusak pada seperti iPhone3
, iPhone4
, iPhone5
dll di bawah ini adalah kode untuk itu
CATATAN: Kode di bawah ini mungkin tidak mengandung semua string perangkat, saya dengan orang lain mempertahankan kode yang sama di GitHub jadi tolong ambil kode terbaru dari sana
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;
}
Jawab di Swift 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 ""
}
}
}
Untuk perbandingan sederhana, saya selalu suka makro:
#define IS_IPOD [[UIDevice currentDevice].model containsString:@"iPod"]
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
Ini sederhana dan mudah digunakan.
Saya ingin menambahkan itu untuk mengambil warna depan dan penutup perangkat ada API pribadi:
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"]);
}
Saya telah membuat blog tentang hal ini dan memberikan contoh aplikasi:
Anda dapat memeriksa GBDeviceInfo di GitHub, juga tersedia melalui CocoaPods. Ini menyediakan API sederhana untuk mendeteksi berbagai properti dengan dukungan semua perangkat terbaru:
[GBDeviceInfo deviceDetails].family == GBDeviceFamilyiPhone;
[GBDeviceInfo deviceDetails].model == GBDeviceModeliPhone6.
Untuk lebih lanjut, baca Readme .
Untuk mengidentifikasi iPhone 4S, cukup periksa yang berikut:
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"
}
Saya telah membuat ekstensi yang memungkinkan Anda memiliki 3 level identifikasi:
Ini diperbarui dengan perangkat iOS terakhir