[2026-10-06] eagle: work/notes/webkit-macos-version-mapping.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-06 15:16:51 +06:00
1 parent 307aba7cf1
commit f6267b7c52
1 file changed
+380 -239
+380 -239
View File
@@ -1,149 +1,402 @@
--- ---
title: Mapping Apple OS builds to WebKit source releases title: Apple OS to WebKit release mapping
tags: [webkit, safari, macos, ios, crash, ravel, reference] tags: [webkit, safari, macos, ios, crash, ravel, reference]
created: 2026-10-06 created: 2026-10-06
updated: 2026-10-06 updated: 2026-10-06
--- ---
# Mapping Apple OS builds to WebKit source releases # Apple OS to WebKit release mapping
## Purpose ## Read this first
This document explains how to map a WebKit crash on macOS or iOS to: This is the lookup table for DuckDuckGo's supported range: **macOS 12.3+** and **iOS 15.0+**. It includes every stable minor and patch release recorded by AppleDB through **2026-10-06**.
1. the exact Apple OS build; Missing version numbers are intentional: Apple did not publish a stable release with that number.
2. the exact system WebKit binary by Mach-O UUID;
3. its `CFBundleVersion` and WebKit `FULL_VERSION`;
4. the closest public WebKit source tag;
5. the presence or absence of a source change.
The DuckDuckGo Apple browsers currently support macOS **12.3+** and iOS **15.0+**. The deployment targets are defined in `macOS/Configuration/Common.xcconfig` and `iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj` in the Apple browsers repository. Evidence labels:
## Short answer | Label | Meaning |
|---|---|
| `exact/tag` | Apple published an OS-specific WebKit source tag. The full five-part source version is known. |
| `exact/binary` | The OS build, WebKit UUID and `CFBundleVersion` were matched in Ravel. |
| `train` | The Safari/WebKit release family is known, but Apple has not published an exact OS-specific source tag. `.*` is intentional. |
Use this chain for an exact mapping: An OS marketing version alone is not enough for crash forensics. Hardware-specific OS builds can differ, and macOS can receive Safari/WebKit updates separately. For an exact answer, match **OS build + WebKit UUID + `CFBundleVersion`**.
```text ## iOS mapping
OS version + OS build
-> WebKit Mach-O UUID from the crash report
-> matching binary and UUID in Ravel
-> WebKit CFBundleVersion from the OS or app telemetry
-> remove the platform SYSTEM_VERSION_PREFIX
-> WebKit FULL_VERSION
-> public source tag or release branch
-> inspect the released code for the fix
```
An OS major version identifies only a **WebKit release train**. It does not identify the exact WebKit revision because Apple updates WebKit in OS point and security releases. iOS production bundle versions use prefix `8`: `CFBundleVersion = 8 + FULL_VERSION`.
## Version fields
| Field | Example | Meaning | ### iOS 15
|---|---:|---|
| OS version | `macOS 27.0.1` | Marketing version |
| OS build | `26A434` | Exact Apple OS build; use this in Ravel |
| Mach-O UUID | `70BEE322-...` | Exact WebKit binary identity for one architecture |
| `CFBundleVersion` | `22625.1.29.11.28` | System framework build version |
| `SYSTEM_VERSION_PREFIX` | `22` | Platform/OS prefix added by Apple's production build |
| WebKit `FULL_VERSION` | `625.1.29.11.28` | Release version without the system prefix |
| Source tag | `WebKit-7625.1.29.11.28` | Candidate public source release |
| HTTP User-Agent | `AppleWebKit/605.1.15` | Frozen compatibility token; not usable for this mapping |
## Supported OS release trains | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `15.0` | `19A341`<br>`19A344`<br>`19A345`<br>`19A346` | `15` | `612.1.27.0.31` | `Safari-612.1.27.0.31` | `exact/tag` |
| `15.0.1` | `19A348` | `15` | `612.1.27.0.31` | `Safari-612.1.27.0.31` | `exact/tag` |
| `15.0.2` | `19A404` | `15` | `612.1.27.0.31` | `Safari-612.1.27.0.31` | `exact/tag` |
| `15.1` | `19B74` | `15.1` | `612.2.9.0.20` | `Safari-612.2.9.0.20` | `exact/tag` |
| `15.1.1` | `19B81` | `15.1` | `612.2.9.0.20` | `Safari-612.2.9.0.20` | `exact/tag` |
| `15.2` | `19C56`<br>`19C57` | `15.2` | `612.3.6.0.4` | `Safari-612.3.6.0.4` | `exact/tag` |
| `15.2.1` | `19C63` | `15.2` | `612.3.6.0.4` | `Safari-612.3.6.0.4` | `exact/tag` |
| `15.3` | `19D50` | `15.3` | `612.4.9.0.3` | `Safari-612.4.9.0.3` | `exact/tag` |
| `15.3.1` | `19D52` | `15.3` | `612.4.9.0.4` | `Safari-612.4.9.0.4` | `exact/tag` |
| `15.4` | `19E241` | `15.4` | `613.1.17.0.7` | `Safari-613.1.17.0.7` | `exact/tag` |
| `15.4.1` | `19E258` | `15.4` | `613.1.17.0.8` | `Safari-613.1.17.0.8` | `exact/tag` |
| `15.5` | `19F77` | `15.5` | `613.2.7.0.7` | `WebKit-7613.2.7.0.7` | `exact/tag` |
| `15.6` | `19G71` | `15.6` | `613.3.9.0.5` | `WebKit-7613.3.9.0.5` | `exact/tag` |
| `15.6.1` | `19G82` | `15.6` | `613.3.9.*` | `WebKit-7613.3.9.*` | `train` |
| `15.7` | `19H12` | `15.6.2` | `613.4.1.0.2` | `WebKit-7613.4.1.0.2` | `exact/tag` |
| `15.7.1` | `19H117` | `15.6.3` | `613.5.1.0.2` | `WebKit-7613.5.1.0.2` | `exact/tag` |
| `15.7.2` | `19H218` | `15.6.4` | `613.6.1.0.3` | `WebKit-7613.6.1.0.3` | `exact/tag` |
| `15.7.3` | `19H307` | `15.6.4` | `613.7.1.0.1` | `WebKit-7613.7.1.0.1` | `exact/tag` |
| `15.7.4` | `19H321` | `15.6.4` | `613.7.1.0.5` | `WebKit-7613.7.1.0.5` | `exact/tag` |
| `15.7.5` | `19H332` | `15.6.4` | `613.7.1.0.6` | `WebKit-7613.7.1.0.6` | `exact/tag` |
| `15.7.6` | `19H349` | `15.6.4` | `613.7.1.0.8` | `WebKit-7613.7.1.0.8` | `exact/tag` |
| `15.7.7` | `19H357` | `15.6.6` | `613.7.1.0.10` | `WebKit-7613.7.1.0.10` | `exact/tag` |
| `15.7.8` | `19H364` | `15.6.6` | `613.7.1.0.13` | `WebKit-7613.7.1.0.13` | `exact/tag` |
| `15.7.9` | `19H365` | `15.6.6` | `613.7.1.0.13` | `WebKit-7613.7.1.0.13` | `exact/tag` |
| `15.8` | `19H370` | `15.6.6` | `613.7.1.0.13` | `WebKit-7613.7.1.0.13` | `exact/tag` |
| `15.8.1` | `19H380` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.2` | `19H384` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.3` | `19H386` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.4` | `19H390` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.5` | `19H394` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.6` | `19H402` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.7` | `19H411` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
| `15.8.8` | `19H422` | `15.6` | `613.7.1.*` | `WebKit-7613.7.1.*` | `train` |
These tables map each supported OS major to its initial Safari/WebKit release train. Always use the exact-build workflow for a crash or API-availability decision. ### iOS 16
### macOS 12.3+ | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `16.0` | `20A357`<br>`20A362` | `16` | `614.1.25.0.30` | `WebKit-7614.1.25.0.30` | `exact/tag` |
| `16.0.1` | `20A371` | `16` | `614.1.25.0.30` | `WebKit-7614.1.25.0.30` | `exact/tag` |
| `16.0.2` | `20A380` | `16` | `614.1.25.0.31` | `WebKit-7614.1.25.0.31` | `exact/tag` |
| `16.0.3` | `20A392` | `16` | `614.1.25.0.31` | `WebKit-7614.1.25.0.31` | `exact/tag` |
| `16.1` | `20B82` | `16.1` | `614.2.9.0.10` | `WebKit-7614.2.9.0.10` | `exact/tag` |
| `16.1.1` | `20B101` | `16.1` | `614.2.9.0.10` | `WebKit-7614.2.9.0.10` | `exact/tag` |
| `16.1.2` | `20B110` | `16.1` | `614.2.9.0.11` | `WebKit-7614.2.9.0.11` | `exact/tag` |
| `16.2` | `20C65` | `16.2` | `614.3.7.0.6` | `WebKit-7614.3.7.0.6` | `exact/tag` |
| `16.3` | `20D47`<br>`20D50` | `16.3` | `614.4.6.0.5` | `WebKit-7614.4.6.0.5` | `exact/tag` |
| `16.3.1` | `20D67` | `16.3` | `614.4.6.0.6` | `WebKit-7614.4.6.0.6` | `exact/tag` |
| `16.4` | `20E247` | `16.4` | `615.1.26.10.23` | `WebKit-7615.1.26.10.23` | `exact/tag` |
| `16.4.1` | `20E252` | `16.4` | `615.1.26.10.24` | `WebKit-7615.1.26.10.24` | `exact/tag` |
| `16.5` | `20F66` | `16.5` | `615.2.9.10.3` | `WebKit-7615.2.9.10.3` | `exact/tag` |
| `16.5.1` | `20F75` | `16.5` | `615.2.9.*` | `WebKit-7615.2.9.*` | `train` |
| `16.6` | `20G75` | `16.6` | `615.3.12.10.2` | `WebKit-7615.3.12.10.2` | `exact/tag` |
| `16.6.1` | `20G81` | `16.6` | `615.3.12.10.2` | `WebKit-7615.3.12.10.2` | `exact/tag` |
| `16.7` | `20H19` | `16.6` | `615.3.12.10.4` | `WebKit-7615.3.12.10.4` | `exact/tag` |
| `16.7.1` | `20H30` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.2` | `20H115` | `16.6` | `615.3.12.110.2` | `WebKit-7615.3.12.110.2` | `exact/tag` |
| `16.7.3` | `20H232` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.4` | `20H240` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.5` | `20H307` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.6` | `20H320` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.7` | `20H330` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.8` | `20H343` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.9` | `20H348` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.10` | `20H350` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.11` | `20H360` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.12` | `20H364` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.13` | `20H365` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.14` | `20H370` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.15` | `20H380` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `16.7.16` | `20H392` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| macOS | DDG support | Safari release | WebKit base `FULL_VERSION` | macOS prefix | Production bundle base | Public source-tag family | ### iOS 17
|---|---:|---:|---:|---:|---:|---|
| 12 Monterey | 12.3+ | 15 | `612.1.27` | `17` | `17612.1.27` | `Safari-612.1.27.*` |
| 13 Ventura | Yes | 16 | `614.1.25` | `18` | `18614.1.25` | `WebKit-7614.1.25.*` |
| 14 Sonoma | Yes | 17 | `616.1.27` | `19` | `19616.1.27` | `WebKit-7616.1.27.*` |
| 15 Sequoia | Yes | 18 | `619.1.26` | `20` | `20619.1.26` | `WebKit-7619.1.26.*` |
| 26 Tahoe | Yes | 26 | `622.1.22` | `21` | `21622.1.22` | `WebKit-7622.1.22.*` |
| 27 Golden Gate | Yes | 27 | `625.1.29` | `22` | `22625.1.29` | `WebKit-7625.1.29.*` |
### iOS 15.0+ | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `17.0` | `21A326`<br>`21A327`<br>`21A329`<br>`21A331` | `17` | `616.1.27.10.13` | `WebKit-7616.1.27.10.13` | `exact/tag` |
| `17.0.1` | `21A340` | `17` | `616.1.27.10.15` | `WebKit-7616.1.27.10.15` | `exact/tag` |
| `17.0.2` | `21A350`<br>`21A351` | `17` | `616.1.27.10.15` | `WebKit-7616.1.27.10.15` | `exact/tag` |
| `17.0.3` | `21A360` | `17` | `616.1.27.*` | `WebKit-7616.1.27.*` | `train` |
| `17.1` | `21B74`<br>`21B80` | `17.1` | `616.2.9.*` | `WebKit-7616.2.9.*` | `train` |
| `17.1.1` | `21B91` | `17.1` | `616.2.9.*` | `WebKit-7616.2.9.*` | `train` |
| `17.1.2` | `21B101` | `17.1` | `616.2.9.*` | `WebKit-7616.2.9.*` | `train` |
| `17.2` | `21C62` | `17.2` | `617.1.17.10.9` | `WebKit-7617.1.17.10.9` | `exact/tag` |
| `17.2.1` | `21C66` | `17.2` | `617.1.17.10.9` | `WebKit-7617.1.17.10.9` | `exact/tag` |
| `17.3` | `21D50` | `17.3` | `617.2.4.*` | `WebKit-7617.2.4.*` | `train` |
| `17.3.1` | `21D61` | `17.3.1` | `617.2.4.10.8` | `WebKit-7617.2.4.10.8` | `exact/tag` |
| `17.4` | `21E219` | `17.4` | `618.1.15.10.11` | `WebKit-7618.1.15.10.11` | `exact/tag` |
| `17.4.1` | `21E236`<br>`21E237` | `17.4` | `618.1.15.*` | `WebKit-7618.1.15.*` | `train` |
| `17.5` | `21F79` | `17.5` | `618.2.12.10.9` | `WebKit-7618.2.12.10.9` | `exact/tag` |
| `17.5.1` | `21F90` | `17.5` | `618.2.12.10.9` | `WebKit-7618.2.12.10.9` | `exact/tag` |
| `17.6` | `21G80` | `17.6` | `618.3.11.10.5` | `WebKit-7618.3.11.10.5` | `exact/tag` |
| `17.6.1` | `21G101`<br>`21G93` | `17.6` | `618.3.11.10.5` | `WebKit-7618.3.11.10.5` | `exact/tag` |
| `17.7` | `21H16` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `17.7.1` | `21H216` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `17.7.2` | `21H221` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
WebKit uses `SYSTEM_VERSION_PREFIX = 8` for iPhone-family SDKs. Therefore the iOS production bundle version is `8` concatenated with `FULL_VERSION`. ### iOS 18
| iOS | DDG support | Safari release | WebKit base `FULL_VERSION` | iOS prefix | Production bundle base | Public source-tag family | | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---:|---:|---:|---:|---:|---| |---|---|---:|---:|---|---|
| 15 | 15.0+ | 15 | `612.1.27` | `8` | `8612.1.27` | `Safari-612.1.27.*` | | `18.0` | `22A3351`<br>`22A3354` | `18` | `619.1.26.30.5` | `WebKit-7619.1.26.30.5` | `exact/tag` |
| 16 | Yes | 16 | `614.1.25` | `8` | `8614.1.25` | `WebKit-7614.1.25.*` | | `18.0.1` | `22A3370` | `18` | `619.1.26.*` | `WebKit-7619.1.26.*` | `train` |
| 17 | Yes | 17 | `616.1.27` | `8` | `8616.1.27` | `WebKit-7616.1.27.*` | | `18.1` | `22B83` | `18.1` | `619.2.8.10.7` | `WebKit-7619.2.8.10.7` | `exact/tag` |
| 18 | Yes | 18 | `619.1.26` | `8` | `8619.1.26` | `WebKit-7619.1.26.*` | | `18.1.1` | `22B91` | `18.1.1` | `619.2.8.10.9` | `WebKit-7619.2.8.10.9` | `exact/tag` |
| 26 | Yes | 26 | `622.1.22` | `8` | `8622.1.22` | `WebKit-7622.1.22.*` | | `18.2` | `22C152` | `18.2` | `620.1.16.10.11` | `WebKit-7620.1.16.10.11` | `exact/tag` |
| 27 | Yes | 27 | `625.1.29` | `8` | `8625.1.29` | `WebKit-7625.1.29.*` | | `18.2.1` | `22C161` | `18.2` | `620.1.16.10.11` | `WebKit-7620.1.16.10.11` | `exact/tag` |
| `18.3` | `22D63`<br>`22D64`<br>`22D8063` | `18.3` | `620.2.4.10.7` | `WebKit-7620.2.4.10.7` | `exact/tag` |
| `18.3.1` | `22D72`<br>`22D8075` | `18.3` | `620.2.4.10.7` | `WebKit-7620.2.4.10.7` | `exact/tag` |
| `18.3.2` | `22D8082`<br>`22D82` | `18.3.1` | `620.2.4.10.8` | `WebKit-7620.2.4.10.8` | `exact/tag` |
| `18.4` | `22E240` | `18.4` | `621.1.15.*` | `WebKit-7621.1.15.*` | `train` |
| `18.4.1` | `22E252` | `18.4` | `621.1.15.*` | `WebKit-7621.1.15.*` | `train` |
| `18.5` | `22F76` | `18.5` | `621.2.5.*` | `WebKit-7621.2.5.*` | `train` |
| `18.6` | `22G86` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.6.1` | `22G90` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.6.2` | `22G100` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7` | `22H20` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.1` | `22H31` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.2` | `22H124` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.3` | `22H217` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.4` | `22H218` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.5` | `22H311` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.6` | `22H320` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.7` | `22H333`<br>`22H340` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.8` | `22H352` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.9` | `22H355` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `18.7.10` | `22H374` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
iOS versions 19–25 do not exist; Apple changed the public version number from 18 to 26. ### iOS 26
## Exact builds verified in Ravel | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `26.0` | `23A330`<br>`23A341`<br>`23A345` | `26` | `622.1.22.*` | `WebKit-7622.1.22.*` | `train` |
| `26.0.1` | `23A355` | `26` | `622.1.22.*` | `WebKit-7622.1.22.*` | `train` |
| `26.1` | `23B85` | `26.1` | `622.2.11.*` | `WebKit-7622.2.11.*` | `train` |
| `26.2` | `23C55` | `26.2` | `623.1.14.*` | `WebKit-7623.1.14.*` | `train` |
| `26.2.1` | `23C71` | `26.2` | `623.1.14.*` | `WebKit-7623.1.14.*` | `train` |
| `26.3` | `23D127`<br>`23D8128` | `26.3` | `623.2.7.*` | `WebKit-7623.2.7.*` | `train` |
| `26.3.1` | `23D8133` | `26.3` | `623.2.7.*` | `WebKit-7623.2.7.*` | `train` |
| `26.4` | `23E246` | `26.4` | `624.1.16.*` | `WebKit-7624.1.16.*` | `train` |
| `26.4.1` | `23E254` | `26.4` | `624.1.16.*` | `WebKit-7624.1.16.*` | `train` |
| `26.4.2` | `23E261` | `26.4` | `624.1.16.*` | `WebKit-7624.1.16.*` | `train` |
| `26.5` | `23F77` | `26.5` | `624.2.5.*` | `WebKit-7624.2.5.*` | `train` |
| `26.5.1` | `23F81` | `26.5` | `624.2.5.*` | `WebKit-7624.2.5.*` | `train` |
| `26.5.2` | `23F84` | `26.5` | `624.2.5.*` | `WebKit-7624.2.5.*` | `train` |
| `26.6` | `23G71` | `26.6` | `624.4.5.*` | `WebKit-7624.4.5.*` | `train` |
| `26.6.1` | `23G83` | `26.6` | `624.4.5.*` | `WebKit-7624.4.5.*` | `train` |
| `26.6.2` | `23G90` | `26.6` | `624.4.5.*` | `WebKit-7624.4.5.*` | `train` |
| `26.7` | `23H24` | `26.6` | `624.5.1.*` | `WebKit-7624.5.1.*` | `train` |
| `26.7.1` | `23H30` | `26.6` | `624.5.1.*` | `WebKit-7624.5.1.*` | `train` |
Ravel is currently incomplete. A missing build means that Ravel does not index it, not that the OS lacks WebKit. ### iOS 27
### macOS examples | OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `27.0` | `24A427`<br>`24A437`<br>`24A8428` | `27` | `625.1.29.*` | `WebKit-7625.1.29.*` | `train` |
| `27.0.1` | `24A446` | `27` | `625.1.29.*` | `WebKit-7625.1.29.*` | `train` |
## macOS mapping
macOS production prefixes are: 12 → `17`, 13 → `18`, 14 → `19`, 15 → `20`, 26 → `21`, 27 → `22`.
### macOS 12
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `12.3` | `21E230` | `15.4` | `613.1.17.1.6` | `Safari-613.1.17.1.6` | `exact/tag` |
| `12.3.1` | `21E258` | `15.4` | `613.1.17.1.13` | `Safari-613.1.17.1.13` | `exact/tag` |
| `12.4` | `21F2081`<br>`21F2092`<br>`21F79` | `15.5` | `613.2.7.1.8` | `WebKit-7613.2.7.1.8` | `exact/tag` |
| `12.5` | `21G72` | `15.6` | `613.3.9.1.5` | `WebKit-7613.3.9.1.5` | `exact/tag` |
| `12.5.1` | `21G83` | `15.6` | `613.3.9.*` | `WebKit-7613.3.9.*` | `train` |
| `12.6` | `21G115` | `16` | `614.1.25.*` | `WebKit-7614.1.25.*` | `train` |
| `12.6.1` | `21G217` | `16.1` | `614.2.9.*` | `WebKit-7614.2.9.*` | `train` |
| `12.6.2` | `21G320` | `16.2` | `614.3.7.*` | `WebKit-7614.3.7.*` | `train` |
| `12.6.3` | `21G419` | `16.3` | `614.4.6.*` | `WebKit-7614.4.6.*` | `train` |
| `12.6.4` | `21G526` | `16.4` | `615.1.26.*` | `WebKit-7615.1.26.*` | `train` |
| `12.6.5` | `21G531` | `16.4` | `615.1.26.*` | `WebKit-7615.1.26.*` | `train` |
| `12.6.6` | `21G646` | `16.5` | `615.2.9.*` | `WebKit-7615.2.9.*` | `train` |
| `12.6.7` | `21G651` | `16.5.1` | `615.2.9.*` | `WebKit-7615.2.9.*` | `train` |
| `12.6.8` | `21G725` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.6.9` | `21G726` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7` | `21G816` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.1` | `21G920` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.2` | `21G1974` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.3` | `21H1015` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.4` | `21H1123` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.5` | `21H1222` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `12.7.6` | `21H1320` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
### macOS 13
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `13.0` | `22A380`<br>`22A8380`<br>`22A8381` | `16.1` | `614.2.9.1.12` | `WebKit-7614.2.9.1.12` | `exact/tag` |
| `13.0.1` | `22A400` | `16.1` | `614.2.9.1.12` | `WebKit-7614.2.9.1.12` | `exact/tag` |
| `13.1` | `22C65` | `16.2` | `614.3.7.1.5` | `WebKit-7614.3.7.1.5` | `exact/tag` |
| `13.2` | `22D49` | `16.3` | `614.4.6.1.5` | `WebKit-7614.4.6.1.5` | `exact/tag` |
| `13.2.1` | `22D68` | `16.3` | `614.4.6.1.6` | `WebKit-7614.4.6.1.6` | `exact/tag` |
| `13.3` | `22E252`<br>`22E8252` | `16.4` | `615.1.26.11.22` | `WebKit-7615.1.26.11.22` | `exact/tag` |
| `13.3.1` | `22E261` | `16.4` | `615.1.26.11.23` | `WebKit-7615.1.26.11.23` | `exact/tag` |
| `13.4` | `22F2063`<br>`22F2073`<br>`22F66` | `16.5` | `615.2.9.11.4` | `WebKit-7615.2.9.11.4` | `exact/tag` |
| `13.4.1` | `22F2083`<br>`22F82` | `16.5.1` | `615.2.9.11.7` | `WebKit-7615.2.9.11.7` | `exact/tag` |
| `13.5` | `22G2074`<br>`22G2080`<br>`22G74` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.5.1` | `22G90` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.5.2` | `22G91` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6` | `22G120` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.1` | `22G313` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.2` | `22G2321`<br>`22G320` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.3` | `22G436` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.4` | `22G513` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.5` | `22G621` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.6` | `22G630` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.7` | `22G720` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.8` | `22G820` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.6.9` | `22G830` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7` | `22H123` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.1` | `22H221` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.2` | `22H313` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.3` | `22H417` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.4` | `22H420` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.5` | `22H527` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.6` | `22H625` | `16.6` | `615.3.12.11.2` | `WebKit-7615.3.12.11.2` | `exact/tag` |
| `13.7.7` | `22H722` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
| `13.7.8` | `22H730` | `16.6` | `615.3.12.*` | `WebKit-7615.3.12.*` | `train` |
### macOS 14
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `14.0` | `23A344` | `17` | `616.1.27.211.1` | `WebKit-7616.1.27.211.1` | `exact/tag` |
| `14.1` | `23B2073`<br>`23B2077`<br>`23B74` | `17.1` | `616.2.9.11.7` | `WebKit-7616.2.9.11.7` | `exact/tag` |
| `14.1.1` | `23B2082`<br>`23B81` | `17.1` | `616.2.9.11.7` | `WebKit-7616.2.9.11.7` | `exact/tag` |
| `14.1.2` | `23B2091`<br>`23B92` | `17.1` | `616.2.9.*` | `WebKit-7616.2.9.*` | `train` |
| `14.2` | `23C64` | `17.2` | `617.1.17.*` | `WebKit-7617.1.17.*` | `train` |
| `14.2.1` | `23C71` | `17.2` | `617.1.17.*` | `WebKit-7617.1.17.*` | `train` |
| `14.3` | `23D2057`<br>`23D56` | `17.3` | `617.2.4.11.8` | `WebKit-7617.2.4.11.8` | `exact/tag` |
| `14.3.1` | `23D60` | `17.3` | `617.2.4.*` | `WebKit-7617.2.4.*` | `train` |
| `14.4` | `23E214` | `17.4` | `618.1.15.11.12` | `WebKit-7618.1.15.11.12` | `exact/tag` |
| `14.4.1` | `23E224` | `17.4` | `618.1.15.*` | `WebKit-7618.1.15.*` | `train` |
| `14.5` | `23F79` | `17.5` | `618.2.12.11.6` | `WebKit-7618.2.12.11.6` | `exact/tag` |
| `14.6` | `23G80` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.6.1` | `23G93` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7` | `23H124` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.1` | `23H222` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.2` | `23H311` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.3` | `23H417` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.4` | `23H420` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.5` | `23H527` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.6` | `23H626` | `17.6` | `618.3.11.11.5` | `WebKit-7618.3.11.11.5` | `exact/tag` |
| `14.7.7` | `23H723` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.7.8` | `23H730` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8` | `23J21` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.1` | `23J30` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.2` | `23J126` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.3` | `23J220` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.4` | `23J319` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.5` | `23J423` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.7` | `23J520` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.8` | `23J620` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
| `14.8.9` | `23J631` | `17.6` | `618.3.11.*` | `WebKit-7618.3.11.*` | `train` |
### macOS 15
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `15.0` | `24A335`<br>`24A8332` | `18` | `619.1.26.31.6` | `WebKit-7619.1.26.31.6` | `exact/tag` |
| `15.0.1` | `24A340`<br>`24A348` | `18` | `619.1.26.*` | `WebKit-7619.1.26.*` | `train` |
| `15.1` | `24B2082`<br>`24B2083`<br>`24B83` | `18.1` | `619.2.8.*` | `WebKit-7619.2.8.*` | `train` |
| `15.1.1` | `24B2091`<br>`24B91` | `18.1.1` | `619.2.8.11.12` | `WebKit-7619.2.8.11.12` | `exact/tag` |
| `15.2` | `24C101`<br>`24C103`<br>`24C2101`<br>`24C2103` | `18.2` | `620.1.16.11.8` | `WebKit-7620.1.16.11.8` | `exact/tag` |
| `15.3` | `24D2059`<br>`24D60` | `18.3` | `620.2.4.11.5` | `WebKit-7620.2.4.11.5` | `exact/tag` |
| `15.3.1` | `24D70` | `18.3` | `620.2.4.11.5` | `WebKit-7620.2.4.11.5` | `exact/tag` |
| `15.3.2` | `24D2082`<br>`24D81` | `18.3` | `620.2.4.*` | `WebKit-7620.2.4.*` | `train` |
| `15.4` | `24E248` | `18.4` | `621.1.15.*` | `WebKit-7621.1.15.*` | `train` |
| `15.4.1` | `24E263` | `18.4` | `621.1.15.*` | `WebKit-7621.1.15.*` | `train` |
| `15.5` | `24F74` | `18.5` | `621.2.5.*` | `WebKit-7621.2.5.*` | `train` |
| `15.6` | `24G84` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.6.1` | `24G90` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7` | `24G222` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.1` | `24G231` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.2` | `24G325` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.3` | `24G419` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.4` | `24G517` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.5` | `24G624` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.7` | `24G720` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.8` | `24G824` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.7.9` | `24G830` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.8` | `24H23` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
| `15.8.1` | `24H32` | `18.6` | `621.3.11.*` | `WebKit-7621.3.11.*` | `train` |
### macOS 26
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `26.0` | `25A354`<br>`25A8353` | `26` | `622.1.22.*` | `WebKit-7622.1.22.*` | `train` |
| `26.0.1` | `25A362`<br>`25A8364` | `26` | `622.1.22.*` | `WebKit-7622.1.22.*` | `train` |
| `26.1` | `25B78` | `26.1` | `622.2.11.*` | `WebKit-7622.2.11.*` | `train` |
| `26.2` | `25C2058`<br>`25C56` | `26.2` | `623.1.14.*` | `WebKit-7623.1.14.*` | `train` |
| `26.3` | `25D125`<br>`25D2125` | `26.3` | `623.2.7.*` | `WebKit-7623.2.7.*` | `train` |
| `26.3.1` | `25D2128` | `26.3` | `623.2.7.*` | `WebKit-7623.2.7.*` | `train` |
| `26.3.2` | `25D2140`<br>`25D2150` | `26.3` | `623.2.7.*` | `WebKit-7623.2.7.*` | `train` |
| `26.4` | `25E246` | `26.4` | `624.1.16.*` | `WebKit-7624.1.16.*` | `train` |
| `26.4.1` | `25E253` | `26.4` | `624.1.16.*` | `WebKit-7624.1.16.*` | `train` |
| `26.5` | `25F71` | `26.5` | `624.2.5.*` | `WebKit-7624.2.5.*` | `train` |
| `26.5.1` | `25F80` | `26.5` | `624.2.5.*` | `WebKit-7624.2.5.*` | `train` |
| `26.5.2` | `25F84` | `26.5` | `624.2.5.11.8` | `WebKit-7624.2.5.11.8 (candidate; tag not public)` | `exact/binary` |
| `26.6` | `25G72` | `26.6` | `624.4.5.11.5` | `WebKit-7624.4.5.11.5 (candidate; tag not public)` | `exact/binary` |
| `26.6.1` | `25G76` | `26.6` | `624.4.5.11.5` | `WebKit-7624.4.5.11.5 (candidate; tag not public)` | `exact/binary` |
| `26.6.2` | `25G83` | `26.6` | `624.5.1.11.3` | `WebKit-7624.5.1.11.3` | `exact/binary` |
| `26.7` | `25G229` | `26.6` | `624.5.1.*` | `WebKit-7624.5.1.*` | `train` |
| `26.7.1` | `25G241` | `26.6` | `624.5.1.*` | `WebKit-7624.5.1.*` | `train` |
### macOS 27
| OS version | Apple build(s) | Safari | WebKit `FULL_VERSION` | Source release | Evidence |
|---|---|---:|---:|---|---|
| `27.0` | `26A425`<br>`26A428` | `27` | `625.1.29.*` | `WebKit-7625.1.29.*` | `train` |
| `27.0.1` | `26A434` | `27` | `625.1.29.11.28` | `WebKit-7625.1.29.11.28 (candidate; tag not public)` | `exact/binary` |
## Binary mappings verified in Ravel
These rows are stronger than a release-name match because the OS build and Mach-O UUID are both known.
### macOS
| macOS | Build | WebKit UUID | `CFBundleVersion` | `FULL_VERSION` | | macOS | Build | WebKit UUID | `CFBundleVersion` | `FULL_VERSION` |
|---|---|---|---:|---:| |---|---|---|---:|---:|
| 26.5.2 | `25F84` | `49B21D99-8716-31B8-8686-71B287325F1D` | `21624.2.5.11.8` | `624.2.5.11.8` | | `26.5.2` | `25F84` | `49B21D99-8716-31B8-8686-71B287325F1D` | `21624.2.5.11.8` | `624.2.5.11.8` |
| 26.6 | `25G72` | `B090AABF-9A3B-3110-9DA9-F0F40FCEC972` | `21624.4.5.11.5` | `624.4.5.11.5` | | `26.6` | `25G72` | `B090AABF-9A3B-3110-9DA9-F0F40FCEC972` | `21624.4.5.11.5` | `624.4.5.11.5` |
| 26.6.1 | `25G76` | `B090AABF-9A3B-3110-9DA9-F0F40FCEC972` | `21624.4.5.11.5` | `624.4.5.11.5` | | `26.6.1` | `25G76` | `B090AABF-9A3B-3110-9DA9-F0F40FCEC972` | `21624.4.5.11.5` | `624.4.5.11.5` |
| 26.6.2 | `25G83` | `844AF253-CAF6-3623-9DAD-A055C5274E62` | `21624.5.1.11.3` | `624.5.1.11.3` | | `26.6.2` | `25G83` | `844AF253-CAF6-3623-9DAD-A055C5274E62` | `21624.5.1.11.3` | `624.5.1.11.3` |
| 27.0.1 | `26A434` | `70BEE322-37EE-3B22-8012-4F76BA105C29` | `22625.1.29.11.28` | `625.1.29.11.28` | | `27.0.1` | `26A434` | `70BEE322-37EE-3B22-8012-4F76BA105C29` | `22625.1.29.11.28` | `625.1.29.11.28` |
| 27.2 beta | `26B5086k` | `6F6AB57E-1492-3950-9962-85B6AFD430A3` | `22625.2.4.1` | `625.2.4.1` |
| 27.2 beta 2 | `26B5091g` | `56B4AA44-CB66-3641-8B22-723C39B5BC6E` | `22625.2.5.11.1` | `625.2.5.11.1` |
| 27.2 beta 3 | `26B5101f` | `B32D7081-AE42-3A2E-ACBB-CF4D4BE4F296` | `22625.2.7.1` | `625.2.7.1` |
macOS 26.6 and 26.6.1 contain the same WebKit binary: both UUID and `CFBundleVersion` match. ### iOS
### iOS examples Ravel exposes the binary UUID for these iOS dyld caches, but not the framework `Info.plist`. The `CFBundleVersion` must be captured at runtime before the source mapping can be called exact.
Ravel identifies iOS WebKit binaries and UUIDs, but its dyld-cache page does not expose the framework `Info.plist` value. Read `CFBundleVersion` at runtime or from an extracted IPSW before claiming an exact source release.
| iOS | Build | WebKit UUID | | iOS | Build | WebKit UUID |
|---|---|---| |---|---|---|
| 26.6 | `23G71` | `7627FDAB-129E-32BB-A2AC-F0DC02853D4E` | | `26.6` | `23G71` | `7627FDAB-129E-32BB-A2AC-F0DC02853D4E` |
| 26.6.1 | `23G83` | `C39BD22C-3475-38AF-91BD-0B7574081011` | | `26.6.1` | `23G83` | `C39BD22C-3475-38AF-91BD-0B7574081011` |
| 26.6.2 | `23G90` | `C39BD22C-3475-38AF-91BD-0B7574081011` | | `26.6.2` | `23G90` | `C39BD22C-3475-38AF-91BD-0B7574081011` |
| 27.0.1 | `24A446` | `D12A79A6-98CB-323C-8F72-613AD0983BBC` | | `27.0.1` | `24A446` | `D12A79A6-98CB-323C-8F72-613AD0983BBC` |
| 27.2 beta | `24B5084k` | `1FD67A57-D91B-3B26-9F4F-91AB8299B6E7` |
| 27.2 beta 2 | `24B5089g` | `509D51AD-2CF9-3982-BFD5-81221D1B903D` |
| 27.2 beta 3 | `24B5099f` | `0566BF55-2DC4-34F6-B211-96FFAA0A37A4` |
iOS 26.6.1 and 26.6.2 contain the same WebKit binary UUID. ## Current 27.2 beta builds
## Exact mapping procedure | Platform | OS build | WebKit UUID | `FULL_VERSION` | Evidence |
|---|---|---|---:|---|
| macOS 27.2 beta | `26B5086k` | `6F6AB57E-1492-3950-9962-85B6AFD430A3` | `625.2.4.1` | Ravel binary |
| macOS 27.2 beta 2 | `26B5091g` | `56B4AA44-CB66-3641-8B22-723C39B5BC6E` | `625.2.5.11.1` | Ravel binary |
| macOS 27.2 beta 3 | `26B5101f` | `B32D7081-AE42-3A2E-ACBB-CF4D4BE4F296` | `625.2.7.1` | Ravel binary |
| iOS 27.2 beta | `24B5084k` | `1FD67A57-D91B-3B26-9F4F-91AB8299B6E7` | unknown | UUID only |
| iOS 27.2 beta 2 | `24B5089g` | `509D51AD-2CF9-3982-BFD5-81221D1B903D` | unknown | UUID only |
| iOS 27.2 beta 3 | `24B5099f` | `0566BF55-2DC4-34F6-B211-96FFAA0A37A4` | unknown | UUID only |
### 1. Read the OS build and WebKit UUID ## Exact lookup procedure
From an Apple crash report, record the OS version/build and the WebKit image UUID. Compare UUIDs without case or dashes, and match the architecture. 1. Read the OS build and WebKit image UUID from the crash report.
2. Open that build in Ravel and verify the same UUID and architecture.
```bash 3. Read `CFBundleVersion` from `Bundle(for: WKWebView.self)`.
rg 'OS Version:|WebKit.*<' crash-report.crash 4. Remove the platform prefix to obtain `FULL_VERSION`.
``` 5. Resolve the source tag and inspect the released code.
### 2. Find the binary in Ravel
Use the OS build and the correct binary path:
```text
macOS: /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit
iOS: /System/Library/Frameworks/WebKit.framework/WebKit
```
Ravel URL pattern:
```text
https://ravel.dbg.re/binary?build=<OS_BUILD>&domain=dyld_cache&path=<URL_ENCODED_BINARY_PATH>
```
The Ravel UUID must equal the crash-report UUID. A matching version string without a matching UUID is weaker evidence.
### 3. Read `CFBundleVersion`
From app code on either platform:
```swift ```swift
import WebKit import WebKit
@@ -152,148 +405,36 @@ let webKitBundleVersion = Bundle(for: WKWebView.self)
.object(forInfoDictionaryKey: "CFBundleVersion") as? String .object(forInfoDictionaryKey: "CFBundleVersion") as? String
``` ```
On macOS, it can also be read without app changes: Ravel paths:
```bash
defaults read /System/Library/Frameworks/WebKit.framework/Resources/Info CFBundleVersion
```
For iOS, log the runtime value on a test device or include it in crash/pixel metadata. Do not infer an exact iOS value from the same-numbered macOS release.
### 4. Remove `SYSTEM_VERSION_PREFIX`
Apple production builds concatenate the prefix and the WebKit version:
```text ```text
CFBundleVersion = SYSTEM_VERSION_PREFIX + FULL_VERSION macOS: /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit
iOS: /System/Library/Frameworks/WebKit.framework/WebKit
``` ```
| Platform | OS | Prefix | Modern source tags use `WebKit-7<FULL_VERSION>`. The 612 and early 613 trains use `Safari-<FULL_VERSION>`.
|---|---|---:|
| iOS | All supported versions | `8` |
| macOS | 12 | `17` |
| macOS | 13 | `18` |
| macOS | 14 | `19` |
| macOS | 15 | `20` |
| macOS | 26 | `21` |
| macOS | 27 | `22` |
Example:
```text
22625.1.29.11.28 - prefix 22 -> 625.1.29.11.28
```
### 5. Resolve the public source release
For modern release trains, candidate tags use:
```text
WebKit-7<FULL_VERSION>
```
Example:
```text
625.1.29.11.28 -> WebKit-7625.1.29.11.28
```
The 612 train is an older naming exception:
```text
612.1.27.* -> Safari-612.1.27.*
```
Check exact public tags and release branches:
```bash
git ls-remote --tags https://github.com/WebKit/WebKit.git 'WebKit-7625.1.29*'
git ls-remote --heads https://github.com/WebKit/WebKit.git 'safari-7625*'
```
An adjacent tag is only a bound, not an exact match. Apple may publish a binary before publishing the corresponding source tag.
### 6. Verify the fix in released source
Inspect the changed code in the candidate tag. This is stronger than checking one commit SHA because Apple may cherry-pick the change under a different SHA.
For the certificate-info crash discussed below:
```bash
git show <TAG>:Source/WebKit/UIProcess/WebFrameProxy.h \
| rg 'commitCertificateInfo'
```
Old signature:
```cpp
void commitCertificateInfo(const URL&);
```
Fixed signature from `318982@main`:
```cpp
void commitCertificateInfo(const URL&, bool hasCertificateInfo);
```
### 7. When the exact source tag is unavailable
Record the evidence level explicitly:
1. UUID + `CFBundleVersion`: exact binary and release version are known.
2. Symbols or disassembly: a specific ABI or behavior can be proven in the binary.
3. Reproduction on the exact OS build: the bug can be proven present or absent.
Safari Technology Preview is a separate build. Its version does not prove the version of system WebKit.
## Current certificate-info crash ## Current certificate-info crash
The crash on macOS 27.0.1 maps as follows: | Field | Value |
|---|---|
| macOS | `27.0.1 (26A434)` |
| Crash/Ravel UUID | `70BEE322-37EE-3B22-8012-4F76BA105C29` |
| `CFBundleVersion` | `22625.1.29.11.28` |
| `FULL_VERSION` | `625.1.29.11.28` |
| Candidate source tag | `WebKit-7625.1.29.11.28` — not public as of 2026-10-06 |
| Result | The shipped binary has the old one-argument `commitCertificateInfo` ABI; the fix is absent. |
```text The fix landed in `318982@main`. macOS 27.2 is a candidate for the first fixed system release, but public `WebKit-7625.2.*` source tags are not available yet.
macOS: 27.0.1 (26A434)
Crash UUID: 70BEE322-37EE-3B22-8012-4F76BA105C29
Ravel UUID: 70BEE322-37EE-3B22-8012-4F76BA105C29
CFBundleVersion: 22625.1.29.11.28
Prefix: 22
FULL_VERSION: 625.1.29.11.28
Candidate tag: WebKit-7625.1.29.11.28
```
The exact `.11.28` source tag is not public as of 2026-10-06; `.11.27` is public. The crash symbol and the `WebKit-7625.1.29` source family both show the old one-argument signature. Therefore the fix is absent from macOS 27.0.1. ## Data sources and maintenance
Ravel identifies macOS 27.2 beta binaries as `625.2.4.1`, `625.2.5.11.1`, and `625.2.7.1`. Public `WebKit-7625.2.*` tags are not available as of 2026-10-06. The fix landed in `318982@main` and Safari Technology Preview 251, so macOS 27.2 is a candidate for the first fixed system release, but source inclusion is not yet proven. - [AppleDB OS/build catalogue](https://api.appledb.dev/ios/main.json)
- [WebKit source and public tags](https://github.com/WebKit/WebKit)
## DuckDuckGo telemetry gap - [WebKit `Version.xcconfig`](https://github.com/WebKit/WebKit/blob/main/Configurations/Version.xcconfig)
- [MDN Safari/WebKit release metadata](https://github.com/mdn/browser-compat-data/blob/main/browsers/safari.json)
Current pixels do not include the exact system WebKit `CFBundleVersion`. The HTTP User-Agent cannot fill this gap because Apple returns the frozen `AppleWebKit/605.1.15` compatibility token.
Add one field to relevant crash and WebKit failure telemetry:
```text
webkit_build=22625.1.29.11.28
```
Populate it from `Bundle(for: WKWebView.self).CFBundleVersion`. This makes OS-build-to-WebKit correlation deterministic on both macOS and iOS.
## Sources
- [WebKit source repository](https://github.com/WebKit/WebKit)
- [Current WebKit version configuration](https://github.com/WebKit/WebKit/blob/main/Configurations/Version.xcconfig)
- [Safari 15 / WebKit 612 version configuration](https://chromium.googlesource.com/external/github.com/WebKit/webkit/+/refs/tags/Safari-612.1.27/Source/WebKit/Configurations/Version.xcconfig)
- [Safari 16 / WebKit 614 version configuration](https://chromium.googlesource.com/external/github.com/WebKit/webkit/+/refs/tags/WebKit-7614.1.25/Source/WebKit/Configurations/Version.xcconfig)
- [Safari 17 / WebKit 616 version configuration](https://github.com/WebKit/WebKit/blob/WebKit-7616.1.27/Configurations/Version.xcconfig)
- [Safari 27 / WebKit 625 version configuration](https://github.com/WebKit/WebKit/blob/WebKit-7625.1.29/Configurations/Version.xcconfig)
- [Ravel binary catalogue](https://ravel.dbg.re/browse) - [Ravel binary catalogue](https://ravel.dbg.re/browse)
- [MDN Safari release metadata](https://github.com/mdn/browser-compat-data/blob/main/browsers/safari.json)
- [Safari release notes](https://developer.apple.com/documentation/safari-release-notes)
- [WebKit commit 318982@main](https://commits.webkit.org/318982@main) - [WebKit commit 318982@main](https://commits.webkit.org/318982@main)
- [Safari Technology Preview 251](https://webkit.org/blog/18194/release-notes-for-safari-technology-preview-251/) - DuckDuckGo Apple browsers deployment targets: `macOS/Configuration/Common.xcconfig` and `iOS/DuckDuckGo-iOS.xcodeproj/project.pbxproj`
## Limits To update this document, add new stable OS rows first. Use an OS-specific `releases/Apple/Safari-…` tag when available; otherwise record only the release train and keep the `.*` marker.
- One OS major contains multiple WebKit updates; use the exact OS build for conclusions.
- Ravel is in beta and does not index every historical Apple build.
- Intel and Apple Silicon binaries may have different UUIDs.
- An exact public tag may appear after Apple ships the binary.
- Verify released code, not only commit ancestry, because fixes can be cherry-picked.