Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> iOS

Cách xác định loại thiết bị (iPhone, iPod Touch) với iPhone SDK?


Khi làm việc trên ứng dụng iOS, đôi khi chúng ta cần biết thiết bị ứng dụng được cài đặt, và cung cấp tính năng tùy chỉnh tùy theo thiết bị. Ví dụ, muốn cung cấp tính năng trên iPhone X nhưng không trên iPhone 7. Trong bài này, chúng ta sẽ học cách tìm thiết bị iOS đang sử dụng, dùng ứng dụng iOS.

Hãy xem qua một số thuật ngữ cần thiết:

utsname - cấu trúc nằm trong module Darwin của iOS.

uname - hàm nhận utsname làm đầu vào và trả về Int32.

Tìm thiết bị đang dùng trên iOS SDK là nhiệm vụ đơn giản, nếu chỉ cần tìm model hoặc tên, có thể dùng các mã dưới đây, sẽ trả về chuỗi:

  • UIDevice.current.localizedModel
  • UIDevice.current.model
  • UIDevice.current.name

Nhưng mã trên không cho biết chính xác thiết bị đang dùng, chỉ báo là iPhone đang được dùng. Để biết chính xác thiết bị, phải qua các bước.

Trong Objective-C:

NSString* deviceName() {    struct utsname systemInfo;    uname(&systemInfo);    return [NSString stringWithCString:systemInfo.machine, encoding:NSUTF8StringEncoding]; }

Mirror - Biểu diễn cấu trúc con và phong cách hiển thị của thể hiện bất kỳ kiểu nào.

Trong Swift, dùng các thuật ngữ trên để lấy mã thiết bị:

func getDevice() -> String {    var systemInfo = utsname()    uname(&systemInfo)    let machineMirror = Mirror(reflecting: systemInfo.machine)    let identifier = machineMirror.children.reduce(“”) { identifier, element in       guard let value = element.value as? Int8 , value != 0 else { identifier }       identifier + String(UnicodeScalar(UInt8(value)))    }    return identifier }

Hàm này cho mã model chứ không phải tên thiết bị chính xác.

Phải so sánh biến "identifier" này với nhiều giá trị để lấy tên model theo yêu cầu.

Kết quả chạy mã trên trình mô phỏng iPhone 7 plus:

Cách xác định loại thiết bị (iPhone, iPod Touch) với iPhone SDK?

Một số mã model thiết bị Apple và tên tương ứng:

Mã model Tên thiết bị
iPod4,1 iPod Touch 4G
iPod5,1 iPod Touch 5G
iPod7,1 iPod Touch 6G
iPhone3,1 , iPhone3,2 , iPhone3,3 iPhone 4
iPhone4 iPhone 4s
iPhone7,2 iPhone 6
iPhone7,1 iPhone 6 Plus
iPhone8,1 iPhone 6s
iPhone8,2 iPhone 6s Plus
iPhone8,4 iPhone SE
iPhone9,1 , iPhone9,3 iPhone 7
iPhone9,2 , iPhone 9,4 iPhone 7 Plus
iPad2,1 , iPad2,2 , iPad2,3 , iPad2,4 iPad 2
iPad3,1 , iPad3,2 , iPad3,3 iPad 3
iPad3,4 , iPad3,5 , iPad3,6 iPad 4
iPad4,1 , iPad4,2 , iPad4,3 iPad Air
iPad5,3 , iPad5,4 iPad Air 2
iPad2,5 , iPad2,6 , iPad2,7 iPad Mini
iPad4,4 , iPad4,5 , iPad4,6 iPad Mini 2
iPad4,7 , iPad4,8 , iPad4,9 iPad Mini 3
iPad5,1 , iPad5,2 iPad Mini 4
iPad6,3 , iPad6,4 iPad Pro (9.7 inch)
iPad6,7 , iPad6,8 iPad Pro (12.9 inch)