Files
obsidian-vault/work/notes/webkit-macos-version-mapping.md
T

12 KiB
Executable File
Raw Blame History

title, tags, created, updated, sources
title tags created updated sources
WebKit release ↔ macOS build mapping
webkit
safari
macos
crash
ravel
reference
2026-10-06 2026-10-06
~/Downloads/WebKit_sparse
https://ravel.dbg.re
https://github.com/mdn/browser-compat-data/blob/main/browsers/safari.json

WebKit release ↔ macOS build mapping

Коротко

DuckDuckGo поддерживает macOS 12.3+ (main/macOS/Configuration/Common.xcconfig).

Точное соответствие строится для конкретного macOS build, а не только для major/minor:

macOS version + build
  → UUID WebKit из crash log
  → тот же UUID в Ravel
  → CFBundleVersion системного WebKit
  → убрать macOS SYSTEM_VERSION_PREFIX
  → FULL_VERSION WebKit
  → найти WebKit source tag/branch
  → проверить нужный commit или изменение кода

Если точный source tag ещё не опубликован, соответствие заканчивается на версии бинарника. Наличие конкретного source fix тогда нельзя доказать одним номером версии.

Не путать версии

Значение Пример Назначение
macOS version 27.0.1 Marketing version
macOS build 26A434 Точная сборка ОС; ключ для Ravel
Mach-O UUID 70BEE322-… Точная идентичность бинарника WebKit
WebKit CFBundleVersion 22625.1.29.11.28 Версия системного framework
SYSTEM_VERSION_PREFIX 22 Префикс, зависящий от macOS major
WebKit FULL_VERSION 625.1.29.11.28 Версия release train без системного префикса
WebKit source tag WebKit-7625.1.29.11.28 Ожидаемое имя тега исходников
HTTP User-Agent AppleWebKit/605.1.15 Заморожен; для маппинга непригоден

Базовые release-линейки macOS 12+

Это соответствие GA macOS major → Safari major → базовая WebKit-линейка. Оно не заменяет проверку конкретного macOS build: Safari/WebKit обновляется внутри одного macOS major.

macOS Минимум DDG Prefix Safari GA WebKit base Production bundle base Expected source-tag family
12 Monterey 12.3 17 15 612.1.27 17612.1.27 WebKit-7612.1.27.*
13 Ventura да 18 16 614.1.25 18614.1.25 WebKit-7614.1.25.*
14 Sonoma да 19 17 616.1.27 19616.1.27 WebKit-7616.1.27.*
15 Sequoia да 20 18 619.1.26 20619.1.26 WebKit-7619.1.26.*
26 Tahoe да 21 26 622.1.22 21622.1.22 WebKit-7622.1.22.*
27 Golden Gate да 22 27 625.1.29 22625.1.29 WebKit-7625.1.29.*
27.2 beta да 22 27.2 625.2.4 22625.2.4 ожидается WebKit-7625.2.4.*

Источники базовых версий: MDN browsers/safari.json и Apple Safari release notes. Prefix 12–14 подтверждается Configurations/Version.xcconfig в WebKit-7616.1.27; prefix 15–30 — текущим Configurations/Version.xcconfig.

Точные сборки, проверенные через Ravel

Ravel сейчас индексирует не все исторические macOS. Отсутствие записи означает пробел покрытия Ravel, а не отсутствие WebKit в macOS.

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.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.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.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

Пример показывает, почему нужен UUID: macOS 26.6 и 26.6.1 используют один и тот же WebKit binary — совпадают и UUID, и CFBundleVersion.

Полная методика

1. Извлечь macOS build и UUID из crash log

rg 'OS Version:|WebKit \(arm64e\)' <file.crash>

Нужны:

OS Version: macOS 27.0.1 (26A434)
WebKit (arm64e) <70BEE322-37EE-3B22-8012-4F76BA105C29>

UUID сравнивать без учёта регистра и дефисов. Для Intel и Apple Silicon UUID могут различаться; архитектура должна совпадать.

2. Найти тот же бинарник в Ravel

Искать путь:

/System/Library/Frameworks/WebKit.framework/Versions/A/WebKit

URL-шаблон:

https://ravel.dbg.re/binary?build=<MACOS_BUILD>&domain=dyld_cache&path=%2FSystem%2FLibrary%2FFrameworks%2FWebKit.framework%2FVersions%2FA%2FWebKit

Проверить в Binary metadata and fingerprint:

  1. macOS build;
  2. архитектуру;
  3. UUID — должен совпасть с crash log.

В Quick search искать начало bundle version: 17, 18, 19, 20, 21 или 22. В restricted strings находится полный номер вроде 22625.1.29.11.28.

3. Получить версию непосредственно на Mac

sw_vers
defaults read /System/Library/Frameworks/WebKit.framework/Resources/Info CFBundleVersion

Из приложения:

let webKitBundleVersion = Bundle(for: WKWebView.self)
    .object(forInfoDictionaryKey: "CFBundleVersion") as? String

Это проверено на macOS 26.7.1: возвращается 21624.5.1.11.3.

4. Убрать системный prefix

Production WebKit собирает номер так:

CFBundleVersion = SYSTEM_VERSION_PREFIX + FULL_VERSION
macOS Prefix
12 17
13 18
14 19
15 20
16 / 26 21
27 22
28 23
29 24
30 25

Пример:

22625.1.29.11.28 - prefix 22 = 625.1.29.11.28

5. Построить имя source tag

Современные Apple release tags обычно называются:

WebKit-7<FULL_VERSION>

Пример:

FULL_VERSION: 625.1.29.11.28
candidate tag: WebKit-7625.1.29.11.28

Проверить точный тег:

git ls-remote --tags origin \
  'WebKit-7625.1.29.11.28' \
  'WebKit-7625.1.29.11.28^{}'

Если точного тега нет, найти опубликованную семью:

git ls-remote --tags origin 'WebKit-7625.1.29*'
git ls-remote --heads origin 'safari-7625*'

Отсутствующий exact tag нельзя заменять ближайшим и считать точным соответствием. Ближайший тег даёт только нижнюю или верхнюю границу.

6. Проверить наличие fix в source release

Надёжнее проверять изменённый код, а не только ancestry: Apple может cherry-pick fix с другим commit SHA.

Для текущего бага:

git show <TAG>:Source/WebKit/UIProcess/WebFrameProxy.h \
  | rg 'commitCertificateInfo'

Старая версия:

void commitCertificateInfo(const URL&);

Исправленная версия (318982@main):

void commitCertificateInfo(const URL&, bool hasCertificateInfo);

Дополнительно искать bug id и commit message:

git log <TAG> --grep='321456'
git log <TAG> --grep='Send bool indicating presence of CertificateInfo'

7. Если exact source tag отсутствует

Остаются три уровня доказательства:

  1. точный UUID + CFBundleVersion — доказана версия бинарника;
  2. символ crash stack или disassembly — можно доказать конкретную сигнатуру/поведение бинарника;
  3. воспроизведение теста на нужном macOS build — можно доказать наличие или отсутствие бага.

Версия STP не доказывает версию системного WebKit: Safari Technology Preview — отдельная сборка.

Текущий баг: результат сопоставления

macOS 27.0.1

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
Expected tag:    WebKit-7625.1.29.11.28

Exact tag .11.28 публично не найден; опубликована .11.27. Базовая ветка WebKit-7625.1.29 содержит старую одноаргументную сигнатуру. Crash stack также показывает:

WebKit::WebFrameProxy::commitCertificateInfo(WTF::URL const&)

Вывод: в macOS 27.0.1 fix отсутствует.

macOS 27.2 beta

Ravel подтверждает бинарные версии 625.2.4.1, 625.2.5.11.1 и 625.2.7.1 для beta 1–3. Публичных WebKit-7625.2.* tags/branches пока нет.

Fix 318982@main вошёл в STP 251, но это не доказывает его inclusion в системный WebKit macOS 27.2.

Вывод: macOS 27.2 — сильный кандидат на первую исправленную версию, но source inclusion пока не доказан.

Телеметрия DuckDuckGo

Текущие pixels не отправляют точный CFBundleVersion WebKit. HTTP UA использовать нельзя: WebKit намеренно возвращает замороженный AppleWebKit/605.1.15.

Для корреляции crash/pixel с таблицей выше нужен параметр:

webkit_build=22625.1.29.11.28

Получать его через Bundle(for: WKWebView.self).CFBundleVersion, а не через WebKitVersionProvider, который парсит замороженный UA.

Источники

Ограничения

  • Ravel находится в beta и имеет неполное покрытие.
  • Один macOS major содержит много Safari/WebKit updates; базовая таблица не заменяет lookup конкретного build.
  • Совпадение версии без UUID слабее, чем совпадение версии и UUID.
  • Exact tag может быть опубликован позже бинарника Apple.
  • Cherry-pick может иметь другой SHA; проверять итоговый код в release tag.