เมื่อทำงานบนแอปพลิเคชัน iOS เราบางครั้งต้องรู้ว่าอุปกรณ์ไหนที่ติดตั้งแอปพลิเคชัน และให้ฟีเจอร์ที่กำหนดเองขึ้นอยู่กับอุปกรณ์ที่ใช้ ตัวอย่างเช่น เราต้องการให้ฟีเจอร์บางอย่างบน iPhone X แต่ไม่ใช่ iPhone 7 ในบทความนี้ เราจะเรียนรู้วิธีหาอุปกรณ์ iOS ที่ใช้ โดยใช้ iOS Application
มาดูคำบางคำที่จะต้องใช้เพื่อให้ได้ผลลัพธ์ที่ต้องการ
utsname - โครงสร้างนี้อยู่ใน Darwin module ของ iOS
uname - uname เป็นฟังก์ชันที่รับ utsname เป็น input และคืนค่า Int32 เป็น output
การหาอุปกรณ์ที่ใช้บน iOS SDK เป็นงานง่าย หากเราแค่ต้องการหา model หรือ name เราสามารถใช้โค้ดด้านล่างได้ และจะได้ string กลับมา
- UIDevice.current.localizedModel
- UIDevice.current.model
- UIDevice.current.name
แตโค้ดข้างต้นไม่ได้บอกอุปกรณ์ที่แน่นอน มันบอกแค่ว่า iPhone กำลังถูกใช้ เพื่อให้ได้อุปกรณ์ที่แน่นอน เราต้องผ่านขั้นตอนบางอย่าง
ใน Objective-C เราสามารถทำได้แบบนี้
NSString* deviceName() { struct utsname systemInfo; uname(&systemInfo); return [NSString stringWithCString:systemInfo.machine, encoding:NSUTF8StringEncoding]; }Mirror - การแทนของโครงสร้างย่อยและรูปแบบการแสดงของอินสแตนซ์ของประเภทใดๆ
ใน Swift เราจะใช้ term ทั้งหมดที่กล่าวมาเพื่อได้ device number เป็น output
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 }ฟังก์ชันนี้ให้ model code แต่ไม่ได้ให้ device name อย่างแน่นอน
เราต้องเปรียบเทียบตัวแปร "identifier" นี้กับหลายค่าเพื่อได้ model name ตามความต้องการ
ผลลัพธ์เมื่อรันโค้ดนี้บน iPhone 7 plus simulator

model codes สำหรับอุปกรณ์ Apple บางตัวและชื่อของพวกเขาคือ -
| 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) |