How to Decode Apple Version and Build Numbers
Everyone knows that Apple operating systems have version numbers, like iOS 13.5.1 or macOS 10.15.5. But have you noticed that Apple operating systems also have build numbers? For instance, iOS 13.5.1 is build number 17F80. But what does that mean?
To see your macOS version and build numbers on a Mac, choose Apple > About This Mac and click the version number. In iOS or iPadOS, go to Settings > General > About and tap Software Version. For watchOS, in your iPhone’s Watch app, go to General > About and look at the Version line.
Although it’s easy to check the build number of any operating system you’re running, Apple doesn’t publish a canonical list of them anywhere. For that information, head to Wikipedia’s iOS Version History, macOS Version History, watchOS, and tvOS articles or look in the MacTracker app (for the macOS build numbers, you’ll need to click through from the version history article to the expanded article about each release).
Apple makes a new build of each operating system at least every night, so there’s a fresh version ready for the engineers each morning. Most of these builds are never released outside the company, so they don’t get an official version number like 13.5.1. But the engineers still need a way to identify a particular build. That’s what build numbers are for. Once you understand how to decode Apple’s build numbers, you can glean additional information about any given release.
Understanding Apple Version and Build Numbers
Apple’s two main operating system lines, iOS and macOS, have independent version and build number systems. iOS, iPadOS, watchOS, and tvOS share a common system since they are all derived from the iOS code base. (Only Darwin-derived operating systems—macOS, iOS, iPadOS, watchOS, and tvOS—use build numbers. Classic Mac OS and iPod OS didn’t use the same build number system.)
As you know, every Apple operating system release has an official version number, composed of three parts:
- Major version: For iOS, it’s incremented once per year for significant upgrades. For macOS, the major version number has been 10 since the initial release of Mac OS X, rendering it pointless up until the upcoming update to macOS 11 Big Sur.
- Minor version: For iOS, the minor version is incremented as necessary (usually three to six times) throughout the lifespan of a major version to reflect updates that contain new features along with bug fixes. For macOS, the minor version is really the major version, incrementing for each annual named release of macOS.
- Patch version: For iOS, the patch version increments as necessary for bug fix updates to each minor release. For macOS, Apple updates the patch version for every release that’s more than just a quick bug fix—those are called “supplemental updates” and don’t get their own version numbers. But their build numbers change!
Here’s a simple chart to help clarify the official version numbering scheme.
An Apple build number also has three parts:
- Major version: Within Apple, the major version is called the build train.
- Minor version: For iOS and its descendants, the minor version tracks with the minor release; for macOS, it tracks with patch releases.
- Daily build version: The daily build indicates how many times Apple has built the source code for the release since the previous public release.
To make this crystal clear, look at iOS 13.5.1, which is build 17F80, and macOS 10.15.5 with its supplemental update, which is build 19F101.
One tangentially related note: For macOS Big Sur, Apple updated the major version number to 11 and reset the minor version number to 0. This move may cause problems for some apps that check feature availability by looking up the operating system version. Since macOS’s major version number remained at 10 for so long, some developers got lazy and checked only the minor version number. Needless to say, such sloppy code could break in Big Sur. Luckily, as Howard Oakley explains, Apple has made some effort to mitigate this problem by having Big Sur return 10.16 rather than 11.0 in some situations. This is why apps should check macOS APIs directly for the existence of a particular feature, rather than assume it exists in a specific operating system version just because Apple first included it in that version or an earlier one.
Major Build Number
These days, the major build number for iOS changes every year. iOS 13’s major build number is 17; iOS 14’s is 18.
|iOS, iPadOS, watchOS, and tvOS Build Trains|
|iOS||iPadOS||watchOS||tvOS||Major Build Number|
|iPhone OS 1||1–4|
|iPhone OS 2||5|
|iPhone OS 3||7|
|iOS 8||watchOS 1||12|
|iOS 9||watchOS 2||tvOS 9||13|
|iOS 10||watchOS 3||tvOS 10||14|
|iOS 11||watchOS 4||tvOS 11||15|
|iOS 12||watchOS 5||tvOS 12||16|
|iOS 13||iPadOS 13||watchOS 6||tvOS 13||17|
|iOS 14||iPadOS 14||watchOS 7||tvOS 14||18|
With macOS, the major build number also changes with every significant release, which occurs every year now, although less frequently in the past.
|macOS Build Trains|
|macOS Version||Major Build Number|
|Mac OS X Public Beta||1|
|Mac OS X 10.0 Cheetah||4|
|Mac OS X 10.1 Puma||5|
|Mac OS X 10.2 Jaguar||6|
|Mac OS X 10.3 Panther||7|
|Mac OS X 10.4 Tiger||8|
|Mac OS X 10.5 Leopard||9|
|Mac OS X 10.6 Snow Leopard||10|
|Mac OS X 10.7 Lion||11|
|Mac OS X 10.8 Mountain Lion||12|
|Mac OS X 10.9 Mavericks||13|
|Mac OS X 10.10 Yosemite||14|
|Mac OS X 10.11 El Capitan||15|
|macOS 10.12 Sierra||16|
|macOS 10.13 High Sierra||17|
|macOS 10.14 Mojave||18|
|macOS 10.15 Catalina||19|
|macOS 11.0 Big Sur||20|
Minor Build Letter
For iOS, the minor build version usually changes for each X.1 operating system release. It’s a letter, not a number, and generally clambers its way up the alphabet. There are some discrepancies, such as iOS 13.1 continuing minor version A instead of switching to B. Also, iOS 13.3 is minor version C, and iOS 13.4 is minor version E, skipping D. More on these oddities shortly.
|iOS 13 Minor Versions|
Things are a bit different in the macOS world. As you can see, the minor build letter corresponds with the macOS patch release number.
|Catalina Minor Versions|
Daily Build Number
Things get interesting when we come to the daily build number. Apple engineers increment it every time a new build is made, usually every night, but sometimes more often. The first time Apple made an engineering build of iOS 13, it was assigned build number 17A1. The next build was 17A2. And so on.
The first shipping version of iOS 13.0 was 17A577, which means Apple made 577 builds of iOS 13 before it shipped the first copy to users. The second shipping build was iOS 13.1, build number 17A844. It took an additional 267 builds to create iOS 13.1. More interesting are the build numbers corresponding to the patch releases.
|iOS 13 Patch Releases|
|iOS 13.1.2||17A860 and 17A861|
As you can see, Apple was pushing those patch releases out quickly—there were only 10 builds between iOS 13.1 and iOS 13.1.1, only 6 or 7 between 13.1.1 and 13.1.2, and only 17 or 18 more before the release of iOS 13.1.3. I don’t know why iOS 13.1.2 had two build numbers; iPadOS 13.1.2 shared only the first one, so perhaps the second one was specific to a particular iPhone model or geographic area.
With macOS, the daily build number is more important. As you’ve undoubtedly noticed, when Apple is forced to release a quick bug fix update for all of its operating systems, it sometimes gets stuck with macOS. iOS 13.5 went to 13.5.1, for instance, but macOS 10.15.5 was given a “supplemental update” with no change in the official version number.
Luckily, the build number has no such limitation. As you can see in the chart, the daily build number changes for the supplemental updates, enabling you to tell if your copy of macOS has been updated or not. That’s helpful because Apple usually backpatches supplemental updates into the update they address. So if you held off on installing macOS 10.15.5 for a week, by the time you got to it, it would have already included the macOS 10.15.5 Supplemental Update (see “Kernel Vulnerability Causes Apple to Update All Operating Systems,” 1 June 2020). The only way you could tell what you had would be to look at the build number.
|Catalina Supplemental Updates|
|macOS 10.15 Supplemental Update||19A602|
|macOS 10.15 Revised Supplemental Update||19A603|
|macOS 10.15.4 Supplemental Update||19E287|
|macOS 10.15.5 Supplemental Update||19F101|
Extracting Meaning from Build Numbers
As you can see, we can learn useful information from build numbers. For instance, watchOS 1 (12S506) has major build number 12, the same as iOS 8 (12A365), because watchOS 1 is derived from the iOS 8 code base.
We can also tell iOS and iPadOS are built from the same source because they have the same build number (17A577). On the other hand, we can tell tvOS 13 and watchOS 6 are derived from the iOS 13 code base, because they have the same major build number, but are distinct branches, because they have different minor build numbers that aren’t used for iOS, with tvOS starting at J and watchOS starting at R.
Apple isn’t dogmatic about following these rules, or, to put it another way, circumstances sometimes force the company to deviate from its rules. If it had followed past years, iOS 13.1 would have been 17B267, but it was 17A844. This fact probably means that Apple originally thought that iOS 13.1 was going to be iOS 13.0.1, but it ended up containing such important changes that the company decided to increment the minor version number rather than the patch version number.
Last year’s confused iOS release reflects that decision, with Apple releasing iOS 13.0 and promising a quick update to iOS 13.1 with features that weren’t ready at launch (see “Apple to Ship iOS 13 on September 19th, iOS 13.1 on September 30th,” 10 September 2019, and “Features Added in iOS 13.1: Personal Automations, Driving ETA, and More,” 24 September 2019).
Similarly, iOS 13.3 is 17C54 and iOS 13.4 is 17E255—what happened to minor version D? That was assigned to iOS 13.3.1, which has build number 17D50. Presumably, Apple had planned the release that ended up being iOS 13.3.1 to include the many new features in iOS 13.4 but felt a pressing need to push out a quick bug fix update first. In this case, it was to address the privacy concerns surrounding the ultrawideband technology in the iPhone 11 (see “Apple Releases iOS 13.3.1, iPadOS 13.3.1, macOS 10.15.3, watchOS 6.1.2, and tvOS 13.3.1,” 28 January 2020).
There are undoubtedly many other stories behind jumps in build numbers or build numbers that skip around. An apparently missing build might be destined for HomePod, or an unreleased product, or a product only used internally at Apple. But what’s important going forward is that you now know how to find and decode the build number associated with any given operating system release. And with that information in hand, you can draw various conclusions about the release: how much work went into it, whether Apple was taken off guard by some bug report, or just whether or not you’ve actually received a supplemental update.
One interesting fact that’s worth mentioning:
On macOS, the major build number matches the Darwin kernel major version. See Wikipedia. With the exception of Mac OS X 10.0 (kernel 1.3.1), and 10.1 (kernel 1.4.1, later renumbered to 5), the two increment in lock-step with each other.
Surprisingly, Apple apparently chose to not do this for iOS/watchOS/tvOS.
I wonder if they will start sync’ing with each other in the future after ARM-based Macs ship, since all devices will (most likely) be running different builds of the same kernel.
Looks like Big Sur will identify itself as both 10.16 and 11.0, depending on the version of the SDK used.
Sounds like a reasonably good solution to a no-win situation.
From what I can tell, recent macOS build numbers consist of
Lets look at the build numbers of macOS Ventura releases.
macOS Ventura, Version: 13.0.1, Build: 22A400
macOS Ventura, Version: 13.1, Build: 22C65
macOS Ventura, Version: 13.2, Build: 22D49
macOS Ventura, Version: 13.2.1, Build: 22D68
macOS Ventura, Ver. 13.3 beta, Build: 22E5219e
All of these start with 22 because they are all built on Darwin version 22. The capital letter following 22 is incremented for each minor version. I don’t know why 22Bxxx is missing. My guess is that perhaps it was an attempt to build 13.1 that was abandoned. Maybe there was a 13.0 22Axxx and 13.1 22Bxxx was branched off from 13.0 22Axxx. Then some problem was discovered, so that 22Axxx was continued with a version number 13.0.1 indicating a patch to 13.0. In this hypothesis, the 13.1 22Bxxx branch was abandoned because it was based on the problematic code. Then a new 13.1 22Cxxx branch was started based on the corrected 13.0.1 22A400 code. This is just a guess. 13.0.1 is the 400th consecutive build since starting work on 13.0. 13.1 is the 65th consecutive build since branching off from 22A400. 13.2 is the 49th consecutive build since branching off from 22C65. 13.2.1 is a continuation of the 22Dxxx branch - it is the 19th consecutive build after 22D49. I find the 13.3 beta confusing. the 22E part is easy to understand, but it is hard to believe that there were 5219 consecutive builds after branching off from 22D68. Other Apple developer beta build numbers all seem to end with a lowercase letter, but I don’t know how to interpret it.
Does that seem right?
You have most of it. Here’s a bit of refinement.
When it comes time to seed a beta, a letter gets added to the two-three (or four) digit build number, so that build branches off to a beta build that stays constant for the life of that beta test. The mainline builds continue to increase until it’s time to branch off a beta 2. The letter seems to be rather arbitrary, but generally speaking it becomes an “a” as that minor version nears the end. When the letter gets dropped it means they have moved into the RC or Release Candidate phase. There can be more than one RC if a serious bug remains that needs to be fixed. Sometimes the last RC is what gets released to the public as a production build and sometimes there’s the build increments due to some minor issue that Apple feels is not worth additional beta testing or they run out of time.
The 5xxxa numbers used to be confined to iOS (some were 4xxxa), but that changed more recently and I don’t have a good explanation for that any more. Sufficient to say that the 22E5219e build was an “e” branch from the 219th mainline build of Ventura 13.3.
But important to know that the build numbers don’t reveal any real information, other than when a build was built relative to other builds from the same train. They don’t include information about what bugs got fixed, what bugs didn’t get fixed, what bugs will be fixed, or how Apple’s development schedule works.
Al Varnell, Thank you for the clarification.
Do you happen to know what the 9 in 22E5219e means? I thought of 5219 as the build number and the e as a suffix (having to do with it being a developer beta build). From what you wrote, perhaps I should think of 521 as the build number and 9e as the suffix. In general, is it the case that if the last character is a lowercase letter, the immediately preceding character (whether or not it is a digit) is NOT part of the build number, but connotes something about the status of the build (such as that it is a developer beta)?
When you wrote “The 5xxxa numbers used to be confined to iOS (some were 4xxxa)”, did that mean that the 5 (or 4) was not part of the build number, but was just a prefix to the build number?
Exactly. With regard to your first question, I did mistake and have corrected that section of my explanation.
Al Varnell, But now you think that in 22E5219e, the 5 is part of the build number and the 9 is not, rather than the 5 being a prefix and the build number being 219. Is that correct?
It would be very nice to get an Apple document in which they explained what they are doing.
5 is a prefix and the build number was 219.
Join the discussion in the TidBITS Discourse forum