Repository navigation
Releases: voyager-software/DeviceLookup
Releases · voyager-software/DeviceLookup
Release list
Mac.Family
Breaking change:
Mac.Kindis renamedMac.Family, andMac.kindis renamedMac.family, matchingDevice.Familyone level down:device.familyis.mac, anddevice.mac?.familyis.macBookPro. The cases andnameare 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.allandMac.Familyin the Macs topic. - The migration guide is precise about which runtime state needs the main actor.
Mac data from Apple's pages
- Mac minis
Macmini5,1,Macmini5,2(Mid 2011) andMacmini6,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, matchingdevices.json. Nothing in the API changes.
Documentation
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
DevicebeingSendable: it never touchesUIDevice, so it works from any thread or actor. Device.macnotes that an identifier Apple reused across models, such asMacBookPro15,1for the 2018 and 2019 15-inch MacBook Pro, gives the newest of them.
API cleanup
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,systemUptimeand thevolume…Capacityproperties. ReplaceDevice.current.physicalMemorywithDevice.physicalMemory. Mac.find(model:)is no longer public. UseDevice(modelIdentifier:).mac.Mac.modelsis renamedMac.modelIdentifiers, matchingDevice.modelIdentifier.
Fixes:
Device.macreturnsnilfor a device that isn't a Mac without decoding the Mac data.- A Mac kind newer than
Mac.Kinddecodes as.unknowninstead of leavingMac.allempty.
2026 Mac Studios
- Mac Studio (M5 Max, 2026) (
Mac17,14) and Mac Studio (M5 Ultra, 2026) (Mac17,15).
Apple TV 4K (4th generation)
- 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
- iPhone Duo (
iPhone19,4) has its chip, A20 Pro, and screen diagonal, 7.6 inches. For a foldable,diagonalis the inner display's. Every device in the data now has a chip and a diagonal.
macOS virtual machines
- A macOS virtual machine, such as a GitHub Actions runner, reports the model "VirtualMac2,1". It now has the
.macfamily, soisMacis true. It isn't a Mac model, soisKnownis false andmodelNameis 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.ymlfor Swift Package Index documentation hosting.
MIT license, lower minimums
- 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
Devicelooks 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 decodesdevices.json, and an iPhone too new for the data no longer decodesall-macs.json. Identifiers whose family can't be told from the prefix still check both.