 ///     }
 ///
 public enum Device {
-
+    
     /// Device is an [iPod Touch (5th generation)](https://support.apple.com/kb/SP657)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP657/sp657_ipod-touch_size.jpg)
     case iPodTouch5
-
+    
     /// Device is an [iPod Touch (6th generation)](https://support.apple.com/kb/SP720)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP720/SP720-ipod-touch-specs-color-sg-2015.jpg)
     case iPodTouch6
-
+    
     /// Device is an [iPhone 4](https://support.apple.com/kb/SP587)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP643/sp643_iphone4s_color_black.jpg)
     case iPhone4
-
+    
     /// Device is an [iPhone 4s](https://support.apple.com/kb/SP643)
     ///
     /// ![Image](https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iphone/iphone5s/iphone_4s.png)
     case iPhone4s
-
+    
     /// Device is an [iPhone 5](https://support.apple.com/kb/SP655)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP655/sp655_iphone5_color.jpg)
     case iPhone5
-
+    
     /// Device is an [iPhone 5c](https://support.apple.com/kb/SP684)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP684/SP684-color_yellow.jpg)
     case iPhone5c
-
+    
     /// Device is an [iPhone 5s](https://support.apple.com/kb/SP685)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP685/SP685-color_black.jpg)
     case iPhone5s
-
+    
     /// Device is an [iPhone 6](https://support.apple.com/kb/SP705)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP705/SP705-iphone_6-mul.png)
     case iPhone6
-
+    
     /// Device is an [iPhone 6 Plus](https://support.apple.com/kb/SP706)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP706/SP706-iphone_6_plus-mul.png)
     case iPhone6Plus
-
+    
     /// Device is an [iPhone 6s](https://support.apple.com/kb/SP726)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP726/SP726-iphone6s-gray-select-2015.png)
     case iPhone6s
-
+    
     /// Device is an [iPhone 6s Plus](https://support.apple.com/kb/SP727)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP727/SP727-iphone6s-plus-gray-select-2015.png)
     case iPhone6sPlus
-
+    
     /// Device is an [iPad 2](https://support.apple.com/kb/SP622)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP622/SP622_01-ipad2-mul.png)
     case iPad2
-
+    
     /// Device is an [iPad (3rd generation)](https://support.apple.com/kb/SP647)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP662/sp662_ipad-4th-gen_color.jpg)
     case iPad3
-
+    
     /// Device is an [iPad (4th generation)](https://support.apple.com/kb/SP662)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP662/sp662_ipad-4th-gen_color.jpg)
     case iPad4
-
+    
     /// Device is an [iPad Air](https://support.apple.com/kb/SP692)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP692/SP692-specs_color-mul.png)
     case iPadAir
-
+    
     /// Device is an [iPad Air 2](https://support.apple.com/kb/SP708)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP708/SP708-space_gray.jpeg)
     case iPadAir2
-
+    
     /// Device is an [iPad Mini](https://support.apple.com/kb/SP661)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP661/sp661_ipad_mini_color.jpg)
     case iPadMini
-
+    
     /// Device is an [iPad Mini 2](https://support.apple.com/kb/SP693)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP693/SP693-specs_color-mul.png)
     case iPadMini2
-
+    
     /// Device is an [iPad Mini 3](https://support.apple.com/kb/SP709)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP709/SP709-space_gray.jpeg)
     case iPadMini3
-
+    
     /// Device is an [iPad Mini 4](https://support.apple.com/kb/SP725)
     ///
     /// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP725/SP725ipad-mini-4.png)
     case iPadMini4
+    
+    /// Device is an [iPad Pro](http://www.apple.com/ipad-pro/)
+    ///
+    /// ![Image](http://images.apple.com/v/ipad-pro/c/images/shared/buystrip/ipad_pro_large_2x.png)
+    case iPadPro
+    
+    /// Device is an [Apple TV](http://www.apple.com/tv/)
+    ///
+    /// ![Image](http://images.apple.com/v/tv/c/images/overview/buy_tv_large_2x.jpg)
+    case AppleTV
 
     /// Device is [Simulator](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/iOS_Simulator_Guide/Introduction/Introduction.html)
     ///
     /// ![Image](https://developer.apple.com/assets/elements/icons/256x256/xcode-6.png)
     case Simulator
-
+    
     /// Device is not yet known (implemented)
     /// You can still use this enum as before but the description equals the identifier (you can get multiple identifiers for the same product class (e.g. "iPhone6,1" or "iPhone 6,2" do both mean "iPhone 5s))
     case UnknownDevice(String)
-
+    
     public init() {
         var systemInfo = utsname()
         uname(&systemInfo)
         let mirror = Mirror(reflecting: systemInfo.machine)
-
+        
         // I know that reduce is O(n^2) (see http://airspeedvelocity.net/2015/08/03/arrays-linked-lists-and-performance/) but it's *so* nice ❤️ and since we are working with very short strings it shouldn't matter.
         let identifier = mirror.children.reduce("") { identifier, element in
             guard let value = element.value as? Int8 where value != 0 else { return identifier }
             return identifier + String(UnicodeScalar(UInt8(value)))
         }
-
+        
         switch identifier {
         case "iPod5,1":                                 self = iPodTouch5
         case "iPod7,1":                                 self = iPodTouch6

        case .Unplugged(let value): return value
        }
    }

}

// MARK: - CustomStringConvertible
extension Device: CustomStringConvertible {

    public var description: String {
        switch self {
        case .iPodTouch5:                   return "iPod Touch 5"

        case .iPadMini2:                    return "iPad Mini 2"
        case .iPadMini3:                    return "iPad Mini 3"
        case .iPadMini4:                    return "iPad Mini 4"
        case .iPadPro:                      return "iPad Pro"
        case .AppleTV:                      return "Apple TV"
        case .Simulator:                    return "Simulator"
        case .UnknownDevice(let identifier):return identifier
        }
    }
    
}

// MARK: - Equatable
