iOS How to detect iPhone X, iPhone 6 plus, iPhone 6, iPhone 5, iPhone 4 by macro?

前端 未结 13 686
一整个雨季
一整个雨季 2020-11-28 01:17

How to detect device model by macro? i had using something like this but the result on the simulator alway IS_IPHONE_5

#define IS_IPAD (UI_USER_INTERFACE_IDI         


        
13条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-28 01:42

    //Device Type enum
    enum DeviceType: Int {
    
    //Apple UnknownDevices
    case UnknownDevice = 0
    
    //Simulator
    case Simulator
    
    //Apple Air pods
    case AppleAirPods
    
    //Apple TV
    case AppleTV2G
    case AppleTV3G
    case AppleTV4G
    case AppleTV4K
    
    //Apple Watch
    case AppleWatch
    case AppleWatchSeries1
    case AppleWatchSeries2
    case AppleWatchSeries3
    
    //Apple Home Pods
    case AppleHomePods
    
    //Apple iPad
    case AppleIpad
    case AppleIpad2
    case AppleIpad3
    case AppleIpad4
    case AppleIpadAir
    case AppleIpadAir2
    case AppleIpadPro_12_9
    case AppleIpadPro_9_7
    case AppleIpad5
    case AppleIpadPro_12_9_Gen_2
    case AppleIpadPro_10_5
    case AppleIpadMini
    case AppleIpadMini2
    case AppleIpadMini3
    case AppleIpadMini4
    
    //Apple iPhone
    case AppleIphone
    case AppleIphone3G
    case AppleIphone3GS
    case AppleIphone4
    case AppleIphone4S
    case AppleIphone5
    case AppleIphone5C
    case AppleIphone5S
    case AppleIphone6
    case AppleIphone6P
    case AppleIphone6S
    case AppleIphone6SP
    case AppleIphoneSE
    case AppleIphone7
    case AppleIphone7P
    case AppleIphone8
    case AppleIphone8P
    case AppleIphoneX
    
    //Apple iPod touch
    case AppleIpodTouch
    case AppleIpodTouch2G
    case AppleIpodTouch3G
    case AppleIpodTouch4G
    case AppleIpodTouch5G
    case AppleIpodTouch6G
    }
    
    // Method for device type
    func getDeviceType() -> DeviceType{
        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 {
    
        //Simulator
        case "i386","x86_64": return .Simulator
    
        //Apple Air Pods
        case "AirPods1,1": return .AppleAirPods
    
        //Apple TV
        case "AppleTV2,1": return .AppleTV2G
        case "AppleTV3,1", "AppleTV3,2": return .AppleTV3G
        case "AppleTV5,3": return .AppleTV4G
        case "AppleTV6,2": return .AppleTV4K
    
        //Apple Watch
        case "Watch1,1", "Watch1,2": return .AppleWatch
        case "Watch2,6", "Watch2,7": return .AppleWatchSeries1
        case "Watch2,3", "Watch2,4": return .AppleWatchSeries2
        case "Watch3,1", "Watch3,2", "Watch3,3", "Watch3,4": return .AppleWatchSeries3
    
        // Apple HomePods
        case "AudioAccessory1,1": return .AppleHomePods
    
        //Apple iPad
        case "iPad1,1": return .AppleIpad
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4": return .AppleIpad2
        case "iPad3,1", "iPad3,2", "iPad3,3": return .AppleIpad3
        case "iPad3,4", "iPad3,5", "iPad3,6": return .AppleIpad4
        case "iPad4,1", "iPad4,2", "iPad4,3": return .AppleIpadAir
        case "iPad5,3", "iPad5,4": return .AppleIpadAir2
        case "iPad6,7", "iPad6,8": return .AppleIpadPro_12_9
        case "iPad6,3", "iPad6,4": return .AppleIpadPro_9_7
        case "iPad6,11", "iPad6,12": return .AppleIpad5
        case "iPad7,1", "iPad7,2" : return .AppleIpadPro_12_9_Gen_2
        case "iPad7,3", "iPad7,4" : return .AppleIpadPro_10_5
        case "iPad2,5", "iPad2,6", "iPad2,7": return .AppleIpadMini
        case "iPad4,4", "iPad4,5", "iPad4,6": return .AppleIpadMini2
        case "iPad4,7", "iPad4,8", "iPad4,9": return .AppleIpadMini3
        case "iPad5,1", "iPad5,2": return .AppleIpadMini4
    
        //Apple iPhone
        case "iPhone1,1": return .AppleIphone
        case "iPhone1,2": return .AppleIphone3G
        case "iPhone2,1": return .AppleIphone3GS
        case "iPhone3,1", "iPhone3,2", "iPhone3,3": return .AppleIphone4
        case "iPhone4,1": return .AppleIphone4S
        case "iPhone5,1", "iPhone5,2": return .AppleIphone5
        case "iPhone5,3", "iPhone5,4": return .AppleIphone5C
        case "iPhone6,1", "iPhone6,2": return .AppleIphone5S
        case "iPhone7,2": return .AppleIphone6
        case "iPhone7,1": return .AppleIphone6P
        case "iPhone8,1": return .AppleIphone6S
        case "iPhone8,2": return .AppleIphone6SP
        case "iPhone8,4": return .AppleIphoneSE
        case "iPhone9,1", "iPhone9,3": return .AppleIphone7
        case "iPhone9,2", "iPhone9,4": return .AppleIphone7P
        case "iPhone10,1", "iPhone10,4": return .AppleIphone8
        case "iPhone10,2", "iPhone10,5": return .AppleIphone8P
        case "iPhone10,3", "iPhone10,6": return .AppleIphoneX
    
        //Apple iPod touch
        case "iPod1,1": return .AppleIpodTouch
        case "iPod2,1": return .AppleIpodTouch2G
        case "iPod3,1": return .AppleIpodTouch3G
        case "iPod4,1": return .AppleIpodTouch4G
        case "iPod5,1": return .AppleIpodTouch5G
        case "iPod7,1": return .AppleIpodTouch6G
    
        default:
            return .UnknownDevice
        }
    }
    

提交回复
热议问题