Xác định thiết bị (iPhone, iPod Touch) với iOS


371

Có cách nào để xác định thiết bị chạy một ứng dụng. Tôi muốn phân biệt giữa iPhoneiPod Touch, nếu có thể.


1
Là lớp UIDeviceHardware sử dụng các thư viện không có giấy tờ và bị cấm?

4
Không, họ đã được ghi nhận. developer.apple.com/iphone/l
Library / document / System / từ

Có một số giải pháp khá hay trong chủ đề chứa câu trả lời này

Câu trả lời:


286

Bạn có thể sử dụng UIDevicelớp như thế này:

NSString *deviceType = [UIDevice currentDevice].model;

if([deviceType isEqualToString:@"iPhone"])
    // it's an iPhone

4
@jeeva: Mã trong liên kết đó là kiểm tra thời gian biên dịch cho các ứng dụng Universal (ứng dụng được biên dịch riêng cho iPhone và iPad). Mã này là một kiểm tra thời gian chạy. Ngoài ra, hãy nhớ rằng câu hỏi và câu trả lời này đã được viết từ lâu trước khi iPad tồn tại.
Adam Rosenfield

@Adam tôi đồng ý với bạn .. bạn đã viết một câu trả lời rất lâu rồi đó là một công việc tuyệt vời .... tôi đã nói thay vì sử dụng mô hình, bạn có thể sử dụng UIUserInterfaceIdiomPad chỉ dành cho mục đích đó ...

@jeeva, tôi không nghĩ rằng nó được hỗ trợ trong HĐH 3.0
Anil Sivadas

1
Tôi có thể đề nghị bỏ đánh dấu đây là câu trả lời hay nhất và gắn cờ câu trả lời tiếp theo, với mã lớp UIDeviceHardware đầy đủ, là tốt nhất không?
snibbe

1
@AnilSivadas: UI_USER_INTERFACE_IDIOM() an toàn để sử dụng trong các ứng dụng mà vẫn hỗ trợ iOS <3.2: nó là một vĩ mô trong UIDevice.hđặc biệt ghi vào mặc định UIUserInterfaceIdiomPhonetrên như các phiên bản iOS cũ hơn.
mkuity0

278

Đây là một bản cập nhật cho UIDeviceHardware.mtừ câu trả lời ở trên .

- (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;
}

5
Xin lỗi, chức năng này sẽ không dẫn đến một vòng lặp vô hạn do dòng đầu tiên? Ai là "bản thân" ở đây?
jakev

Vâng, tôi đã khôi phục sự thay đổi đó
Matthias Bauch

4
Tại sao tên iPad-3G? Đó có phải là tên chính thức của iPad mới? Tôi nghĩ iPad 4G hoặc iPad 3 có ý nghĩa hơn.
Stunner

4
Tên của NSStringnăng suất so sánh xếp tầng NSStringNSDictionary. Tên để xác định một không có phụ thuộc mã là .plist.
Fritz Anderson

6
FYI - có vẻ như một danh sách cập nhật được lưu giữ ở đây - theiphonewiki.com/wiki/Models
user1021430

122

Xin vui lòng sử dụng lớp này ( gist @ github )

MÃ SỐ XÓA VÀ LIÊN QUAN ĐẾN

https://gist.github.com/1323251

CẬP NHẬT (14/11/11)

Rõ ràng, mã này đã lỗi thời một chút, nhưng chắc chắn nó có thể được cập nhật bằng cách sử dụng mã trên luồng này được cung cấp Brian Robbinsbao gồm mã tương tự với các mô hình được cập nhật. Cảm ơn sự hỗ trợ về chủ đề này.


3
@Dave: Mã không bị phá vỡ, nó chỉ đơn giản trả về một chuỗi hơi kém đẹp. Bạn có một phương pháp tốt hơn để có được mô hình thiết bị? Và theo mô hình, ý tôi không chỉ là "iPhone" hay "iPod", mà là phiên bản cụ thể.
winmith

7
một điều tôi không nhận được là tại sao bạn không định nghĩa chúng là các phương thức lớp, vì bạn không duy trì bất kỳ trạng thái nào. Chỉ cần thay thế - (NSString *) bằng + (NSString *) và bạn sẽ tiết kiệm cho mình một phân bổ / phát hành khi sử dụng nó.
Ben G

1
Dòng này: NSString * platform = [NSString chuỗiWithCString: machine]; , nên là NSString * platform = [NSString chuỗiWithUTF8String: machine]; kể từ chuỗi StringWithCString không được dùng nữa.
Goles

1
@Oliver - Đã thêm. Đó là "iPhone4,1"
DougW

1
Đề nghị của tôi là thêm đoạn mã khá đơn giản này như một ý chính trong github hoặc như một dự án nguồn mở rất nhỏ. Vì Stack Overflow không phù hợp với kiểu phát triển này;)
Goles

37

Tôi sử dụng điều này trong ứng dụng của tôi. Đến nay kể từ tháng 12 năm 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;
}  

8
nó đưa ra một cảnh báo rằng "Khai báo ngầm định của hàm 'sysctlbyname' không hợp lệ trong C99" tại dòng sysctlbyname ("hw.machine", NULL, & size, NULL, 0);
Ans

Để giải quyết cảnh báo 'Hàm khai báo hàm tiềm ẩn ..', bạn cần thêm thông tin sau: #import <sys/sysctl.h>
Brabbeldas

29

Cập nhật mới nhất - Tháng 10 năm 2019: Đã thêm iPhone 11 , iPhone 11 Pro , iPhone 11 Pro Max , iPad (thế hệ thứ 7)

Cập nhật trước - Tháng 3 năm 2019: Đã thêm iPad Air 2019 (thế hệ thứ 3), iPad mini 2019 (thế hệ thứ 5), iPod Touch 2019 (thế hệ thứ 7)


Nhanh

(Đã thử nghiệm trên Swift 5, Swift 4, Swift 3)

Hàm bên dưới trả về một chuỗi có tên thiết bị hiện tại.

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
}

Bạn có thể kiểm tra nó bằng mã sau đây:

print("Current device is: ", self.userDeviceName())

Mục tiêu-C

Tôi cũng đã thêm các thiết bị mới vào mã Objective-C

Đừng quên nhập 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;
}

Bạn có thể kiểm tra nó bằng mã sau đây:

NSLog(@"Current device is: %@", [self userDeviceName]);

Chỉ cần làm rõ ... iPhone7,2là 6 nhưng iPhone8,1là 6S? họ đảo ngược cho 6 và 6S?
Magoo

2
Vâng cái này đúng rồi. Bạn có thể kiểm tra tại đây: theiphonewiki.com/wiki/Models
D1mers0n

Kiểm tra github.com/aleemrazzaq/ARCompactDeviceInfo này có mẫu Thiết bị mới nhất, iPhone X, iPhone 8, 8 Plus và iPad Thế hệ thứ 6 2018
Aleem

Bất kỳ cách nào để kiểm tra loại mô phỏng? :)
Victor Engel

Bài đăng này dường như có câu trả lời cho truy vấn của tôi: stackoverflow.com/questions/33493800/ Khăn
Victor Engel

27
if([UIDevice currentDevice].userInterfaceIdiom==UIUserInterfaceIdiomPad) {
    //Device is ipad 
}else{
    //Device is iphone
}

6
Nếu bạn nhìn vào câu hỏi Rob đề cập "Tôi muốn phân biệt giữa iPhone và iPod Touch nếu có thể". Giải pháp của bạn không giải quyết điều này.
stephenmuss

14

Cập nhật chuỗi nền tảng cho iPad Air 2iPad 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;
}

12

Sử dụng nhiều hơn

#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

bạn có thể đọc thuộc tính với

NSLog(@"platform %@, retita %@, multitasking %@", [[UIDevice currentDevice] platform], [[UIDevice currentDevice] hasRetinaDisplay] ? @"YES" : @"NO" , [[UIDevice currentDevice] hasMultitasking] ? @"YES" : @"NO");

4
Thay vì một cây if / other phức tạp, bạn chỉ cần kiểm tra xem có phải [[UIScreen mainScreen] scale]là 2 hay không (đối với iOS 5+).
Todd Lehman

Không bao gồm tính năng "hasVibr" cần thiết.
Jonny

10

Đây là một bản cập nhật nhỏ với các mẫu mới:

- (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;
}

10

Tôi biết một câu trả lời đã được đánh dấu, nhưng để tham khảo trong tương lai, bạn luôn có thể sử dụng kích thước màn hình của thiết bị để tìm ra thiết bị nào giống như vậy:

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.");
}

8

Chỉ cần thêm mã thiết bị iPhone 4S vào chuỗi này ...

IPhone 4S sẽ trả về chuỗi @ "iPhone4,1".


Tôi đã thêm bài này vào bài đăng "tăng giá" nhất
Besi

6

Làm thế nào về mã này, nếu phiên bản mới được phát hành, bạn sẽ nhận dạng với thiết bị biết cuối cùng

- (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;
}

1
Tôi không thích những gì bạn làm. Nó trả về các tài liệu tham khảo xấu cho các thiết bị không xác định. Ý tưởng tốt, nhưng thực hiện xấu.
Oliver

@Oliver Bạn có đề xuất gì? Bạn phải tưởng tượng nếu một thiết bị mới được phát hành, bạn không thể thay đổi mã và đối với tôi, nó gây ra lỗi.
Rodrigo

1
Làm cách nào để xác định iPhone 5 / iPod 5? @ "iPhone5,1" @ "iPod5,1" có đúng cách sử dụng không?
joe

6

Thêm vào mã của Arash, tôi không quan tâm đến ứng dụng của mình về kiểu máy nào tôi đang sử dụng, tôi chỉ muốn biết loại thiết bị nào, vì vậy, tôi có thể kiểm tra như sau:

    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");

                }
}

5

Dựa trên những câu trả lời rất hay ở trên, đây là những gì tôi nghĩ ra. Điều này rất giống với câu trả lời của @ Rodrigo, nhưng giải quyết mối quan tâm của @ Oliver từ nhận xét về câu trả lời đó. Điều này cũng cung cấp tùy chọn bao gồm chuỗi mô hình trong chuỗi đầu ra.

+ (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];
}

Chúng ta có thể sử dụng nó cho một ứng dụng AppStore không? mã này có sử dụng API riêng (sysctlbyname) không? Tx cho sự giúp đỡ của bạn
fvisticot

1
Không sử dụng API riêng ở đây. Điều này đã thông qua xác nhận tự động trong XCode.
benvolioT

Bạn lấy DeviceGateway từ đâu?
Nizzy

DeviceGateway là tên của lớp có các phương thức tĩnh được hiển thị. Vì vậy, dòng bạn đang hỏi về nó chỉ cần gọi phương thức tĩnh khác trong mã được trích dẫn. Hãy đặt tên cho lớp bất cứ điều gì bạn muốn.
benvolioT

5

Có một thư viện khá trưởng thành (theo tôi) cho cái gọi là SDVersion . Bạn có thể kiểm tra kiểu máy, kích thước màn hình và nhiều thông số khác của thiết bị đang chạy. Nó cũng hỗ trợ OSX.

Thí dụ:

      // 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");

Làm thế nào để sử dụng trong swift?


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;
}

3

Tôi đã tiến xa hơn một chút và chuyển đổi khối "isEqualToString" lớn thành phân loại mặt nạ bit cho loại thiết bị, thế hệ và vòng loại khác sau dấu phẩy (tôi gọi nó là thế hệ phụ). Nó được bao bọc trong một lớp với một lệnh gọi SGPl Platform, giúp tránh rất nhiều hoạt động chuỗi lặp đi lặp lại. Mã có sẵn https://github.com/danloughney/spookygroup

Lớp học cho phép bạn làm những việc như thế này:

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

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

Việc phân loại các thiết bị là trong phương thức platformBits. Phương pháp đó nên rất quen thuộc với độc giả của chủ đề này. Tôi đã phân loại các thiết bị theo loại và thế hệ của chúng vì tôi chủ yếu quan tâm đến hiệu suất tổng thể, nhưng nguồn có thể được điều chỉnh để cung cấp bất kỳ phân loại nào bạn quan tâm, màn hình võng mạc, khả năng kết nối mạng, v.v.


3

Đoạn mã được đề cập dưới đây sẽ giúp:

 if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
   // iPhone device
 }
 else if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
   // iPad device
 }
 else {
  // Other device i.e. iPod
 }

2
- (BOOL)deviceiPhoneOriPod
  {
    NSString *deviceType = [UIDevice currentDevice].model;
    if([deviceType rangeOfString:@"iPhone"].location!=NSNotFound)
      return YES;
    else
      return NO;
  }

1

Dutchie432Brian Robbinsđã cung cấp các giải pháp tuyệt vời. Nhưng vẫn còn thiếu một model, iPhone 4 của Verizon . Đây là dòng còn thiếu.

if ([platform isEqualToString:@"iPhone3,2"])    return @"iPhone 4"; //Verizon

1
Thật thú vị, có vẻ như bây giờ đã có iPhone3,3?
makdad

@makdad Vâng. Trên thực tế, một số iPhone 4 của Verizon hóa ra là 3,3.
Di Vũ

1
Bất cứ ai cũng biết định danh cho iPhone 4S chưa?
stoutyhk


1

Các giá trị có thể của

[[UIDevice currentDevice] model];

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

Nếu bạn muốn biết phần cứng iOSđang hủy hoại như thế iPhone3, iPhone4, iPhone5vv dưới đây là mã cho rằng


LƯU Ý: Mã bên dưới có thể không chứa tất cả chuỗi của thiết bị, tôi với những người khác đang duy trì cùng một mã trên GitHub, vì vậy vui lòng lấy mã mới nhất từ ​​đó

Mục tiêu-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;
}

1

Trả lời trong 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 ""
        }
    }
}

1

Để so sánh đơn giản tôi luôn thích 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)

Nó đơn giản và dễ sử dụng.


0

Tôi muốn thêm rằng để lấy lại màu sắc phía trước và vỏ của thiết bị có API riêng:

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"]);
}

Tôi đã viết blog về điều này và cung cấp một ứng dụng mẫu:

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


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

Tôi có thể đảm bảo rằng ứng dụng được đề xuất ở trên sẽ hoạt động trong iOS 7 trở lên. Tôi tin rằng nó cũng sẽ hoạt động trong iOS 6. Nhưng tôi không chắc về điều đó.


0

Bạn có thể kiểm tra GBDeviceInfo trên GitHub, cũng có sẵn thông qua Cốc Cốc. Nó cung cấp API đơn giản để phát hiện các thuộc tính khác nhau với sự hỗ trợ của tất cả các thiết bị mới nhất:

  • Gia đình thiết bị

[GBDeviceInfo deviceDetails].family == GBDeviceFamilyiPhone;

  • Mô hình thiết bị

[GBDeviceInfo deviceDetails].model == GBDeviceModeliPhone6.

Để biết thêm xem Readme .


0

Để xác định iPhone 4S, chỉ cần kiểm tra các mục sau:

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"
}

0

Tôi đã tạo một tiện ích mở rộng cho phép bạn có 3 cấp độ nhận dạng:

  1. loại thiết bị
  2. loại iPhone / iPad theo inch
  3. mô hình thiết bị

Nó cập nhật với các thiết bị iOS cuối cùng

UIDeviceDetector

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.