Skip to content

Follow one naming convention for all devices (breaking, 0.5.0) - #27

Merged
rikas merged 1 commit into
masterfrom
naming-cleanup
Oct 20, 2026
Merged

rikas merged 1 commit into
masterfrom
naming-cleanup

Conversation

@rikas

@rikas rikas commented Oct 20, 2026

Copy link
Copy Markdown
Owner

Breaking change, for 0.5.0. Moves every device to one naming convention based on Apple's official product names, and adds specs that enforce it.

Convention

  • name is Apple's official name without the bracketed part: "iPad mini (6th generation)" → iPad mini; "Apple Watch Series 5" stays Apple Watch Series 5. Numbers that are part of the name stay (iPad mini 4, iPad Air 2, Apple Watch SE 3).
  • extra is a comma-separated list, in order: generation or chip (6th gen, M4, A17 Pro), size (44mm), connectivity (Wi-Fi, Wi-Fi+Cellular, GPS, GPS+Cellular), variant (GSM, CDMA, China, Rev A, 1TB).

This is documented in a new "Naming" section of the README.

What changes (133 of 239 entries)

  • Apple Watch: series, SE and Ultra move into name (Apple Watch Series 5 / 44mm, GPS+Cellular). Callers grouping by name == 'Apple Watch' need updating.
  • Generations and chips move to extra: iPad mini 5/6/7, iPad Air 3/4, the 7th-gen iPad (was iPad 10.2"), and the A16 iPad.
  • Cellular iPads: Wi-Fi+Cellular instead of Wi-Fi+LTE (wrong for 5G models) or 3G.
  • Filled in: connectivity plus GSM/CDMA for early cellular iPads and iPad minis, China for iPad4,3, iPad4,6 and iPad4,9 (which said Rev or nothing), 1st gen for the first 11" and 12.9" iPad Pros, and 1TB for the 1TB iPad Pros.
  • Wording: mini instead of Mini, gen instead of Gen, Rev A.
Full old → new table
iPhone3,2   "iPhone 4", "GSM Rev A"                          -> "iPhone 4", "GSM, Rev A"
iPhone13,1  "iPhone 12 Mini"                                 -> "iPhone 12 mini"
iPhone14,4  "iPhone 13 Mini"                                 -> "iPhone 13 mini"
iPad1,1     "iPad"                                           -> "iPad", "Wi-Fi"
iPad1,2     "iPad", "3G"                                     -> "iPad", "Wi-Fi+Cellular"
iPad2,2     "iPad 2", "GSM"                                  -> "iPad 2", "Wi-Fi+Cellular, GSM"
iPad2,3     "iPad 2", "CDMA"                                 -> "iPad 2", "Wi-Fi+Cellular, CDMA"
iPad2,4     "iPad 2", "Wi-Fi, revised"                       -> "iPad 2", "Wi-Fi, Rev A"
iPad2,6     "iPad mini"                                      -> "iPad mini", "Wi-Fi+Cellular, GSM"
iPad2,7     "iPad mini"                                      -> "iPad mini", "Wi-Fi+Cellular, CDMA"
iPad3,2     "iPad", "3rd gen, Wi-Fi+LTE Verizon"             -> "iPad", "3rd gen, Wi-Fi+Cellular, CDMA"
iPad3,3     "iPad", "3rd gen, Wi-Fi+LTE AT&T"                -> "iPad", "3rd gen, Wi-Fi+Cellular, GSM"
iPad3,5     "iPad", "4th gen"                                -> "iPad", "4th gen, Wi-Fi+Cellular, GSM"
iPad3,6     "iPad", "4th gen"                                -> "iPad", "4th gen, Wi-Fi+Cellular, CDMA"
iPad4,2     "iPad Air", "Wi-Fi+LTE"                          -> "iPad Air", "Wi-Fi+Cellular"
iPad4,3     "iPad Air", "Rev"                                -> "iPad Air", "Wi-Fi+Cellular, China"
iPad4,5     "iPad mini 2", "Wi-Fi+LTE"                       -> "iPad mini 2", "Wi-Fi+Cellular"
iPad4,6     "iPad mini 2", "Rev"                             -> "iPad mini 2", "Wi-Fi+Cellular, China"
iPad4,8     "iPad mini 3"                                    -> "iPad mini 3", "Wi-Fi+Cellular"
iPad4,9     "iPad mini 3"                                    -> "iPad mini 3", "Wi-Fi+Cellular, China"
iPad5,2     "iPad mini 4", "Wi-Fi+LTE"                       -> "iPad mini 4", "Wi-Fi+Cellular"
iPad5,4     "iPad Air 2", "Wi-Fi+LTE"                        -> "iPad Air 2", "Wi-Fi+Cellular"
iPad6,4     "iPad Pro 9.7\"", "Wi-Fi+LTE"                    -> "iPad Pro 9.7\"", "Wi-Fi+Cellular"
iPad6,7     "iPad Pro 12.9\"", "Wi-Fi"                       -> "iPad Pro 12.9\"", "1st gen, Wi-Fi"
iPad6,8     "iPad Pro 12.9\"", "Wi-Fi+LTE"                   -> "iPad Pro 12.9\"", "1st gen, Wi-Fi+Cellular"
iPad6,12    "iPad", "5th gen, Wi-Fi+LTE"                     -> "iPad", "5th gen, Wi-Fi+Cellular"
iPad7,2     "iPad Pro 12.9\"", "2nd gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "2nd gen, Wi-Fi+Cellular"
iPad7,4     "iPad Pro 10.5\"", "Wi-Fi+LTE"                   -> "iPad Pro 10.5\"", "Wi-Fi+Cellular"
iPad7,6     "iPad", "6th gen, Wi-Fi+LTE"                     -> "iPad", "6th gen, Wi-Fi+Cellular"
iPad7,11    "iPad 10.2\"", "7th gen, Wi-Fi"                  -> "iPad", "7th gen, Wi-Fi"
iPad7,12    "iPad 10.2\"", "7th gen, Wi-Fi+LTE"              -> "iPad", "7th gen, Wi-Fi+Cellular"
iPad8,1     "iPad Pro 11\"", "Wi-Fi"                         -> "iPad Pro 11\"", "1st gen, Wi-Fi"
iPad8,2     "iPad Pro 11\"", "Wi-Fi"                         -> "iPad Pro 11\"", "1st gen, Wi-Fi, 1TB"
iPad8,3     "iPad Pro 11\"", "Wi-Fi+LTE"                     -> "iPad Pro 11\"", "1st gen, Wi-Fi+Cellular"
iPad8,4     "iPad Pro 11\"", "Wi-Fi+LTE"                     -> "iPad Pro 11\"", "1st gen, Wi-Fi+Cellular, 1TB"
iPad8,6     "iPad Pro 12.9\"", "3rd gen, Wi-Fi"              -> "iPad Pro 12.9\"", "3rd gen, Wi-Fi, 1TB"
iPad8,7     "iPad Pro 12.9\"", "3rd gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "3rd gen, Wi-Fi+Cellular"
iPad8,8     "iPad Pro 12.9\"", "3rd gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "3rd gen, Wi-Fi+Cellular, 1TB"
iPad8,10    "iPad Pro 11\"", "2nd gen, Wi-Fi+LTE"            -> "iPad Pro 11\"", "2nd gen, Wi-Fi+Cellular"
iPad8,12    "iPad Pro 12.9\"", "4th gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "4th gen, Wi-Fi+Cellular"
iPad11,1    "iPad mini 5", "Wi-Fi"                           -> "iPad mini", "5th gen, Wi-Fi"
iPad11,2    "iPad mini 5", "Wi-Fi+LTE"                       -> "iPad mini", "5th gen, Wi-Fi+Cellular"
iPad11,3    "iPad Air 3", "Wi-Fi"                            -> "iPad Air", "3rd gen, Wi-Fi"
iPad11,4    "iPad Air 3", "Wi-Fi+LTE"                        -> "iPad Air", "3rd gen, Wi-Fi+Cellular"
iPad11,7    "iPad", "8th gen, Wi-Fi+LTE"                     -> "iPad", "8th gen, Wi-Fi+Cellular"
iPad12,2    "iPad", "9th gen, Wi-Fi+LTE"                     -> "iPad", "9th gen, Wi-Fi+Cellular"
iPad13,1    "iPad Air 4", "Wi-Fi"                            -> "iPad Air", "4th gen, Wi-Fi"
iPad13,2    "iPad Air 4", "Wi-Fi+LTE"                        -> "iPad Air", "4th gen, Wi-Fi+Cellular"
iPad13,5    "iPad Pro 11\"", "3rd gen, Wi-Fi+LTE"            -> "iPad Pro 11\"", "3rd gen, Wi-Fi+Cellular"
iPad13,6    "iPad Pro 11\"", "3rd gen, Wi-Fi+LTE"            -> "iPad Pro 11\"", "3rd gen, Wi-Fi+Cellular"
iPad13,7    "iPad Pro 11\"", "3rd gen, Wi-Fi+LTE"            -> "iPad Pro 11\"", "3rd gen, Wi-Fi+Cellular"
iPad13,9    "iPad Pro 12.9\"", "5th gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "5th gen, Wi-Fi+Cellular"
iPad13,10   "iPad Pro 12.9\"", "5th gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "5th gen, Wi-Fi+Cellular"
iPad13,11   "iPad Pro 12.9\"", "5th gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "5th gen, Wi-Fi+Cellular"
iPad13,17   "iPad Air", "5th gen, Wi-Fi+LTE"                 -> "iPad Air", "5th gen, Wi-Fi+Cellular"
iPad13,19   "iPad", "10th gen, Wi-Fi+LTE"                    -> "iPad", "10th gen, Wi-Fi+Cellular"
iPad14,1    "iPad mini 6", "Wi-Fi"                           -> "iPad mini", "6th gen, Wi-Fi"
iPad14,2    "iPad mini 6", "Wi-Fi+LTE"                       -> "iPad mini", "6th gen, Wi-Fi+Cellular"
iPad14,3    "iPad Pro 11\"", "4th Gen, Wi-Fi"                -> "iPad Pro 11\"", "4th gen, Wi-Fi"
iPad14,4    "iPad Pro 11\"", "4th Gen, Wi-Fi+LTE"            -> "iPad Pro 11\"", "4th gen, Wi-Fi+Cellular"
iPad14,5    "iPad Pro 12.9\"", "6th Gen, Wi-Fi"              -> "iPad Pro 12.9\"", "6th gen, Wi-Fi"
iPad14,6    "iPad Pro 12.9\"", "6th Gen, Wi-Fi+LTE"          -> "iPad Pro 12.9\"", "6th gen, Wi-Fi+Cellular"
iPad14,9    "iPad Air 11\"", "M2, Wi-Fi+LTE"                 -> "iPad Air 11\"", "M2, Wi-Fi+Cellular"
iPad14,11   "iPad Air 13\"", "M2, Wi-Fi+LTE"                 -> "iPad Air 13\"", "M2, Wi-Fi+Cellular"
iPad15,4    "iPad Air 11\"", "M3, Wi-Fi+LTE"                 -> "iPad Air 11\"", "M3, Wi-Fi+Cellular"
iPad15,6    "iPad Air 13\"", "M3, Wi-Fi+LTE"                 -> "iPad Air 13\"", "M3, Wi-Fi+Cellular"
iPad15,7    "iPad", "11th gen, Wi-Fi"                        -> "iPad", "A16, Wi-Fi"
iPad15,8    "iPad", "11th gen, Wi-Fi+LTE"                    -> "iPad", "A16, Wi-Fi+Cellular"
iPad16,1    "iPad mini 7", "Wi-Fi"                           -> "iPad mini", "A17 Pro, Wi-Fi"
iPad16,2    "iPad mini 7", "Wi-Fi+LTE"                       -> "iPad mini", "A17 Pro, Wi-Fi+Cellular"
iPad16,4    "iPad Pro 11\"", "M4, Wi-Fi+LTE"                 -> "iPad Pro 11\"", "M4, Wi-Fi+Cellular"
iPad16,6    "iPad Pro 13\"", "M4, Wi-Fi+LTE"                 -> "iPad Pro 13\"", "M4, Wi-Fi+Cellular"
iPad16,9    "iPad Air 11\"", "M4, Wi-Fi+LTE"                 -> "iPad Air 11\"", "M4, Wi-Fi+Cellular"
iPad16,11   "iPad Air 13\"", "M4, Wi-Fi+LTE"                 -> "iPad Air 13\"", "M4, Wi-Fi+Cellular"
iPad17,2    "iPad Pro 11\"", "M5, Wi-Fi+LTE"                 -> "iPad Pro 11\"", "M5, Wi-Fi+Cellular"
iPad17,4    "iPad Pro 13\"", "M5, Wi-Fi+LTE"                 -> "iPad Pro 13\"", "M5, Wi-Fi+Cellular"
Watch1,1    "Apple Watch", "38mm"                            -> "Apple Watch", "1st gen, 38mm"
Watch1,2    "Apple Watch", "42mm"                            -> "Apple Watch", "1st gen, 42mm"
Watch2,6    "Apple Watch", "Series 1, 38mm"                  -> "Apple Watch Series 1", "38mm"
Watch2,7    "Apple Watch", "Series 1, 42mm"                  -> "Apple Watch Series 1", "42mm"
Watch2,3    "Apple Watch", "Series 2, 38mm"                  -> "Apple Watch Series 2", "38mm"
Watch2,4    "Apple Watch", "Series 2, 42mm"                  -> "Apple Watch Series 2", "42mm"
Watch3,1    "Apple Watch", "Series 3, 38mm, GPS+Cellular"    -> "Apple Watch Series 3", "38mm, GPS+Cellular"
Watch3,2    "Apple Watch", "Series 3, 42mm, GPS+Cellular"    -> "Apple Watch Series 3", "42mm, GPS+Cellular"
Watch3,3    "Apple Watch", "Series 3, 38mm, GPS"             -> "Apple Watch Series 3", "38mm, GPS"
Watch3,4    "Apple Watch", "Series 3, 42mm, GPS"             -> "Apple Watch Series 3", "42mm, GPS"
Watch4,1    "Apple Watch", "Series 4, 40mm, GPS"             -> "Apple Watch Series 4", "40mm, GPS"
Watch4,2    "Apple Watch", "Series 4, 44mm, GPS"             -> "Apple Watch Series 4", "44mm, GPS"
Watch4,3    "Apple Watch", "Series 4, 40mm, GPS+Cellular"    -> "Apple Watch Series 4", "40mm, GPS+Cellular"
Watch4,4    "Apple Watch", "Series 4, 44mm, GPS+Cellular"    -> "Apple Watch Series 4", "44mm, GPS+Cellular"
Watch5,1    "Apple Watch", "Series 5, 40mm, GPS"             -> "Apple Watch Series 5", "40mm, GPS"
Watch5,2    "Apple Watch", "Series 5, 44mm, GPS"             -> "Apple Watch Series 5", "44mm, GPS"
Watch5,3    "Apple Watch", "Series 5, 40mm, GPS+Cellular"    -> "Apple Watch Series 5", "40mm, GPS+Cellular"
Watch5,4    "Apple Watch", "Series 5, 44mm, GPS+Cellular"    -> "Apple Watch Series 5", "44mm, GPS+Cellular"
Watch5,9    "Apple Watch", "SE, 40mm, GPS"                   -> "Apple Watch SE", "40mm, GPS"
Watch5,10   "Apple Watch", "SE, 44mm, GPS"                   -> "Apple Watch SE", "44mm, GPS"
Watch5,11   "Apple Watch", "SE, 40mm, GPS+Cellular"          -> "Apple Watch SE", "40mm, GPS+Cellular"
Watch5,12   "Apple Watch", "SE, 44mm, GPS+Cellular"          -> "Apple Watch SE", "44mm, GPS+Cellular"
Watch6,1    "Apple Watch", "Series 6, 40mm, GPS"             -> "Apple Watch Series 6", "40mm, GPS"
Watch6,2    "Apple Watch", "Series 6, 44mm, GPS"             -> "Apple Watch Series 6", "44mm, GPS"
Watch6,3    "Apple Watch", "Series 6, 40mm, GPS+Cellular"    -> "Apple Watch Series 6", "40mm, GPS+Cellular"
Watch6,4    "Apple Watch", "Series 6, 44mm, GPS+Cellular"    -> "Apple Watch Series 6", "44mm, GPS+Cellular"
Watch6,6    "Apple Watch", "Series 7, 41mm, GPS"             -> "Apple Watch Series 7", "41mm, GPS"
Watch6,7    "Apple Watch", "Series 7, 45mm, GPS"             -> "Apple Watch Series 7", "45mm, GPS"
Watch6,8    "Apple Watch", "Series 7, 41mm, GPS+Cellular"    -> "Apple Watch Series 7", "41mm, GPS+Cellular"
Watch6,9    "Apple Watch", "Series 7, 45mm, GPS+Cellular"    -> "Apple Watch Series 7", "45mm, GPS+Cellular"
Watch6,10   "Apple Watch", "SE 2, 40mm, GPS"                 -> "Apple Watch SE", "2nd gen, 40mm, GPS"
Watch6,11   "Apple Watch", "SE 2, 44mm, GPS"                 -> "Apple Watch SE", "2nd gen, 44mm, GPS"
Watch6,12   "Apple Watch", "SE 2, 40mm, GPS+Cellular"        -> "Apple Watch SE", "2nd gen, 40mm, GPS+Cellular"
Watch6,13   "Apple Watch", "SE 2, 44mm, GPS+Cellular"        -> "Apple Watch SE", "2nd gen, 44mm, GPS+Cellular"
Watch6,14   "Apple Watch", "Series 8, 41mm, GPS"             -> "Apple Watch Series 8", "41mm, GPS"
Watch6,15   "Apple Watch", "Series 8, 45mm, GPS"             -> "Apple Watch Series 8", "45mm, GPS"
Watch6,16   "Apple Watch", "Series 8, 41mm, GPS+Cellular"    -> "Apple Watch Series 8", "41mm, GPS+Cellular"
Watch6,17   "Apple Watch", "Series 8, 45mm, GPS+Cellular"    -> "Apple Watch Series 8", "45mm, GPS+Cellular"
Watch6,18   "Apple Watch", "Ultra"                           -> "Apple Watch Ultra"
Watch7,1    "Apple Watch", "Series 9, 41mm, GPS"             -> "Apple Watch Series 9", "41mm, GPS"
Watch7,2    "Apple Watch", "Series 9, 45mm, GPS"             -> "Apple Watch Series 9", "45mm, GPS"
Watch7,3    "Apple Watch", "Series 9, 41mm, GPS+Cellular"    -> "Apple Watch Series 9", "41mm, GPS+Cellular"
Watch7,4    "Apple Watch", "Series 9, 45mm, GPS+Cellular"    -> "Apple Watch Series 9", "45mm, GPS+Cellular"
Watch7,5    "Apple Watch", "Ultra 2"                         -> "Apple Watch Ultra 2"
Watch7,8    "Apple Watch", "Series 10, 42mm, GPS"            -> "Apple Watch Series 10", "42mm, GPS"
Watch7,9    "Apple Watch", "Series 10, 46mm, GPS"            -> "Apple Watch Series 10", "46mm, GPS"
Watch7,10   "Apple Watch", "Series 10, 42mm, GPS+Cellular"   -> "Apple Watch Series 10", "42mm, GPS+Cellular"
Watch7,11   "Apple Watch", "Series 10, 46mm, GPS+Cellular"   -> "Apple Watch Series 10", "46mm, GPS+Cellular"
Watch7,12   "Apple Watch", "Ultra 3"                         -> "Apple Watch Ultra 3"
Watch7,13   "Apple Watch", "SE 3, 40mm, GPS"                 -> "Apple Watch SE 3", "40mm, GPS"
Watch7,14   "Apple Watch", "SE 3, 44mm, GPS"                 -> "Apple Watch SE 3", "44mm, GPS"
Watch7,15   "Apple Watch", "SE 3, 40mm, GPS+Cellular"        -> "Apple Watch SE 3", "40mm, GPS+Cellular"
Watch7,16   "Apple Watch", "SE 3, 44mm, GPS+Cellular"        -> "Apple Watch SE 3", "44mm, GPS+Cellular"
Watch7,17   "Apple Watch", "Series 11, 42mm, GPS"            -> "Apple Watch Series 11", "42mm, GPS"
Watch7,18   "Apple Watch", "Series 11, 46mm, GPS"            -> "Apple Watch Series 11", "46mm, GPS"
Watch7,19   "Apple Watch", "Series 11, 42mm, GPS+Cellular"   -> "Apple Watch Series 11", "42mm, GPS+Cellular"
Watch7,20   "Apple Watch", "Series 11, 46mm, GPS+Cellular"   -> "Apple Watch Series 11", "46mm, GPS+Cellular"
133 of 239 changed

How this was done

  • A script applied the rules plus explicit overrides for specific variants. The variant facts (GSM/CDMA, China, 1TB) were checked against adamawolf's gist. Every change in the table above was reviewed.
  • The data file matches a clean re-run of the rules on the previous version.
  • New specs in spec/device_types_spec.rb: no generations or Mini in names, and every extra part comes from the vocabulary above, in order. I broke entries on purpose to confirm both specs fail.
  • 60 examples pass. The CHANGELOG has a "Breaking changes" section under Unreleased.

VERSION isn't bumped here; it should be 0.5.0 at release.

🤖 Generated with Claude Code

name is Apple's official product name without the bracketed part, and
extra lists what's left in a fixed order: generation or chip, size,
connectivity, variant.

- Apple Watch series, SE and Ultra move into the name
- Generations and chips move from name to extra (iPad mini 5-7,
  iPad Air 3-4, 7th-gen iPad, A16 iPad)
- Cellular iPads say Wi-Fi+Cellular instead of Wi-Fi+LTE or 3G
- Fill in missing connectivity and GSM/CDMA/China variants, 1st gen for
  the first 11" and 12.9" iPad Pros, and 1TB models
- Fix Mini/Gen capitalisation

New specs keep generations out of names and enforce the extra
vocabulary and order. The convention is documented in the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rikas
rikas merged commit 83e9ebd into master Oct 20, 2026
5 checks passed
@rikas
rikas deleted the naming-cleanup branch October 20, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant