Настоящий Liquid Glass, как у системного HUD на macOS 26, через приватные API
vientooscuro 15 минут назад Настоящий Liquid Glass, как у системного HUD на macOS 26, через приватные API Средний 14 мин 337 macOS * Swift * Реверс-инжиниринг * Кейс Я хотел сделать маленькую OSD-панель яркости на macOS...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Значимый прорыв формирует отрасль ИИ: vientooscuro 15 минут назад Настоящий Liquid Glass, как у системного HUD на macOS 26, через приватные API Средний 14 мин 337 macOS * Swift * Реверс-инжиниринг * Кейс Я хотел сделать маленькую OSD-панель яркости на macOS так, чтобы она выглядела как системный HUD: не просто полупрозрачная плашка поверх обоев, а нормальное стекло, через которое видно и немного преломляется рабочий стол. По дороге выяснилось неприятное: SwiftUI . glassEffect для такой задачи не подходит вообще, публичный NSGlassEffectView даёт только половину результата, а вид, близкий к системному HUD, появляется уже после ковыряния приватного CAFilter glassBackground.
В итоге App-Store-safe способа получить именно такой эффект я не нашёл, скорее всего его и нет. Ниже — весь путь, с кодом, ошибками и местами, где я сам сначала чинил не то. Финальный вариант держится на приватных штуках Core Animation: CABackdropLayer, CAFilter, селектор set_variant:, имена входов фильтра.
Технические детали
Публичной документации на CAFilter и CABackdropLayer нет. Я разбирал их через дамп дерева слоёв на живой macOS 26, то есть ровно тем способом, после которого надо самому отвечать за хрупкость результата. В Mac App Store такое почти наверняка завернут на ревью, тем не менее, пара моих приложений успешно ревью проходили, да и Telegram держится на том же самом (его исходники есть на github).
Я пишу Lumen — menubar-контрол яркости для macOS, вдохновился я проектом Lunar, только он требует оплатить, а обходить каждые 2 недели это мне надоело, тем более что в Lunar есть некоторые моменты, которые меня не устраивают. Кроме собственно управления подсветкой там есть transient OSD: меняешь яркость, в правом верхнем углу всплывает карточка с именем дисплея и слайдером, через пару секунд исчезает. По поведению — как системный HUD громкости или яркости.
И мне хотелось, чтобы визуально он тоже был таким же: рабочий стол под ним виден, фон читается, стекло не превращается в серую плитку. Проверял всё на macOS 27 beta 1/2. У приватных ключей нет контракта на стабильность, так что в следующих бетах или релизах имена могут уехать, но на моей памяти такое случалось только с клавиатурой в iOS.
Отраслевые последствия
Итоговый результатПервая попытка: SwiftUI . glassEffectНачал я, конечно, с самого очевидного. В macOS 26 есть SwiftUI-стекло, значит делаем модификатор и используем его как фон карточки.
Для систем младше 26 – обычный fallback на . ultraThinMaterial:// GlassBackground. swift:5-36 struct LiquidGlass: ViewModifier { var cornerRadius: CGFloat = 22 var tint: Color?
= nil func body(content: Content) -> some View { if #available(macOS 26. glassEffect( glass(), in: RoundedRectangle(cornerRadius: cornerRadius, style: . continuous) ) } } @available(macOS 26.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





