Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

วิธีระบุประเภทอุปกรณ์ (iPhone, iPod Touch) ด้วย Swift

เมื่อพัฒนาแอปพลิเคชัน 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,1iPod Touch 4G
iPod5,1iPod Touch 5G
iPod7,1iPod Touch 6G
iPhone3,1, iPhone3,2, iPhone3,3iPhone 4
iPhone4,1iPhone 4s
iPhone5,1, iPhone5,2iPhone 5
iPhone5,3, iPhone5,4iPhone 5c
iPhone6,1, iPhone6,2iPhone 5s
iPhone7,2iPhone 6
iPhone7,1iPhone 6 Plus
iPhone8,1iPhone 6s
iPhone8,2iPhone 6s Plus
iPhone8,4iPhone SE
iPhone9,1, iPhone9,3iPhone 7
iPhone9,2, iPhone9,4iPhone 7 Plus
iPad2,1, iPad2,2, iPad2,3, iPad2,4iPad 2
iPad3,1, iPad3,2, iPad3,3iPad 3
iPad3,4, iPad3,5, iPad3,6iPad 4
iPad4,1, iPad4,2, iPad4,3iPad Air
iPad5,3, iPad5,4iPad Air 2
iPad2,5, iPad2,6, iPad2,7iPad Mini
iPad4,4, iPad4,5, iPad4,6iPad Mini 2
iPad4,7, iPad4,8, iPad4,9iPad Mini 3
iPad5,1, iPad5,2iPad Mini 4
iPad6,3, iPad6,4iPad Pro (9.7 inch)
iPad6,7, iPad6,8iPad Pro (12.9 inch)

หมายเหตุ: ตารางนี้ครอบคลุมรุ่นเก่าๆ สำหรับรุ่นใหม่กว่านี้ ควรอัปเดตรหัสรุ่นจากแหล่งข้อมูลทางการของ Apple เช่น DeviceKit หรือ The iPhone Wiki