เมื่อพัฒนาแอปพลิเคชัน iOS เราบางครั้งต้องทราบว่าอุปกรณ์ใดที่ติดตั้งแอปพลิเคชันอยู่ เพื่อให้ฟีเจอร์ที่กำหนดเองตามอุปกรณ์ที่ใช้งาน ตัวอย่างเช่น เราอาจต้องการให้ฟีเจอร์บางอย่างทำงานบน iPhone X แต่ไม่ใช่ iPhone 7 ในบทความนี้เราจะเรียนรู้วิธีค้นหาอุปกรณ์ iOS ที่ใช้งานอยู่ผ่านแอปพลิเคชัน iOS
คำศัพท์ที่จำเป็น
- utsname - โครงสร้างที่อยู่ในโมดูล Darwin ของ iOS
- uname - ฟังก์ชันที่รับ utsname เป็นอินพุตและส่งคืน Int32
- Mirror - การแสดงโครงสร้างย่อยและสไตล์การแสดงผลของอินสแตนซ์ของประเภทใดก็ได้
การค้นหาอุปกรณ์ที่ใช้งานอยู่ใน iOS SDK เป็นงานง่าย หากเราเพียงต้องการรุ่นหรือชื่ออุปกรณ์ สามารถใช้โค้ดใดโค้ดหนึ่งด้านล่างได้ และจะคืนค่าสตริงกลับมา
อย่างไรก็ตาม โค้ดข้างต้นไม่ได้ระบุอุปกรณ์ที่แน่นอน มันบอกเพียงว่าเป็น iPhone เท่านั้น เพื่อให้ได้อุปกรณ์ที่แน่นอน เราต้องผ่านขั้นตอนเพิ่มเติม
การใช้ Swift เพื่อรับรหัสอุปกรณ์
ใน Swift เราจะใช้คำศัพท์ทั้งหมดที่กล่าวมาเพื่อรับหมายเลขรุ่นอุปกรณ์เป็นผลลัพธ์
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 { return identifier }
return identifier + String(UnicodeScalar(UInt8(value)))
}
return identifier
}
ฟังก์ชันนี้ให้รหัสรุ่นอุปกรณ์ แต่ไม่ใช่ชื่ออุปกรณ์ที่แน่นอน เราต้องเปรียบเทียบตัวแปร "identifier" นี้กับค่าต่างๆ เพื่อให้ได้ชื่อรุ่นตามต้องการ
ตัวอย่างรหัสรุ่นของอุปกรณ์ 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,1 | iPhone 4s |
| iPhone5,1, iPhone5,2 | iPhone 5 |
| iPhone5,3, iPhone5,4 | iPhone 5c |
| iPhone6,1, iPhone6,2 | iPhone 5s |
| 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, iPhone9,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) |
หมายเหตุ: ตารางนี้ครอบคลุมรุ่นเก่าๆ สำหรับรุ่นใหม่กว่านี้ ควรอัปเดตรหัสรุ่นจากแหล่งข้อมูลทางการของ Apple เช่น DeviceKit หรือ The iPhone Wiki