Skip to content

Commit 952c2cd

Browse files
authored
Add support for the 2020 iPad Pro (devicekit#235)
* Add support for the 2020 iPad Pro. * Add variables for checking if device has a LiDAR sensor. * Add test for LiDAR values. * Added correct device identifiers and documentation for new iPad Pro 2020. * Fix testIsPro test. * Updated changelog for 3.1.0. * Added LiDAR function to changelog.
1 parent 9595fd9 commit 952c2cd

File tree

4 files changed

+147
-75
lines changed

4 files changed

+147
-75
lines changed

CHANGELOG.md

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,31 @@
11
# Changelog
22

3+
## Version 3.1.0
4+
5+
Releasedate: TBD
6+
7+
```ruby
8+
pod 'DeviceKit', :git => 'https://github.com/devicekit/DeviceKit.git', :branch => 'master'
9+
#pod 'DeviceKit', '~> 3.1'
10+
```
11+
12+
### 2020 iPad Pro
13+
- Added support for the new 2020 iPad Pro. ([#235](https://github.com/devicekit/DeviceKit/pull/235))
14+
```swift
15+
Device.iPadPro11Inch2 // iPad Pro (11-inch) (2nd generation)
16+
Device.iPadPro12inch4 // iPad Pro (12.9-inch) (4th generation)
17+
```
18+
19+
### New features
20+
- Added new functions for detecting LiDAR support.
21+
- `Device.allDevicesWithALidarSensor` and `Device.current.hasLidarSensor`
22+
323
## Version 3.0.0
424

525
Releasedate: 2020-01-19
626

727
```ruby
8-
pod 'DeviceKit', :git => 'https://github.com/devicekit/DeviceKit.git', :branch => 'master'
9-
#pod 'DeviceKit', '~> 3.0'
28+
pod 'DeviceKit', '~> 3.0'
1029
```
1130

1231
### Breaking changes

Source/Device.generated.swift

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,14 @@ public enum Device {
224224
///
225225
/// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP785/ipad-pro-12-2018_2x.png)
226226
case iPadPro12Inch3
227+
/// Device is an [iPad Pro 11-inch (2nd generation)](https://support.apple.com/kb/SP814)
228+
///
229+
/// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP814/ipad-pro-11-2020.jpeg)
230+
case iPadPro11Inch2
231+
/// Device is an [iPad Pro 12.9-inch (4th generation)](https://support.apple.com/kb/SP815)
232+
///
233+
/// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP815/ipad-pro-12-2020.jpeg)
234+
case iPadPro12Inch4
227235
/// Device is a [HomePod](https://support.apple.com/kb/SP773)
228236
///
229237
/// ![Image](https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP773/homepod_space_gray_large_2x.jpg)
@@ -368,6 +376,8 @@ public enum Device {
368376
case "iPad7,3", "iPad7,4": return iPadPro10Inch
369377
case "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4": return iPadPro11Inch
370378
case "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8": return iPadPro12Inch3
379+
case "iPad8,9", "iPad8,10": return iPadPro11Inch2
380+
case "iPad8,11", "iPad8,12": return iPadPro12Inch4
371381
case "AudioAccessory1,1": return homePod
372382
case "i386", "x86_64": return simulator(mapToDevice(identifier: ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] ?? "iOS"))
373383
default: return unknown(identifier)
@@ -463,6 +473,8 @@ public enum Device {
463473
case .iPadPro10Inch: return 10.5
464474
case .iPadPro11Inch: return 11.0
465475
case .iPadPro12Inch3: return 12.9
476+
case .iPadPro11Inch2: return 11.0
477+
case .iPadPro12Inch4: return 12.9
466478
case .homePod: return -1
467479
case .simulator(let model): return model.diagonal
468480
case .unknown: return -1
@@ -536,6 +548,8 @@ public enum Device {
536548
case .iPadPro10Inch: return (width: 3, height: 4)
537549
case .iPadPro11Inch: return (width: 139, height: 199)
538550
case .iPadPro12Inch3: return (width: 512, height: 683)
551+
case .iPadPro11Inch2: return (width: 139, height: 199)
552+
case .iPadPro12Inch4: return (width: 512, height: 683)
539553
case .homePod: return (width: 4, height: 5)
540554
case .simulator(let model): return model.screenRatio
541555
case .unknown: return (width: -1, height: -1)
@@ -575,7 +589,7 @@ public enum Device {
575589

576590
/// All iPads
577591
public static var allPads: [Device] {
578-
return [.iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
592+
return [.iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
579593
}
580594

581595
/// All X-Series Devices
@@ -591,7 +605,7 @@ public enum Device {
591605

592606
/// All Pro Devices
593607
public static var allProDevices: [Device] {
594-
return [.iPhone11Pro, .iPhone11ProMax, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
608+
return [.iPhone11Pro, .iPhone11ProMax, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
595609
}
596610

597611
/// All mini Devices
@@ -683,12 +697,12 @@ public enum Device {
683697

684698
/// All Face ID Capable Devices
685699
public static var allFaceIDCapableDevices: [Device] {
686-
return [.iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadPro11Inch, .iPadPro12Inch3]
700+
return [.iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
687701
}
688702

689703
/// All Devices with Touch ID or Face ID
690704
public static var allBiometricAuthenticationCapableDevices: [Device] {
691-
return [.iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
705+
return [.iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
692706
}
693707

694708
/// Returns whether or not the device has Touch ID
@@ -723,7 +737,7 @@ public enum Device {
723737

724738
/// All devices that feature a screen with rounded corners.
725739
public static var allDevicesWithRoundedDisplayCorners: [Device] {
726-
return [.iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadPro11Inch, .iPadPro12Inch3]
740+
return [.iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
727741
}
728742

729743
/// Returns whether or not the device has a screen with rounded corners.
@@ -746,10 +760,20 @@ public enum Device {
746760
return [.iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax]
747761
}
748762

749-
/// Returns whether or not the device supports wireless charging
763+
/// Returns whether or not the device supports wireless charging.
750764
public var supportsWirelessCharging: Bool {
751765
return isOneOf(Device.allDevicesWithWirelessChargingSupport) || isOneOf(Device.allDevicesWithWirelessChargingSupport.map(Device.simulator))
752766
}
767+
768+
/// All devices that have a LiDAR sensor.
769+
public static var allDevicesWithALidarSensor: [Device] {
770+
return [.iPadPro11Inch2, .iPadPro12Inch4]
771+
}
772+
773+
/// Returns whether or not the device has a LiDAR sensor.
774+
public var hasLidarSensor: Bool {
775+
return isOneOf(Device.allDevicesWithALidarSensor) || isOneOf(Device.allDevicesWithALidarSensor.map(Device.simulator))
776+
}
753777
#elseif os(tvOS)
754778
/// All TVs
755779
public static var allTVs: [Device] {
@@ -936,6 +960,8 @@ public enum Device {
936960
case .iPadPro10Inch: return 264
937961
case .iPadPro11Inch: return 264
938962
case .iPadPro12Inch3: return 264
963+
case .iPadPro11Inch2: return 264
964+
case .iPadPro12Inch4: return 264
939965
case .homePod: return -1
940966
case .simulator(let model): return model.ppi
941967
case .unknown: return nil
@@ -1036,6 +1062,8 @@ extension Device: CustomStringConvertible {
10361062
case .iPadPro10Inch: return "iPad Pro (10.5-inch)"
10371063
case .iPadPro11Inch: return "iPad Pro (11-inch)"
10381064
case .iPadPro12Inch3: return "iPad Pro (12.9-inch) (3rd generation)"
1065+
case .iPadPro11Inch2: return "iPad Pro (11-inch) (2nd generation)"
1066+
case .iPadPro12Inch4: return "iPad Pro (12.9-inch) (4th generation)"
10391067
case .homePod: return "HomePod"
10401068
case .simulator(let model): return "Simulator (\(model))"
10411069
case .unknown(let identifier): return identifier
@@ -1118,6 +1146,8 @@ extension Device: CustomStringConvertible {
11181146
case .iPadPro10Inch: return "iPad Pro (10.5-inch)"
11191147
case .iPadPro11Inch: return "iPad Pro (11-inch)"
11201148
case .iPadPro12Inch3: return "iPad Pro (12.9-inch) (3rd generation)"
1149+
case .iPadPro11Inch2: return "iPad Pro (11-inch) (2nd generation)"
1150+
case .iPadPro12Inch4: return "iPad Pro (12.9-inch) (4th generation)"
11211151
case .homePod: return "HomePod"
11221152
case .simulator(let model): return "Simulator (\(model))"
11231153
case .unknown(let identifier): return identifier
@@ -1402,7 +1432,7 @@ extension Device {
14021432

14031433
/// All Apple Pencil Capable Devices
14041434
public static var allApplePencilCapableDevices: [Device] {
1405-
return [.iPad6, .iPadAir3, .iPad7, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
1435+
return [.iPad6, .iPadAir3, .iPad7, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
14061436
}
14071437

14081438
/// Returns supported version of the Apple Pencil
@@ -1418,6 +1448,8 @@ extension Device {
14181448
case .iPadPro10Inch: return .firstGeneration
14191449
case .iPadPro11Inch: return .secondGeneration
14201450
case .iPadPro12Inch3: return .secondGeneration
1451+
case .iPadPro11Inch2: return .secondGeneration
1452+
case .iPadPro12Inch4: return .secondGeneration
14211453
case .simulator(let model): return model.applePencilSupport
14221454
default: return []
14231455
}
@@ -1483,6 +1515,8 @@ extension Device {
14831515
case .iPhoneXS: return [.wide, .telephoto]
14841516
case .iPhoneXSMax: return [.wide, .telephoto]
14851517
case .iPhone11: return [.wide, .ultraWide]
1518+
case .iPadPro11Inch2: return [.wide, .ultraWide]
1519+
case .iPadPro12Inch4: return [.wide, .ultraWide]
14861520
case .iPhone11Pro: return [.wide, .telephoto, .ultraWide]
14871521
case .iPhone11ProMax: return [.wide, .telephoto, .ultraWide]
14881522
default: return []
@@ -1491,18 +1525,18 @@ extension Device {
14911525

14921526
/// All devices that feature a camera
14931527
public static var allDevicesWithCamera: [Device] {
1494-
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
1528+
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
14951529
}
14961530

14971531
/// All devices that feature a normal camera
14981532
@available(*, deprecated, renamed: "allDevicesWithWideCamera")
14991533
public static var allDevicesWithNormalCamera: [Device] {
1500-
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
1534+
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
15011535
}
15021536

15031537
/// All devices that feature a wide camera
15041538
public static var allDevicesWithWideCamera: [Device] {
1505-
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3]
1539+
return [.iPodTouch5, .iPodTouch6, .iPodTouch7, .iPhone4, .iPhone4s, .iPhone5, .iPhone5c, .iPhone5s, .iPhone6, .iPhone6Plus, .iPhone6s, .iPhone6sPlus, .iPhone7, .iPhone7Plus, .iPhoneSE, .iPhone8, .iPhone8Plus, .iPhoneX, .iPhoneXS, .iPhoneXSMax, .iPhoneXR, .iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2, .iPad5, .iPad6, .iPadAir3, .iPad7, .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4, .iPadMini5, .iPadPro9Inch, .iPadPro12Inch, .iPadPro12Inch2, .iPadPro10Inch, .iPadPro11Inch, .iPadPro12Inch3, .iPadPro11Inch2, .iPadPro12Inch4]
15061540
}
15071541

15081542
/// All devices that feature a telephoto camera
@@ -1512,7 +1546,7 @@ extension Device {
15121546

15131547
/// All devices that feature an ultra wide camera
15141548
public static var allDevicesWithUltraWideCamera: [Device] {
1515-
return [.iPhone11, .iPhone11Pro, .iPhone11ProMax]
1549+
return [.iPhone11, .iPhone11Pro, .iPhone11ProMax, .iPadPro11Inch2, .iPadPro12Inch4]
15161550
}
15171551

15181552
/// Returns whether or not the current device has a camera

0 commit comments

Comments
 (0)