       case .iPadMini2:                    return "iPad Mini 2"
       case .iPadMini3:                    return "iPad Mini 3"
       case .iPadMini4:                    return "iPad Mini 4"
-      case .iPadPro:                      return "iPad Pro"
+      case .iPadPro9Inch:                 return "9.7-inch iPad Pro"
+      case .iPadPro12Inch:                return "12.9-inch iPad Pro"
       case .simulator(let model):         return "Simulator (\(model))"
       case .unknown(let identifier):      return identifier
       }

  /// 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

  #elseif os(tvOS)
  /// Device is an [Apple TV](http://www.apple.com/tv/)


    // 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, value != 0 else { return identifier }
      return identifier + String(UnicodeScalar(UInt8(value)))
    }

