Skip to content

Releases: voyager-software/DeviceLookup

Mac.Family

Choose a tag to compare

@gabors gabors released this 31 Oct 04:24

Breaking change:

  • Mac.Kind is renamed Mac.Family, and Mac.kind is renamed Mac.family, matching Device.Family one level down: device.family is .mac, and device.mac?.family is .macBookPro. The cases and name are unchanged.

Documentation:

  • The README and DocC are checked against the current API: a Mac example name that's in the data, the source of the Mac data, a Device Families topic, and Mac.all and Mac.Family in the Macs topic.
  • The migration guide is precise about which runtime state needs the main actor.

Mac data from Apple's pages

Choose a tag to compare

@gabors gabors released this 31 Oct 04:07
  • Mac minis Macmini5,1, Macmini5,2 (Mid 2011) and Macmini6,1, Macmini6,2 (Late 2012) now resolve. They were stored as two identifiers run together.
  • iMac Pro is named "iMac Pro (2017)", as Apple names it.
  • The Mac data is generated from Apple's "Identify your Mac model" pages by Scripts/update-macs.py, and the weekly update workflow now checks for new Macs as well as new devices.
  • The bundled Mac data is renamed macs.json, matching devices.json. Nothing in the API changes.

Documentation

Choose a tag to compare

@gabors gabors released this 31 Oct 02:03

Documentation only; no code or data changes.

  • The DeviceKit migration guide shows how to check for specific models with a set of identifiers instead of enum cases.
  • The overview leads with Device being Sendable: it never touches UIDevice, so it works from any thread or actor.
  • Device.mac notes that an identifier Apple reused across models, such as MacBookPro15,1 for the 2018 and 2019 15-inch MacBook Pro, gives the newest of them.

API cleanup

Choose a tag to compare

@gabors gabors released this 31 Oct 01:19

Breaking changes:

  • The running-system details are static, since they describe the device the code runs on, not a looked-up Device: Device.operatingSystemName, operatingSystemVersion, operatingSystemVersionString, physicalMemory, processorCount, systemUptime and the volume…Capacity properties. Replace Device.current.physicalMemory with Device.physicalMemory.
  • Mac.find(model:) is no longer public. Use Device(modelIdentifier:).mac.
  • Mac.models is renamed Mac.modelIdentifiers, matching Device.modelIdentifier.

Fixes:

  • Device.mac returns nil for a device that isn't a Mac without decoding the Mac data.
  • A Mac kind newer than Mac.Kind decodes as .unknown instead of leaving Mac.all empty.

2026 Mac Studios

Choose a tag to compare

@gabors gabors released this 30 Oct 09:37
  • Mac Studio (M5 Max, 2026) (Mac17,14) and Mac Studio (M5 Ultra, 2026) (Mac17,15).

Apple TV 4K (4th generation)

Choose a tag to compare

@gabors gabors released this 30 Oct 08:42
98b575b
  • Apple TV 4K (4th generation) (AppleTV18,1), A19, from Xcode 27.2.
  • Documentation: an overview page and a Migrating from DeviceKit article, for the Swift Package Index documentation.
  • An Update devices workflow checks the newest Xcode on GitHub's runners every Monday and opens a pull request when it lists devices that aren't in the data yet. It found this Apple TV on its first run.
  • The README has a Maintenance section.

iPhone Duo

Choose a tag to compare

@gabors gabors released this 30 Oct 08:22
  • iPhone Duo (iPhone19,4) has its chip, A20 Pro, and screen diagonal, 7.6 inches. For a foldable, diagonal is the inner display's. Every device in the data now has a chip and a diagonal.

macOS virtual machines

Choose a tag to compare

@gabors gabors released this 30 Oct 08:16
  • A macOS virtual machine, such as a GitHub Actions runner, reports the model "VirtualMac2,1". It now has the .mac family, so isMac is true. It isn't a Mac model, so isKnown is false and modelName is the identifier.
  • CI builds the library with Xcode 16.0 and runs the tests on macOS, iOS, tvOS and Mac Catalyst, building them for watchOS.
  • .spi.yml for Swift Package Index documentation hosting.

MIT license, lower minimums

Choose a tag to compare

@gabors gabors released this 30 Oct 08:05
  • MIT licensed. LICENSE also carries DeviceKit's MIT notice, since the chip and screen-size values were first imported from it.
  • Minimum deployment targets lowered to iOS 15, tvOS 15, watchOS 9, macOS 12 and Mac Catalyst 15 (from iOS 17, tvOS 17, watchOS 10, macOS 14), the lowest Xcode 27 builds for.
  • swift-tools-version lowered from 6.3 to 6.0. The package still builds in Swift 6 language mode.

Decode only the data a device needs

Choose a tag to compare

@gabors gabors released this 29 Oct 05:16
  • Device looks a Mac identifier up only in the Mac data, and an iPhone, iPad, iPod touch, Apple TV or Apple Watch identifier only in the device data. A Mac no longer decodes devices.json, and an iPhone too new for the data no longer decodes all-macs.json. Identifiers whose family can't be told from the prefix still check both.