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) bằng Swift

Khi phát triển ứng dụng iOS, đôi khi chúng ta cần biết thiết bị nào đang chạy ứng dụng để cung cấp các tính năng tùy chỉnh cho từng loại thiết bị. Ví dụ, bạn muốn cung cấp một số tính năng trên iPhone X nhưng không trên iPhone 7. Trong bài viết này, chúng ta sẽ học cách xác định thiết bị iOS đang được sử dụng thông qua một ứng dụng iOS.

Các khái niệm cần thiết

Để đạt được kết quả mong muốn, chúng ta cần hiểu một số thuật ngữ sau:

  • utsname – là một cấu trúc nằm trong module Darwin của iOS.
  • uname – là một hàm nhận utsname làm đầu vào và trả về Int32.
  • Mirror – là biểu diễn của cấu trúc con và kiểu hiển thị của một thể hiện bất kỳ.

Việc tìm thiết bị đang sử dụng trên iOS SDK là một nhiệm vụ đơn giản nếu chúng ta chỉ cần tìm tên hoặc mô hình thiết bị. Chúng ta có thể sử dụng một trong các đoạn mã dưới đây để nhận được một chuỗi kết quả. Tuy nhiên, mã trên không cho biết chính xác thiết bị nào đang được sử dụng, nó chỉ cho biết rằng đang dùng iPhone. Để lấy chính xác tên thiết bị, chúng ta cần thực hiện một số bước bổ sung.

Lấy mã định danh thiết bị bằng Swift

Trong Swift, chúng ta sẽ sử dụng tất cả các thuật ngữ trên để lấy mã thiết bị (identifier) làm đầu ra.

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
}

Hàm này trả về mã mô hình (model code) chứ không phải tên thiết bị chính xác. Chúng ta phải so sánh biến identifier này với nhiều giá trị khác nhau để lấy tên mô hình theo yêu cầu.

Dưới đây là ví dụ kết quả khi chạy mã trên trình mô phỏng (simulator) iPhone 7 Plus chạy iOS 12.0:

Cách xác định loại thiết bị (iPhone, iPod Touch) bằng Swift

Bảng tra cứu mã mô hình thiết bị Apple

Một số mã mô hình phổ biến của thiết bị Apple và tên tương ứng:

Mã mô hìnhTên thiết bị
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)

Lưu ý: Danh sách trên không đầy đủ cho các thiết bị mới hơn (iPhone 8, X, 11, 12, 13, 14, 15, iPad Pro M1/M2, v.v.). Bạn nên cập nhật danh sách này từ tài liệu chính thức của Apple hoặc sử dụng thư viện như DeviceKit để hỗ trợ tự động.