Swift package that contains all devices from https://www.theiphonewiki.com/wiki/Models. A common use case is wanting to convert device identifiers (also known as machine identifiers) such as iPhone10,1 to a user friendly name; iPhone 8.
- All Apple Devices
- 🎧 AirPods
- ⚪️ AirTags
- 📺 AppleTVs
- SiriRemotes
- ⌚️ Apple Watches
- 🏠 HomePods
- 🔲 iPads
- ✏️ Apple Pencils
- ⌨️ Smart Keyboard
- 📱 iPhones
- 📱 iPod Touches
- 💻 Macs
- 📝 Provides device information on:
- Generation - iPhone XR
- Bootroom - Bootrom 3865.0.0.4.7
- Internal Name - N841AP
- Identifier - iPhone11,8
- Storage - 64 GB
- Color/Finish - Black
- Model - MRY42
- more!
- 🕒 Checks for new devices every day.
- 🔌 No networking, runs offline.
Each device has an all
property. Use this to find, filter, map etc. The following are some examples.
let identifier = "iPad3,6"
let iPhone = iPhone.all.first { $0.identifier == identifier }
iPhone.generation // iPad (4th generation)
let identifier = "iPad3,6"
let iPhone = DeviceList().all[identifer]
iPhone.generation // iPad (4th generation)
let colors = iPadAir.all.filter {
$0.generation == "iPad Air 2" &&
$0.storage == "64 GB"
}.map { $0.finish }
Set(colors).sorted() // ["Gold", "Silver", "Space Gray"]
let identifiers = AppleWatch.all.map { $0.identifier }
Set(identifiers).sorted() // ["Watch1,1", "Watch1,2", "Watch2,3", ...]
let iPad = iPadMini.all.first {
$0.identifier == "iPad4,5" &&
$0.finish == "Silver" &&
$0.storage == "16 GB"
}!
iPad.model.components(separatedBy: ", ") // ["ME814", "ME818", "MF074", "MF075", "MF076", "MF544"]
See FAQ for why Set
is used in some examples.
Add the following to your project:
https://github.com/ptrkstr/Devices
You can see them by going to Types.
That's because a lot of device models are released slightly differently depending on the region i.e. in China, iPhones can come with two sim card slots as opposed to western regions which either include 1 slot [and an esim]. Those different devices tend to have a different "A" number, FCC ID, Identifier and Model. If you're performing searches for Finish/Color or Storage, you may want to remove duplicates.
The data may not (yet) be available.
The model field sometimes contains multiple model names. These can be split with .model.components(separatedBy: ", ")
The identifier field sometimes contains multiple identifiers. These can be split with .identifier.components(separatedBy: "\n")
A check is run every day to see if this list of devices has changed. If so, a pull request is raised and I'll be notified to review it. You can expect a delay of a few days at the very most.