How to Decode Apple Version and Build Numbers

Originally published at: https://tidbits.com/2020/07/08/how-to-decode-apple-version-and-build-numbers/

You undoubtedly know about Apple’s version numbering scheme for its operating systems—iOS 13.5.1 and macOS 10.15.5, for instance. But did you know Apple also has a hidden build numbering scheme that can be even more useful? Former Apple engineer David Shayer explains how to decode build numbers and learn from them.

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.

2 Likes

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

  1. a two-digit number associated with the major version (I read that it is the Darwin version number, which seems to be incremented for every macOS major version)
  2. a letter associated with the minor version number (i.e. incremented for each minor version)
  3. the sequential number of this build of this major & minor version
  4. in the case of developer betas, this is followed by a lowercase letter

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?

2 Likes

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.

3 Likes

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.