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:

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