UIDevice的扩展、获取设备型号、系统版本、udid等

550 阅读2分钟

获取苹果设备的标识等其他信息,以及App版本名字相关信息等

苹果设备的具体型号 See: www.theiphonewiki.com/wiki/Models theapplewiki.com/wiki/List_o…

设备信息

public extension UIDevice {
 
    
    class Model {
 
 
        public class var Name: 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)))
 
            }
 
            
 
            switch identifier {
 
            
            case "iPod5,1":                                   return "iPodTouch5"
            case "iPod7,1":                                   return "iPodTouch6"
    
            case "iPhone3,1", "iPhone3,2", "iPhone3,3":       return "iPhone4"
            case "iPhone4,1":                                 return "iPhone4s"
            case "iPhone5,1", "iPhone5,2":                    return "iPhone5"
            case "iPhone5,3", "iPhone5,4":                    return "iPhone5c"
            case "iPhone6,1", "iPhone6,2":                    return "iPhone5s"
            case "iPhone7,2":                                 return "iPhone6"
            case "iPhone7,1":                                 return "iPhone6Plus"
            case "iPhone8,1":                                 return "iPhone6s"
            case "iPhone8,2":                                 return "iPhone6sPlus"
            case "iPhone8,4":                                 return "iPhoneSE"
            case "iPhone9,1",  "iPhone9,3":                   return "iPhone7"
            case "iPhone9,2",  "iPhone9,4":                   return "iPhone7Plus"
            case "iPhone10,1", "iPhone10,4":                  return "iPhone8"
            case "iPhone10,5", "iPhone10,2":                  return "iPhone8Plus"
            case "iPhone10,3", "iPhone10,6":                  return "iPhoneX"
            case "iPhone11,2":                                return "iPhoneXS"
            case "iPhone11,6":                                return "iPhoneXSMax"
            case "iPhone11,8":                                return "iPhoneXR"
            case "iPhone12,1":                                return "iPhone11"
            case "iPhone12,3":                                return "iPhone11Pro"
            case "iPhone12,5":                                return "iPhone11ProMax"
            case "iPhone12,8":                                return "iPhoneSE(2nd)"
            case "iPhone13,1":                                return "iPhone12mini"
            case "iPhone13,2":                                return "iPhone12"
            case "iPhone13,3":                                return "iPhone12Pro"
            case "iPhone13,4":                                return "iPhone12ProMax"
            case "iPhone14,4":                                return "iPhone13mini"
            case "iPhone14,5":                                return "iPhone13"
            case "iPhone14,2":                                return "iPhone13Pro"
            case "iPhone14,3":                                return "iPhone13ProMax"
            case "iPhone14,6":                                return "iPhoneSE(3rd)"  
            case "iPhone14,7":                                return "iPhone14"
            case "iPhone14,8":                                return "iPhone14Plus"
            case "iPhone15,2":                                return "iPhone14Pro"
            case "iPhone15,3":                                return "iPhone14ProMax"
            case "iPhone15,4":                                return "iPhone15"
            case "iPhone15,5":                                return "iPhone15Plus"
            case "iPhone16,1":                                return "iPhone15Pro"
            case "iPhone16,2":                                return "iPhone15ProMax"
 
            case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":  return "iPad2"
            case "iPad3,1", "iPad3,2", "iPad3,3":             return "iPad3"
            case "iPad3,4", "iPad3,5", "iPad3,6":             return "iPad4"
            case "iPad4,1", "iPad4,2", "iPad4,3":             return "iPadAir"
            case "iPad5,3", "iPad5,4":                        return "iPadAir2"
            case "iPad2,5", "iPad2,6", "iPad2,7":             return "iPadMini"
            case "iPad4,4", "iPad4,5", "iPad4,6":             return "iPadMini2"
            case "iPad4,7", "iPad4,8", "iPad4,9":             return "iPadMini3"
            case "iPad5,1", "iPad5,2":                        return "iPadMini4"
            case "iPad6,7", "iPad6,8":                        return "iPadPro"
 
            case "AppleTV5,3":                                return "AppleTV"
 
            case "i386", "x86_64":                            return "Simulator"
 
            default:                                          return identifier
 
            }
 
        }
 
         
        /// iPhoneX (机型判断---!!!适用于真机)
        public class var iPhoneX: Bool {
            if  self.identifier == "iPhone10,3" ||
                self.identifier == "iPhone10,6" {
                return true
            }
            return false
        }
 
    }
 
}

设备系统信息

public extension UIDevice {
 
    
    class System {
 
        /// 系统版本
        public class var vsrsion: String {
            return  UIDevice.current.systemVersion
        }
 
        /// uuid
        public class var udid: String {
            return  UIDevice.current.identifierForVendor?.uuidString ?? ""
        }
 
        /// 设备名字
        public class var deviceName: String {
            return  UIDevice.current.name
        }
        
    }
}
 

App信息

public extension UIDevice {
 
    
    class App {
 
        
        /// app版本version
 
        public class var vsrsion: String {
 
            return  "\(Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") ?? "1.0")"
 
        }
 
        
        /// app版本build
 
        public class var build: String {
 
            return  "\(Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") ?? "1.0")"
 
        }
 
 
        /// app名字DisplayName
 
        public class var name: String {
 
            return  "\(Bundle.main.object(forInfoDictionaryKey: "CFBundleDisplayName") ?? "")"
 
        }
 
        /// app标识bundleIdentifier
 
        public class var bundleIdentifier: String {
 
            return  Bundle.main.bundleIdentifier ?? ""
 
        }
    }
}