mirror of
https://github.com/devicekit/DeviceKit.git
synced 2026-05-17 10:20:34 +00:00
Fix Apple Pencil compatibility for M4 iPad Pro and M2/M3 iPad Air models (#474)
* Initial plan * Fix Apple Pencil compatibility for iPad models * Add tests for Apple Pencil compatibility * Add changelog entry and fix trailing whitespace in tests * Fix linting issues. * Fix changelog entry. * Fix additional linting issues. * Fix ApplePencilSupport OptionSet raw values to use non-overlapping bits The firstGenerationUsbC raw value (0x03) overlapped with firstGeneration (0x01) and secondGeneration (0x02), causing contains() checks to return incorrect results. Changed to proper power-of-2 values.
This commit is contained in:
@@ -4,6 +4,8 @@ disabled_rules:
|
||||
- switch_case_alignment
|
||||
- type_body_length
|
||||
- identifier_name
|
||||
- trailing_comma
|
||||
- function_body_length
|
||||
|
||||
opt_in_rules:
|
||||
- anyobject_protocol
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
### Bug fixes
|
||||
|
||||
- Fixed iPhone Air incorrectly marked as having ultra-wide camera. ([#463](https://github.com/devicekit/DeviceKit/pull/463))
|
||||
- Fixed Apple Pencil compatibility for M4 iPad Pro, M2/M3 iPad Air, iPad (10th gen), and iPad (A16) models. ([#474](https://github.com/devicekit/DeviceKit/pull/474))
|
||||
- Fixed `ApplePencilSupport` OptionSet raw values so that `.firstGenerationUsbC` no longer incorrectly overlaps with `.firstGeneration` and `.secondGeneration`. ([#474](https://github.com/devicekit/DeviceKit/pull/474))
|
||||
- Exclude unhandled files (`Info.plist`, `Device.swift.gyb`) to suppress SPM warnings. ([#484](https://github.com/devicekit/DeviceKit/pull/484))
|
||||
|
||||
## Version 5.7.0
|
||||
|
||||
@@ -96,8 +96,9 @@ if Device.volumeAvailableCapacityForImportantUsage ?? 0 > Int64(1_000) {
|
||||
// Get the underlying device
|
||||
let simulator = Device.simulator(.iPhone8Plus)
|
||||
let realDevice = Device.iPhone8Plus
|
||||
simulator.realDevice == realDevice // true
|
||||
realDevice.realDevice == realDevice // true
|
||||
|
||||
_ = simulator.realDevice == realDevice // true
|
||||
_ = realDevice.realDevice == realDevice // true
|
||||
|
||||
// Get device thermal state
|
||||
if device.thermalState == .nominal {
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
// swift-tools-version:5.3
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ===----------------------------------------------------------------------=== //
|
||||
//
|
||||
// This source file is part of the DeviceKit open source project
|
||||
//
|
||||
@@ -8,7 +8,7 @@
|
||||
// License: https://github.com/dennisweissmann/DeviceKit/blob/master/LICENSE
|
||||
// Contributors: https://github.com/dennisweissmann/DeviceKit#contributors
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ===----------------------------------------------------------------------=== //
|
||||
|
||||
import PackageDescription
|
||||
|
||||
|
||||
@@ -623,7 +623,7 @@ public enum Device {
|
||||
/// - parameter identifier: The device identifier, e.g. "iPhone7,1". Can be obtained from `Device.identifier`.
|
||||
///
|
||||
/// - returns: An initialized `Device`.
|
||||
public static func mapToDevice(identifier: String) -> Device { // swiftlint:disable:this cyclomatic_complexity function_body_length
|
||||
public static func mapToDevice(identifier: String) -> Device {
|
||||
#if os(iOS)
|
||||
switch identifier {
|
||||
case "iPod5,1": return iPodTouch5
|
||||
@@ -2197,7 +2197,7 @@ extension Device {
|
||||
|
||||
/// The volume’s available capacity in bytes for storing nonessential resources.
|
||||
@available(iOS 11.0, *)
|
||||
public static var volumeAvailableCapacityForOpportunisticUsage: Int64? { //swiftlint:disable:this identifier_name
|
||||
public static var volumeAvailableCapacityForOpportunisticUsage: Int64? { // swiftlint:disable:this identifier_name
|
||||
return (try? rootURL.resourceValues(forKeys: [.volumeAvailableCapacityForOpportunisticUsageKey]))?.volumeAvailableCapacityForOpportunisticUsage
|
||||
}
|
||||
|
||||
@@ -2247,8 +2247,8 @@ extension Device {
|
||||
|
||||
public static let firstGeneration = ApplePencilSupport(rawValue: 0x01)
|
||||
public static let secondGeneration = ApplePencilSupport(rawValue: 0x02)
|
||||
public static let firstGenerationUsbC = ApplePencilSupport(rawValue: 0x03)
|
||||
public static let pro = ApplePencilSupport(rawValue: 0x04)
|
||||
public static let firstGenerationUsbC = ApplePencilSupport(rawValue: 0x04)
|
||||
public static let pro = ApplePencilSupport(rawValue: 0x08)
|
||||
}
|
||||
|
||||
/// All Apple Pencil Capable Devices
|
||||
@@ -2269,8 +2269,8 @@ extension Device {
|
||||
case .iPadPro12Inch: return .firstGeneration
|
||||
case .iPadPro12Inch2: return .firstGeneration
|
||||
case .iPadPro10Inch: return .firstGeneration
|
||||
case .iPad10: return .firstGenerationUsbC
|
||||
case .iPadA16: return .firstGenerationUsbC
|
||||
case .iPad10: return [.firstGeneration, .firstGenerationUsbC]
|
||||
case .iPadA16: return [.firstGeneration, .firstGenerationUsbC]
|
||||
case .iPadAir4: return [.secondGeneration, .firstGenerationUsbC]
|
||||
case .iPadAir5: return [.secondGeneration, .firstGenerationUsbC]
|
||||
case .iPadMini6: return [.secondGeneration, .firstGenerationUsbC]
|
||||
@@ -2282,17 +2282,17 @@ extension Device {
|
||||
case .iPadPro12Inch5: return [.secondGeneration, .firstGenerationUsbC]
|
||||
case .iPadPro11Inch4: return [.secondGeneration, .firstGenerationUsbC]
|
||||
case .iPadPro12Inch6: return [.secondGeneration, .firstGenerationUsbC]
|
||||
case .iPadPro11M4: return [.secondGeneration, .firstGenerationUsbC, .pro]
|
||||
case .iPadPro13M4: return [.secondGeneration, .firstGenerationUsbC, .pro]
|
||||
case .iPadPro11M5: return [.secondGeneration, .firstGenerationUsbC, .pro]
|
||||
case .iPadPro13M5: return [.secondGeneration, .firstGenerationUsbC, .pro]
|
||||
case .iPadAir11M2: return [.secondGeneration, .pro]
|
||||
case .iPadAir13M2: return [.secondGeneration, .pro]
|
||||
case .iPadAir11M3: return [.secondGeneration, .pro]
|
||||
case .iPadAir13M3: return [.secondGeneration, .pro]
|
||||
case .iPadAir11M4: return [.secondGeneration, .pro]
|
||||
case .iPadAir13M4: return [.secondGeneration, .pro]
|
||||
case .iPadAir11M2: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadAir13M2: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadAir11M3: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadAir13M3: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadAir11M4: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadAir13M4: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadMiniA17Pro: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadPro11M4: return [.firstGenerationUsbC, .pro]
|
||||
case .iPadPro13M4: return [.firstGenerationUsbC, .pro]
|
||||
case .simulator(let model): return model.applePencilSupport
|
||||
default: return []
|
||||
}
|
||||
|
||||
+17
-14
@@ -110,16 +110,16 @@ iPads = [
|
||||
Device("iPad7", "Device is an [iPad (7th generation)](https://support.apple.com/kb/SP807)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP807/sp807-ipad-7th-gen_2x.png", ["iPad7,11", "iPad7,12"], 10.2, (3, 4), "iPad (7th generation)", "iPad (7th generation)", 264, False, False, False, False, True, False, False, False, False, False, 1, False, 1, False, "a10Fusion", False, False),
|
||||
Device("iPad8", "Device is an [iPad (8th generation)](https://support.apple.com/kb/SP822)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP822/sp822-ipad-8gen_2x.png", ["iPad11,6", "iPad11,7"], 10.2, (3, 4), "iPad (8th generation)", "iPad (8th generation)", 264, False, False, False, False, True, False, False, False, False, False, 1, False, 1, False, "a12Bionic", False, False),
|
||||
Device("iPad9", "Device is an [iPad (9th generation)](https://support.apple.com/kb/SP849)", "https://km.support.apple.com/resources/sites/APPLE/content/live/IMAGES/1000/IM1096/en_US/ipad-9gen-240.png", ["iPad12,1", "iPad12,2"], 10.2, (3, 4), "iPad (9th generation)", "iPad (9th generation)", 264, False, False, False, False, True, False, False, False, False, False, 1, False, 1, False, "a13Bionic", False, False),
|
||||
Device("iPad10", "Device is an [iPad (10th generation)](https://support.apple.com/kb/SP884)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP884/sp884-ipad-10gen-960_2x.png", ["iPad13,18", "iPad13,19"], 10.9, (41, 59), "iPad (10th generation)", "iPad (10th generation)", 264, False, False, False, False, True, False, False, False, True, False, 3, False, 1, False, "a14Bionic", True, True),
|
||||
Device("iPadA16", "Device is an [iPad (A16)]()", "", ["iPad15,7", "iPad15,8"], 10.9, (41, 59), "iPad (A16)", "iPad (A16)", 264, False, False, False, False, True, False, False, False, True, False, 3, False, 1, False, "a16Bionic", True, True),
|
||||
Device("iPad10", "Device is an [iPad (10th generation)](https://support.apple.com/kb/SP884)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP884/sp884-ipad-10gen-960_2x.png", ["iPad13,18", "iPad13,19"], 10.9, (41, 59), "iPad (10th generation)", "iPad (10th generation)", 264, False, False, False, False, True, False, False, False, True, False, 13, False, 1, False, "a14Bionic", True, True),
|
||||
Device("iPadA16", "Device is an [iPad (A16)]()", "", ["iPad15,7", "iPad15,8"], 10.9, (41, 59), "iPad (A16)", "iPad (A16)", 264, False, False, False, False, True, False, False, False, True, False, 13, False, 1, False, "a16Bionic", True, True),
|
||||
Device("iPadAir4", "Device is an [iPad Air (4th generation)](https://support.apple.com/kb/SP828)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP828/sp828ipad-air-ipados14-960_2x.png", ["iPad13,1", "iPad13,2"], 10.9, (41, 59), "iPad Air (4th generation)", "iPad Air (4th generation)", 264, False, False, False, False, True, False, False, False, True, False, 23, False, 1, False, "a14Bionic", True, False),
|
||||
Device("iPadAir5", "Device is an [iPad Air (5th generation)](https://support.apple.com/kb/SP866)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP866/sp866-ipad-air-5gen_2x.png", ["iPad13,16", "iPad13,17"], 10.9, (41, 59), "iPad Air (5th generation)", "iPad Air (5th generation)", 264, False, False, False, False, True, False, False, False, True, False, 23, False, 1, False, "m1", True, True),
|
||||
Device("iPadAir11M2", "Device is an [iPad Air 11-inch (M2)](https://support.apple.com/en-us/119894)", "https://cdsassets.apple.com/content/services/pub/image?productid=301027&size=240x240", ["iPad14,8", "iPad14,9"], 10.9, (59, 41), "iPad Air (11-inch) (M2)", "iPad Air (11-inch) (M2)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m2", True, True),
|
||||
Device("iPadAir13M2", "Device is an [iPad Air 13-inch (M2)](https://support.apple.com/en-us/119893)", "https://cdsassets.apple.com/content/services/pub/image?productid=301029&size=240x240", ["iPad14,10", "iPad14,11"], 12.9, (683, 512), "iPad Air (13-inch) (M2)", "iPad Air (13-inch) (M2)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m2", True, True),
|
||||
Device("iPadAir11M3", "Device is an [iPad Air 11-inch (M3)]()", "https://cdsassets.apple.com/content/services/pub/image?productid=301027&size=240x240", ["iPad15,3", "iPad15,4"], 10.9, (59, 41), "iPad Air (11-inch) (M3)", "iPad Air (11-inch) (M3)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m3", True, True),
|
||||
Device("iPadAir13M3", "Device is an [iPad Air 13-inch (M3)]()", "https://cdsassets.apple.com/content/services/pub/image?productid=301029&size=240x240", ["iPad15,5", "iPad15,6"], 12.9, (683, 512), "iPad Air (13-inch) (M3)", "iPad Air (13-inch) (M3)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m3", True, True),
|
||||
Device("iPadAir11M4", "Device is an [iPad Air 11-inch (M4)]()", "", ["iPad16,8", "iPad16,9"], 10.9, (59, 41), "iPad Air (11-inch) (M4)", "iPad Air (11-inch) (M4)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m4", True, True),
|
||||
Device("iPadAir13M4", "Device is an [iPad Air 13-inch (M4)]()", "", ["iPad16,10", "iPad16,11"], 12.9, (683, 512), "iPad Air (13-inch) (M4)", "iPad Air (13-inch) (M4)", 264, False, False, False, False, True, False, False, False, True, False, 24, False, 1, False, "m4", True, True),
|
||||
Device("iPadAir11M2", "Device is an [iPad Air 11-inch (M2)](https://support.apple.com/en-us/119894)", "https://cdsassets.apple.com/content/services/pub/image?productid=301027&size=240x240", ["iPad14,8", "iPad14,9"], 10.9, (59, 41), "iPad Air (11-inch) (M2)", "iPad Air (11-inch) (M2)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m2", True, True),
|
||||
Device("iPadAir13M2", "Device is an [iPad Air 13-inch (M2)](https://support.apple.com/en-us/119893)", "https://cdsassets.apple.com/content/services/pub/image?productid=301029&size=240x240", ["iPad14,10", "iPad14,11"], 12.9, (683, 512), "iPad Air (13-inch) (M2)", "iPad Air (13-inch) (M2)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m2", True, True),
|
||||
Device("iPadAir11M3", "Device is an [iPad Air 11-inch (M3)]()", "https://cdsassets.apple.com/content/services/pub/image?productid=301027&size=240x240", ["iPad15,3", "iPad15,4"], 10.9, (59, 41), "iPad Air (11-inch) (M3)", "iPad Air (11-inch) (M3)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m3", True, True),
|
||||
Device("iPadAir13M3", "Device is an [iPad Air 13-inch (M3)]()", "https://cdsassets.apple.com/content/services/pub/image?productid=301029&size=240x240", ["iPad15,5", "iPad15,6"], 12.9, (683, 512), "iPad Air (13-inch) (M3)", "iPad Air (13-inch) (M3)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m3", True, True),
|
||||
Device("iPadAir11M4", "Device is an [iPad Air 11-inch (M4)]()", "", ["iPad16,8", "iPad16,9"], 10.9, (59, 41), "iPad Air (11-inch) (M4)", "iPad Air (11-inch) (M4)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m4", True, True),
|
||||
Device("iPadAir13M4", "Device is an [iPad Air 13-inch (M4)]()", "", ["iPad16,10", "iPad16,11"], 12.9, (683, 512), "iPad Air (13-inch) (M4)", "iPad Air (13-inch) (M4)", 264, False, False, False, False, True, False, False, False, True, False, 34, False, 1, False, "m4", True, True),
|
||||
Device("iPadMini", "Device is an [iPad Mini](https://support.apple.com/kb/SP661)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP661/sp661_ipad_mini_color.jpg", ["iPad2,5", "iPad2,6", "iPad2,7"], 7.9, (3, 4), "iPad Mini", "iPad Mini", 163, False, True, False, False, False, False, False, False, False, False, 0, False, 1, False, "a5", False, False),
|
||||
Device("iPadMini2", "Device is an [iPad Mini 2](https://support.apple.com/kb/SP693)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP693/SP693-specs_color-mul.png", ["iPad4,4", "iPad4,5", "iPad4,6"], 7.9, (3, 4), "iPad Mini 2", "iPad Mini 2", 326, False, True, False, False, False, False, False, False, False, False, 0, False, 1, False, "a7", False, False),
|
||||
Device("iPadMini3", "Device is an [iPad Mini 3](https://support.apple.com/kb/SP709)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP709/SP709-space_gray.jpeg", ["iPad4,7", "iPad4,8", "iPad4,9"], 7.9, (3, 4), "iPad Mini 3", "iPad Mini 3", 326, False, True, False, False, True, False, False, False, False, False, 0, False, 1, False, "a7", False, False),
|
||||
@@ -139,8 +139,8 @@ iPads = [
|
||||
Device("iPadPro12Inch5", "Device is an [iPad Pro 12.9-inch (5th generation)](https://support.apple.com/kb/SP844)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP844/ipad-pro-12-9_2x.png", ["iPad13,8", "iPad13,9", "iPad13,10", "iPad13,11"], 12.9, (512, 683), "iPad Pro (12.9-inch) (5th generation)", "iPad Pro (12.9-inch) (5th generation)", 264, False, False, True, False, False, True, False, False, True, False, 23, False, 13, True, "m1", True, True),
|
||||
Device("iPadPro11Inch4", "Device is an [iPad Pro 11-inch (4th generation)](https://support.apple.com/kb/SP882)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP882/ipad-pro-4gen-mainimage_2x.png", ["iPad14,3", "iPad14,4"], 11.0, (139, 199), "iPad Pro (11-inch) (4th generation)", "iPad Pro (11-inch) (4th generation)", 264, False, False, True, False, False, True, False, False, True, False, 23, False, 13, True, "m2", True, True),
|
||||
Device("iPadPro12Inch6", "Device is an [iPad Pro 12.9-inch (6th generation)](https://support.apple.com/kb/SP883)", "https://support.apple.com/library/APPLE/APPLECARE_ALLGEOS/SP882/ipad-pro-4gen-mainimage_2x.png", ["iPad14,5", "iPad14,6"], 12.9, (512, 683), "iPad Pro (12.9-inch) (6th generation)", "iPad Pro (12.9-inch) (6th generation)", 264, False, False, True, False, False, True, False, False, True, False, 23, False, 13, True, "m2", True, True),
|
||||
Device("iPadPro11M4", "Device is an [iPad Pro 11-inch (M4)](https://support.apple.com/en-us/119892)", "https://cdsassets.apple.com/content/services/pub/image?productid=301031&size=240x240", ["iPad16,3", "iPad16,4"], 11.0, (605, 417), "iPad Pro (11-inch) (M4)", "iPad Pro (11-inch) (M4)", 264, False, False, True, False, False, True, False, False, True, False, 234, False, 1, True, "m4", True, True),
|
||||
Device("iPadPro13M4", "Device is an [iPad Pro 13-inch (M4)](https://support.apple.com/en-us/119891)", "https://cdsassets.apple.com/content/services/pub/image?productid=301033&size=240x240", ["iPad16,5", "iPad16,6"], 13.0, (4, 3), "iPad Pro (13-inch) (M4)", "iPad Pro (13-inch) (M4)", 264, False, False, True, False, False, True, False, False, True, False, 234, False, 1, True, "m4", True, True),
|
||||
Device("iPadPro11M4", "Device is an [iPad Pro 11-inch (M4)](https://support.apple.com/en-us/119892)", "https://cdsassets.apple.com/content/services/pub/image?productid=301031&size=240x240", ["iPad16,3", "iPad16,4"], 11.0, (605, 417), "iPad Pro (11-inch) (M4)", "iPad Pro (11-inch) (M4)", 264, False, False, True, False, False, True, False, False, True, False, 34, False, 1, True, "m4", True, True),
|
||||
Device("iPadPro13M4", "Device is an [iPad Pro 13-inch (M4)](https://support.apple.com/en-us/119891)", "https://cdsassets.apple.com/content/services/pub/image?productid=301033&size=240x240", ["iPad16,5", "iPad16,6"], 13.0, (4, 3), "iPad Pro (13-inch) (M4)", "iPad Pro (13-inch) (M4)", 264, False, False, True, False, False, True, False, False, True, False, 34, False, 1, True, "m4", True, True),
|
||||
Device("iPadPro11M5", "Device is an [iPad Pro 11-inch (M5)](https://support.apple.com/en-us/125406)", "", ["iPad17,3", "iPad17,4"], 11.0, (605, 417), "iPad Pro (11-inch) (M5)", "iPad Pro (11-inch) (M5)", 264, False, False, True, False, False, True, False, False, True, False, 234, False, 1, True, "m5", True, True),
|
||||
Device("iPadPro13M5", "Device is an [iPad Pro 13-inch (M5)](https://support.apple.com/en-us/125406)", "", ["iPad17,5", "iPad17,6"], 13.0, (4, 3), "iPad Pro (13-inch) (M5)", "iPad Pro (13-inch) (M5)", 264, False, False, True, False, False, True, False, False, True, False, 234, False, 1, True, "m5", True, True),
|
||||
]
|
||||
@@ -458,7 +458,7 @@ public enum Device {
|
||||
/// - parameter identifier: The device identifier, e.g. "iPhone7,1". Can be obtained from `Device.identifier`.
|
||||
///
|
||||
/// - returns: An initialized `Device`.
|
||||
public static func mapToDevice(identifier: String) -> Device { // swiftlint:disable:this cyclomatic_complexity function_body_length
|
||||
public static func mapToDevice(identifier: String) -> Device {
|
||||
#if os(iOS)
|
||||
switch identifier {
|
||||
% for device in iOSDevices:
|
||||
@@ -1285,7 +1285,7 @@ extension Device {
|
||||
|
||||
/// The volume’s available capacity in bytes for storing nonessential resources.
|
||||
@available(iOS 11.0, *)
|
||||
public static var volumeAvailableCapacityForOpportunisticUsage: Int64? { //swiftlint:disable:this identifier_name
|
||||
public static var volumeAvailableCapacityForOpportunisticUsage: Int64? { // swiftlint:disable:this identifier_name
|
||||
return (try? rootURL.resourceValues(forKeys: [.volumeAvailableCapacityForOpportunisticUsageKey]))?.volumeAvailableCapacityForOpportunisticUsage
|
||||
}
|
||||
|
||||
@@ -1335,8 +1335,8 @@ extension Device {
|
||||
|
||||
public static let firstGeneration = ApplePencilSupport(rawValue: 0x01)
|
||||
public static let secondGeneration = ApplePencilSupport(rawValue: 0x02)
|
||||
public static let firstGenerationUsbC = ApplePencilSupport(rawValue: 0x03)
|
||||
public static let pro = ApplePencilSupport(rawValue: 0x04)
|
||||
public static let firstGenerationUsbC = ApplePencilSupport(rawValue: 0x04)
|
||||
public static let pro = ApplePencilSupport(rawValue: 0x08)
|
||||
}
|
||||
|
||||
/// All Apple Pencil Capable Devices
|
||||
@@ -1359,6 +1359,9 @@ extension Device {
|
||||
% for device in list(filter(lambda device: device.applePencilSupport == 4, iOSDevices)):
|
||||
case .${device.caseName}: return [.pro]
|
||||
% end
|
||||
% for device in list(filter(lambda device: device.applePencilSupport == 13, iOSDevices)):
|
||||
case .${device.caseName}: return [.firstGeneration, .firstGenerationUsbC]
|
||||
% end
|
||||
% for device in list(filter(lambda device: device.applePencilSupport == 23, iOSDevices)):
|
||||
case .${device.caseName}: return [.secondGeneration, .firstGenerationUsbC]
|
||||
% end
|
||||
|
||||
+63
-14
@@ -1,4 +1,4 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ===----------------------------------------------------------------------=== //
|
||||
//
|
||||
// This source file is part of the DeviceKit open source project
|
||||
//
|
||||
@@ -7,7 +7,7 @@
|
||||
// License: https://github.com/dennisweissmann/DeviceKit/blob/master/LICENSE
|
||||
// Contributors: https://github.com/dennisweissmann/DeviceKit#contributors
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ===----------------------------------------------------------------------=== //
|
||||
|
||||
@testable import DeviceKit
|
||||
import XCTest
|
||||
@@ -165,7 +165,7 @@ class DeviceKitTests: XCTestCase {
|
||||
XCTAssertTrue(Device.BatteryState.unplugged(2) > Device.BatteryState.charging(1))
|
||||
}
|
||||
|
||||
func testMapFromIdentifier() { // swiftlint:disable:this function_body_length
|
||||
func testMapFromIdentifier() {
|
||||
XCTAssertEqual(Device.mapToDevice(identifier: "iPod5,1"), .iPodTouch5)
|
||||
XCTAssertEqual(Device.mapToDevice(identifier: "iPod7,1"), .iPodTouch6)
|
||||
XCTAssertEqual(Device.mapToDevice(identifier: "iPhone3,1"), .iPhone4)
|
||||
@@ -339,7 +339,7 @@ class DeviceKitTests: XCTestCase {
|
||||
XCTAssertEqual(Device.unknown(UUID().uuidString).diagonal, -1)
|
||||
}
|
||||
|
||||
func testDescription() { // swiftlint:disable:this function_body_length
|
||||
func testDescription() {
|
||||
XCTAssertEqual(Device.iPodTouch5.description, "iPod touch (5th generation)")
|
||||
XCTAssertEqual(Device.iPodTouch6.description, "iPod touch (6th generation)")
|
||||
XCTAssertEqual(Device.iPodTouch7.description, "iPod touch (7th generation)")
|
||||
@@ -637,16 +637,15 @@ class DeviceKitTests: XCTestCase {
|
||||
XCTAssertTrue(device.hasCamera)
|
||||
XCTAssertTrue(device.hasWideCamera || device.hasTelephotoCamera || device.hasUltraWideCamera)
|
||||
}
|
||||
for device in Device.allPhones + Device.allPads + Device.allPods {
|
||||
if !Device.allDevicesWithCamera.contains(device) {
|
||||
XCTAssertFalse(device.cameras.contains(.wide))
|
||||
XCTAssertFalse(device.cameras.contains(.telephoto))
|
||||
XCTAssertFalse(device.cameras.contains(.ultraWide))
|
||||
XCTAssertFalse(device.hasCamera)
|
||||
XCTAssertFalse(device.hasWideCamera)
|
||||
XCTAssertFalse(device.hasTelephotoCamera)
|
||||
XCTAssertFalse(device.hasUltraWideCamera)
|
||||
}
|
||||
let devices = Device.allPhones + Device.allPads + Device.allPods
|
||||
for device in devices where !Device.allDevicesWithCamera.contains(device) {
|
||||
XCTAssertFalse(device.cameras.contains(.wide))
|
||||
XCTAssertFalse(device.cameras.contains(.telephoto))
|
||||
XCTAssertFalse(device.cameras.contains(.ultraWide))
|
||||
XCTAssertFalse(device.hasCamera)
|
||||
XCTAssertFalse(device.hasWideCamera)
|
||||
XCTAssertFalse(device.hasTelephotoCamera)
|
||||
XCTAssertFalse(device.hasUltraWideCamera)
|
||||
}
|
||||
for device in Device.allDevicesWithWideCamera {
|
||||
XCTAssertTrue(device.cameras.contains(.wide))
|
||||
@@ -741,6 +740,56 @@ class DeviceKitTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
func testApplePencilSupport() {
|
||||
// Test iPad (10th gen) - Supports Apple Pencil (1st gen) and Apple Pencil (USB-C)
|
||||
XCTAssertTrue(Device.iPad10.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPad10.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPad10.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertFalse(Device.iPad10.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad (A16) - Supports Apple Pencil (1st gen) and Apple Pencil (USB-C)
|
||||
XCTAssertTrue(Device.iPadA16.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadA16.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadA16.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertFalse(Device.iPadA16.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Air 11" (M2) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadAir11M2.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadAir11M2.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadAir11M2.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadAir11M2.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Air 13" (M2) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadAir13M2.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadAir13M2.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadAir13M2.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadAir13M2.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Air 11" (M3) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadAir11M3.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadAir11M3.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadAir11M3.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadAir11M3.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Air 13" (M3) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadAir13M3.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadAir13M3.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadAir13M3.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadAir13M3.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Pro 11" (M4) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadPro11M4.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadPro11M4.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadPro11M4.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadPro11M4.applePencilSupport.contains(.pro))
|
||||
|
||||
// Test iPad Pro 13" (M4) - Supports Apple Pencil Pro and Apple Pencil (USB-C)
|
||||
XCTAssertFalse(Device.iPadPro13M4.applePencilSupport.contains(.firstGeneration))
|
||||
XCTAssertTrue(Device.iPadPro13M4.applePencilSupport.contains(.firstGenerationUsbC))
|
||||
XCTAssertFalse(Device.iPadPro13M4.applePencilSupport.contains(.secondGeneration))
|
||||
XCTAssertTrue(Device.iPadPro13M4.applePencilSupport.contains(.pro))
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// MARK: - tvOS
|
||||
|
||||
Reference in New Issue
Block a user