Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ disabled_rules:
- switch_case_alignment
- type_body_length
- identifier_name
- trailing_comma
- function_body_length

opt_in_rules:
- anyobject_protocol
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
### 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))

## Version 5.7.0

Expand Down
5 changes: 3 additions & 2 deletions Example/DeviceKitPlayground.playground/Contents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// swift-tools-version:5.3
//===----------------------------------------------------------------------===//
// ===----------------------------------------------------------------------=== //
//
// This source file is part of the DeviceKit open source project
//
Expand All @@ -8,7 +8,7 @@
// License: https://github.com/dennisweissmann/DeviceKit/blob/master/LICENSE
// Contributors: https://github.com/dennisweissmann/DeviceKit#contributors
//
//===----------------------------------------------------------------------===//
// ===----------------------------------------------------------------------=== //

import PackageDescription

Expand Down
20 changes: 10 additions & 10 deletions Source/Device.generated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,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 {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Function should have complexity 10 or less: currently complexity equals 137
cyclomatic_complexity Device.generated.swift:614

#if os(iOS)
switch identifier {
case "iPod5,1": return iPodTouch5
Expand Down Expand Up @@ -2167,7 +2167,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
}

Expand Down Expand Up @@ -2239,8 +2239,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]
Expand All @@ -2252,15 +2252,15 @@ 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 .iPadAir11M2: return [.firstGenerationUsbC, .pro]
case .iPadAir13M2: return [.firstGenerationUsbC, .pro]
case .iPadAir11M3: return [.firstGenerationUsbC, .pro]
case .iPadAir13M3: 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 []
}
Expand Down
23 changes: 13 additions & 10 deletions Source/Device.swift.gyb
Original file line number Diff line number Diff line change
Expand Up @@ -109,14 +109,14 @@ 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("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("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),
Expand All @@ -136,8 +136,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),
]
Expand Down Expand Up @@ -455,7 +455,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:
Expand Down Expand Up @@ -1282,7 +1282,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
}

Expand Down Expand Up @@ -1356,6 +1356,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
Expand Down
Loading
Loading