0

I'm trying to recognise if the iPad Retina has my app and then change something in my code. Until now i have this model map from the internet and also i have found fro iPad Pro.

public enum Model : String {
    case simulator = "simulator/sandbox",
    iPod1          = "iPod 1",
    iPod2          = "iPod 2",
    iPod3          = "iPod 3",
    iPod4          = "iPod 4",
    iPod5          = "iPod 5",
    iPad2          = "iPad 2",
    iPad3          = "iPad 3",
    iPad4          = "iPad 4",
    iPhone4        = "iPhone 4",
    iPhone4S       = "iPhone 4S",
    iPhone5        = "iPhone 5",
    iPhone5S       = "iPhone 5S",
    iPhone5C       = "iPhone 5C",
    iPadMini1      = "iPad Mini 1",
    iPadMini2      = "iPad Mini 2",
    iPadMini3      = "iPad Mini 3",
    iPadAir1       = "iPad Air 1",
    iPadAir2       = "iPad Air 2",
    iPhone6        = "iPhone 6",
    iPhone6plus    = "iPhone 6 Plus",
    iPhone6S       = "iPhone 6S",
    iPhone6Splus   = "iPhone 6S Plus",
    iPadPro        = "iPad Pro",
    iPadRetina     = "iPad Retina",
    unrecognized   = "?unrecognized?"
}

public extension UIDevice {
    public var type: Model {
        var systemInfo = utsname()
        uname(&systemInfo)
        let modelCode = withUnsafeMutablePointer(&systemInfo.machine) {
            ptr in String.fromCString(UnsafePointer<CChar>(ptr))
        }
        var modelMap : [ String : Model ] = [
            "i386"      : .simulator,
            "x86_64"    : .simulator,
            "iPod1,1"   : .iPod1,
            "iPod2,1"   : .iPod2,
            "iPod3,1"   : .iPod3,
            "iPod4,1"   : .iPod4,
            "iPod5,1"   : .iPod5,
            "iPad2,1"   : .iPad2,
            "iPad2,2"   : .iPad2,
            "iPad2,3"   : .iPad2,
            "iPad2,4"   : .iPad2,
            "iPad2,5"   : .iPadMini1,
            "iPad2,6"   : .iPadMini1,
            "iPad2,7"   : .iPadMini1,
            "iPhone3,1" : .iPhone4,
            "iPhone3,2" : .iPhone4,
            "iPhone3,3" : .iPhone4,
            "iPhone4,1" : .iPhone4S,
            "iPhone5,1" : .iPhone5,
            "iPhone5,2" : .iPhone5,
            "iPhone5,3" : .iPhone5C,
            "iPhone5,4" : .iPhone5C,
            "iPad3,1"   : .iPad3,
            "iPad3,2"   : .iPad3,
            "iPad3,3"   : .iPad3,
            "iPad3,4"   : .iPad4,
            "iPad3,5"   : .iPad4,
            "iPad3,6"   : .iPad4,
            "iPhone6,1" : .iPhone5S,
            "iPhone6,2" : .iPhone5S,
            "iPad4,1"   : .iPadAir1,
            "iPad4,2"   : .iPadAir2,
            "iPad4,4"   : .iPadMini2,
            "iPad4,5"   : .iPadMini2,
            "iPad4,6"   : .iPadMini2,
            "iPad4,7"   : .iPadMini3,
            "iPad4,8"   : .iPadMini3,
            "iPad4,9"   : .iPadMini3,
            "iPhone7,1" : .iPhone6plus,
            "iPhone7,2" : .iPhone6,
            "iPhone8,1" : .iPhone6S,
            "iPhone8,2" : .iPhone6Splus,
            "iPad6,3" : .iPadPro,
            "iPad6,4" : .iPadPro,
            "iPad6,7" : .iPadPro,
            "iPad6,8" : .iPadPro
        ]

        if let model = modelMap[String.fromCString(modelCode!)!] {
            return model
        }
        return Model.unrecognized
    }
}

And i check out the model that the user has with this simple case switch code

 switch UIDevice().type {
                case .iPhone4S:
                    print("iphone4s")
                case .iPhone5:
                   print("iphone5")
case .iPadAir2:
                print("mos def im an ipad air 2")
        case .iPadPro:
            print("am i an ipad Pro?")
default:
        print("i'm a pretty little simulator")
}

So my questions are these First of all, because i dont have an ipad Pro, is the code correct? And lastly, what should i do so i can recognise also the ipad Retina ???

Thanks a lot!

Konstantinos Natsios
  • 2,874
  • 9
  • 39
  • 74
  • You can easily search the web to find out which models are retina and which are not – Ahmad Ishfaq May 13 '16 at 17:30
  • Here's the important question: Why do you need to know the specific model? Is this just for information or does your app's code do different things based on the model? – rmaddy May 13 '16 at 17:32
  • BTW - You should see http://stackoverflow.com/questions/33493800/how-to-get-the-iphone-type-from-simulator-ios then you can test your code in the simulator. – rmaddy May 13 '16 at 17:34
  • @rmaddy lets say that i want to track down with some things ! Thanks though – Konstantinos Natsios May 13 '16 at 18:00

1 Answers1

1

Don't code these conditions yourself.Use this pod to determine on which device your app is running and if apple releases another device type just do pod update the rest will take yourself. https://github.com/dennisweissmann/DeviceKit

Ahmad Ishfaq
  • 914
  • 1
  • 8
  • 10