This is a community-maintained fork of Apple's AvailabilityVersions repo, which provides version number definitions and availability macros for Apple platforms.
For more information the branching scheme, please see docs/PatchBranchingScheme.md.
Apple's official AvailabilityVersions distribution (last updated as version 155) has not had its availability.dsl file updated since iOS 17.3. This causes the open-source dyld to fail identifying newer OS versions, as the <dyld/VersionMap.h> and sVersionMap data structures remain outdated.
This fork reconstructs the missing availability data from dyld's internal version mappings to maintain compatibility with current and future OS releases.
Since Apple no longer updates the DSL file, we reconstruct availability.dsl entries by extracting version data from dyld binaries found in OS releases.
Use a disassembler (e.g., Hopper, IDA Pro, Binary Ninja) or otool to locate the sVersionMap symbol in the dyld binary (/usr/lib/dyld):
The VersionSetEntry structures appear as arrays of hexadecimal values:
__ZN5dyld3L11sVersionMapE: // dyld3::sVersionMap
struct VersionSetEntry {
0x7e80600, // .set
0xf0600, // .macos
0x120600, // .ios
0xb0600, // .watchos
0x120600, // .tvos
0x90600, // .bridgeos
0x180600, // .driverkit
0x20600 // .visionos
}
Field Order (as defined in VersionMap.h):
set- Version set identifiermacos- macOS versionios- iOS versionwatchos- watchOS versiontvos- tvOS versionbridgeos- bridgeOS versiondriverkit- DriverKit versionvisionos- visionOS version
Version numbers use the format 0x00MMMMRRRR where:
MMMM: Major.Minor version in hexRRRR: Revision/patch version in hex
Examples:
0x007e80600decodes to2024.6.0(0x7e8 = 2024, 0x06 = 6, 0x00 = 0)0x00120600decodes to18.6.0(0x12 = 18, 0x06 = 6, 0x00 = 0)0x000f0600decodes to15.6.0(0x0f = 15, 0x06 = 6, 0x00 = 0)
Important: Set versions for 2024 releases use the simplified format 2024.N.0:
fall_2024:2024.0.0→0x007e800002024_SU_B:2024.1.0→0x007e801002024_SU_C:2024.2.0→0x007e802002024_SU_G:2024.6.0→0x007e80600
Platform versions decode normally using their actual OS version numbers.
The third parameter (uversion) in each set definition corresponds to the Darwin kernel version. Query from:
- Online resources: The Apple Wiki - Kernel Versions
- System queries:
uname -ron target OS - XNU source releases
Example mappings:
- macOS 15.0 / iOS 18.0 → Darwin 24.0.0
- macOS 15.1 / iOS 18.1 → Darwin 24.1.0
- macOS 15.6 / iOS 18.6 → Darwin 24.6.0
Follow the established naming convention for set names:
set 2024_SU_G 2024.6.0 24.6.0
version macos 15.6
version ios 18.6
version tvos 18.6
version watchos 11.6
version bridgeos 9.6
version driverkit 24.6
version visionos 2.6
Note: Set names follow previous conventions (e.g., fall_YYYY, YYYY_SU_X) and may differ from Apple's internal naming.
Given this binary data from dyld:
0x7e80600, 0xf0600, 0x120600, 0xb0600, 0x120600, 0x90600, 0x180600, 0x20600
-
Decode versions:
- Set:
2024.6.0 - macOS:
15.6.0 - iOS:
18.6.0 - watchOS:
11.6.0 - tvOS:
18.6.0 - bridgeOS:
9.6.0 - DriverKit:
24.6.0 - visionOS:
2.6.0
- Set:
-
Lookup Darwin version:
24.6.0(from Apple Wiki or system) -
Create DSL entry:
set 2024_SU_G 2024.6.0 24.6.0
version macos 15.6
version ios 18.6
version tvos 18.6
version watchos 11.6
version bridgeos 9.6
version driverkit 24.6
version visionos 2.6
availability.dsl- Domain-specific language defining platform versions and setsavailability- Python script for querying and preprocessing version datatemplates/- Header templates with preprocessing macros- Generated outputs:
<dyld/VersionMap.h>- Version set mapping table<Availability.h>- Availability macros and version defines
The build system uses CMake, with a Makefile wrapper for compatibility:
make installBuild process:
- Self-preprocess
availabilityscript to embed DSL content - Preprocess all template files using the embedded DSL data
- Install processed files to
DSTROOT
Query platform versions:
# List all iOS versions
/usr/local/libexec/availability --ios
# List all version sets (YAML format)
/usr/local/libexec/availability --sets
# Preprocess a template file
/usr/local/libexec/availability --preprocess input.h output.hWhen adding new OS versions:
- Extract version data from the latest dyld binary using a disassembler
- Decode hexadecimal versions to decimal format
- Verify Darwin kernel version from official sources
- Follow existing naming conventions for set names
- Maintain chronological order in
availability.dsl - Test generated headers for correctness
This project maintains compatibility with Apple's original licensing terms. See individual file headers for details.