Сначала выберите пайплайн
Это решение определяет всё остальное. «Макет» через Claude бывает четырёх разных сортов, и они не взаимозаменяемы.
| Пайплайн | Что на выходе | Когда брать | Чем платите |
|---|---|---|---|
| A · Figma через MCP use_figma |
Живые фреймы с auto-layout, инстансами компонентов, переменными и режимами light/dark | Есть дизайн-система или подключена Apple-библиотека; макет будут править руками; нужен хендофф | Медленно, много вызовов, требует дисциплины «одна секция за вызов» |
| B · HTML-артефакт Artifacts |
Кликабельный однофайловый прототип в iPhone-фрейме | Быстрая проверка идеи, демо заказчику, 5–15 экранов за вечер, любые состояния | Это не Figma: дизайнеру потом переносить; браузер ≠ UIKit |
| C · SwiftUI + скриншот-луп Xcode |
Настоящий экран приложения, который сам себе макет | Есть Xcode-проект; нужен честный рендер системных контролов и Liquid Glass | Claude плохо «видит» отступы и шрифты — пиксель-перфект не берёт |
| D · Claude Design / Figma Make prompt-to-UI |
Прототип из промпта с правкой слайдерами и инлайн-комментариями | Нулевая стадия, разведка вариантов, презентация | Меньше контроля над структурой; выход надо потом причёсывать |
Комбинация, которая работает лучше всего: B → A. Сначала HTML-прототип (дёшево, быстро, видно все состояния), потом перенос в Figma компонентами дизайн-системы. Официальный скилл figma-generate-design прямо описывает параллельный режим: use_figma строит правильную структуру из инстансов, а generate_figma_design захватывает пиксель-перфектный скриншот в тот же файл как эталон — после сверки капчур удаляется.
Ключевое ограничение
Плагинный API use_figma не умеет тянуть картинки по URL. Если в макете есть фото/аватары/растровые ассеты — параллельный захват через generate_figma_design обязателен: он растрирует изображения в файл, и оттуда вы копируете imageHash в свои фреймы. Пропустите — получите пустые плейсхолдеры.
Фундамент: три вещи, без которых будет слоп
Причина генеричных макетов не в модели, а в брифе. Открытый промпт заставляет угадывать вкус, вёрстку и код одновременно — и модель разрешает эту неопределённость самым вероятным ответом.
1. Файл-ограничитель IOS26-DESIGN.md
Без постоянного файла агент заново угадывает токены на каждом промпте, и макеты дрейфуют. Правильный порядок разделов — от общего к запретам:
Бриф2–3 предложения до единого токена: что продукт делает, кто им пользуется, какую работу выполняет экран.
ТокеныФормат «значение + намерение + граница»: не «accent: #0A6CFF», а «accent — только CTA и активные состояния, никогда как фон».
ТипографикаШкала плюс логика выбора: когда какой уровень и чем он быть не может.
КомпонентыНе внешний вид, а решение: когда карточка, а когда строка списка.
Don'ts — последнимВосемь хорошо выбранных запретов предотвращают больше плохого вывода, чем удвоение раздела токенов.
Рабочий объём — 200–600 строк. Больше — выносите в отдельный DESIGN.md и ссылайтесь из CLAUDE.md. Диагностический цикл: сгенерировать три экрана → найти отклонения → дописать недостающее ограничение → повторить.
2. Референсы картинками, а не прилагательными
«Clean and modern» сообщает модели «у меня нет предпочтений» — и она отвечает самым безопасным выводом: синий primary, дефолтный гротеск, нулевая индивидуальность. Картинка бьёт прозу: скриншоты реальных iOS-приложений (Things, Flighty, Bear, Apple Sports) кладутся в контекст и превращаются в правила и токены.
3. Официальные ресурсы Apple, а не пересказ
- iOS and iPadOS 26 UI Kit для Figma — обновлён 24 июля 2026, переработан под Liquid Glass: компоненты, обновлённые размеры контролов, новые радиусы и системные цвета. Есть в Figma Community и на developer.apple.com/design/resources.
- SF Symbols — 7000+ символов, 9 весов, 3 шкалы, выравниваются по тексту. Ставьте свежую версию до работы с библиотекой.
- Icon Composer — иконка приложения теперь в трёх версиях (light / dark / mono), 1024×1024, непрозрачная, без своих скруглений: систему радиуса применяет iOS.
Спека iOS 26 в числах
Это тот блок, который надо целиком положить в контекст Claude. Числа в points (pt); экспорт для всех современных iPhone — @3x.
Размеры фреймов
| Устройство | Фрейм, pt | Масштаб |
|---|---|---|
| iPhone 17 Pro Max, 16 Pro Max | 440 × 956 | @3x |
| iPhone Air | 420 × 912 | @3x |
| 16 Plus, 15 Plus, 15 Pro Max, 14 Pro Max | 430 × 932 | @3x |
| iPhone 17, 17 Pro, 16 Pro | 402 × 874 | @3x |
| 16, 15 Pro, 15, 14 Pro | 393 × 852 | @3x |
| 16e, 14, 13, 13 Pro, 12, 12 Pro | 390 × 844 | @3x |
| 13 mini, 12 mini, 11 Pro, X, XS | 375 × 812 | @3x |
Рисуйте на 393×852 (самая массовая ширина) и проверяйте на 375 и 440. Safe area на устройствах с Dynamic Island: сверху 59, снизу 34; в ландшафте — сверху 0, снизу 21, по бокам 59. Статус-бар — 54.
Сетка, поля, размеры
| Что | Значение | Комментарий |
|---|---|---|
| Шаг сетки | 8 pt | шкала 4 / 8 / 12 / 16 / 24 / 32 / 48 |
| Поля экрана, iPhone | 16 pt | iPad — 20 pt |
| Внутренний паддинг карточки | 16 pt | между соседними карточками — 24 |
| Минимальный тач-таргет | 44 × 44 pt | жёсткое правило HIG, без исключений |
| Строка списка / поле ввода | 44 pt | строка с подзаголовком — 60 pt |
| Нав-бар (тулбар) | 44 pt | + safe area сверху |
| Таб-бар | 49 pt | + safe area; в iOS 26 плавает, инсет 21 pt |
| Иконка в таб-баре | 28 × 28 pt | зазор до подписи — 4 pt |
| Разделитель | 1 pt | у последней строки секции отсутствует |
| Зазор иконка↔текст | 4 pt | между полями формы — 16, между секциями — 32 |
Типографика — SF Pro, стили Dynamic Type
Значения для дефолтного размера (Large). Никогда не задавайте «просто 17px» — задавайте стиль: он масштабируется настройками пользователя от xSmall до AX5.
| Стиль | Размер | Вес | Где |
|---|---|---|---|
| Large Title | 34 | Regular / Bold | крупный заголовок экрана до скролла |
| Title 1 | 28 | Regular | заголовок секции |
| Title 2 | 22 | Regular | |
| Title 3 | 20 | Regular | |
| Headline | 17 | Semibold | компактный заголовок нав-бара, акцент в строке |
| Body | 17 | Regular | основной текст, строки списка |
| Callout | 16 | Regular | |
| Subheadline | 15 | Regular | вторичный текст |
| Footnote | 13 | Regular | третичный текст, подписи |
| Caption 1 | 12 | Regular | |
| Caption 2 | 11 | Regular | подписи таб-бара; абсолютный минимум |
Цвет: роли, а не хексы
Apple отдаёт адаптивные системные цвета, а не фиксированные значения. Если в макете стоит хекс — макет сломается в тёмной теме и при Increase Contrast. Пишите роли и заводите их как переменные с двумя режимами:
| SwiftUI | Переменная в Figma | Роль |
|---|---|---|
Color(.systemBackground) | background/primary | основной фон |
Color(.secondarySystemBackground) | background/secondary | подложка группы |
Color.primary / .label | label/primary | основной текст |
Color.secondary | label/secondary | вторичный текст |
Color(.tertiaryLabel) | label/tertiary | плейсхолдеры |
Color(.separator) | separator/non-opaque | разделители |
Color(.quaternarySystemFill) | fill/quaternary | заливка контролов |
Color.accentColor | accent/primary | бренд-тинт |
Ориентиры системных значений (community-measured, не официальные): systemBlue #007AFF, systemGreen #34C759, systemRed #FF3B30, secondaryLabel #3C3C43 @ 60%, в тёмной — #EBEBF5 @ 70%. Использовать как отправную точку, а не как истину.
Что изменилось в iOS 26 (кроме стекла)
Половина «неправильных» AI-макетов — это корректный iOS 17, нарисованный в 2026 году. Список изменений, которые надо явно вписать в промпт.
- Таб-бар плавает. Больше не полоса во всю ширину, а капсула по центру с инсетом 21 pt. Глобальный поиск — отдельный «островок» справа от неё; в приложениях без таб-бара поиск уезжает вниз экрана. Поиск внутри страницы (не глобальный) остаётся сверху.
- Нав-бары называются тулбарами и не занимают место: контент скроллится под ними. Заголовки можно выравнивать по левому краю, появились подзаголовки (
.navigationSubtitle). - Текстовые кнопки заменены иконочными. Back, close/cancel, save/done стандартизированы под иконки в контейнере с собственным полем вокруг.
- Концентричность радиусов. Радиус вложенного элемента вычисляется из радиуса родителя минус паддинг — так же, как радиус Dynamic Island повторяет радиус корпуса. В коде это
ConcentricRectangleи.containerShape; в макете — не ставьте вложенной карточке тот же радиус, что и контейнеру. - Всё круглее и просторнее: шиты, строки списков, кнопки, сегментные контролы; отступы выросли под увеличенные скругления.
- Scroll edge effect — постепенное размытие у верхней и нижней кромки, чтобы плавающие элементы читались поверх контента. Это системная вещь, рисовать градиент руками не надо.
- Заголовки списков — из ВЕРХНЕГО РЕГИСТРА в обычное предложение, крупнее. Текст алертов и онбординговых шитов — по левому краю.
- Модалки: полноэкранные больше не образуют визуальный «стек», если слоёв не несколько. Action sheet появляется в точке касания, а не всегда снизу.
Liquid Glass: правила, а не эффект
Apple формулирует три принципа — Hierarchy, Harmony, Consistency. Стекло — это слой над контентом, а не текстура для украшения.
Делать
- Стекло — только на плавающем слое контролов: тулбар, таб-бар, важные кнопки действия.
- Один слой стекла. Верхние элементы поверх — заливками, прозрачностью и vibrancy.
- Текст — всегда на плотной подложке, не прямо на стекле.
- Отдавать фон системе: убирать кастомные подложки у системных контролов.
- Проверять Reduce Transparency, Increase Contrast, Reduce Motion — системные компоненты адаптируются сами.
- Контраст: 4.5:1 для текста, 3:1 для иконок и индикаторов состояния — в обеих темах.
Не делать
- Не стекать стекло на стекло — перекрывающиеся полупрозрачные слои убивают иерархию.
- Не смешивать варианты Regular и Clear: у Clear три условия — медийный фон, не страдающий слой контента и яркий контент сверху.
- Не класть стекло поверх «шумной» фотографии без затемнения.
- Не покрывать стеклом весь интерфейс — только самые важные функциональные элементы.
- Не рисовать своё размытие поверх системного scroll edge effect.
- Не делать кастомные контролы там, где системный даёт бесплатную адаптацию к accessibility.
Практический критерий для ревью макета: если убрать всё стекло, иерархия должна остаться читаемой. Стекло усиливает разделение слоёв — оно его не создаёт.
Пайплайн A · Макет в Figma руками Claude
Порядок ниже — из официальных скиллов Figma MCP figma-swiftui, figma-generate-design и figma-use. Нарушение порядка — главная причина кривых результатов.
Шаг 0 · Определить масштаб
| Что переносим | Что получается в Figma | Какой скилл грузить |
|---|---|---|
| Один контрол / карточку / строку | Компонент или набор вариантов | figma-generate-library |
| Экран целиком | Фрейм из инстансов дизайн-системы | figma-generate-design |
| Флоу из нескольких экранов | Дизайн-система + фреймы экранов | сначала library, потом design |
| Только токены | Коллекции переменных | figma-generate-library |
Шаг 1 · Discovery до единой созданной ноды
get_libraries→ проверитьlibraries_added_to_file, затемlibraries_available_to_add. Apple публикует свои библиотеки как Community — iOS and iPadOS 26, iOS 18, watchOS 26, visionOS 26.- Получив
libraryKey, всегда сужать поиск:search_design_system({ query, fileKey, includeLibraryKeys: [appleKey] })— иначе в выдачу лезут компоненты всех когда-либо подключённых библиотек. - Имена в библиотеках Apple стабильные, можно искать точно:
Navigation Bar - iPhone (Compact Size Class),Status Bar - iPhone,Tab Bar - iPhone,Row,Button,Segmented Control,Stepper,Product Bezels. - Переменные ищутся только через
search_design_systemсincludeVariables: true. Пустой ответgetLocalVariableCollectionsAsync()не означает, что переменных нет — библиотечные ему не видны.
Готча номер один
Ширина экранного фрейма должна совпадать с шириной chrome-компонентов той же библиотеки. Нав-бар, таб-бар и статус-бар авторятся под конкретный безель. Фрейм 393 + нав-бар от 402 = рассинхрон, который видно не сразу. Пиксельная дисциплина касается только внешнего фрейма и chrome — внутри всё на auto-layout FILL/HUG, никаких абсолютных x/y.
Шаг 2 · Токены → компоненты → экраны
- Переменные (если создаёте) — до всего, что к ним привязывается. Скоупы задавать явно:
FRAME_FILL, SHAPE_FILLдля фонов,TEXT_FILLдля текста,STROKE_COLORдля разделителей. Не оставлятьALL_SCOPES. - Оба режима (light/dark) в одной коллекции сразу.
- Компоненты — до сборки экрана. Не инлайнить повторяющиеся элементы: один исходный компонент = один мастер в Figma.
- Экран собирается по одной секции за вызов, каждая — сразу внутрь враппера. Переносить ноды между вызовами через
appendChild()молча не срабатывает и оставляет сирот.
Шаг 3 · iOS-специфика
- SF Symbols только по имени.
figma.util.getSfSymbolCharacter("square.and.arrow.up"). Никаких ручных кодпоинтов и\u{...}. Если хелпер бросилRangeError— сказать об этом, а не подставлять похожую иконку. - Шрифт проверять фактом, а не успешной загрузкой.
listAvailableFontsAsync()до записи текста; нуженSF Pro(иSF Pro Rounded). Загрузился Inter вместо SF Pro — это провал валидации, даже если скрипт отработал без ошибок. - Текст-стили именованные (Large Title, Body, Footnote…), а не сырые свойства на каждой ноде.
- Иконки — импортом SVG:
figma.createNodeFromSvg(), обязательно сviewBox+ явнымиwidth/height. Собирать иконку из повёрнутых линий и прямоугольников нельзя — вращение в этом контексте ненадёжно, шеврон схлопывается в кляксу. - Состояния — варианты, а не отдельные фреймы. Disabled, pressed, hidden →
State=Disabledв наборе вариантов. - Разделитель у последней строки секции не рисуется — так делает нативный
List. - Не переносить:
#Preview,@State/@Binding,GeometryReader,.onTapGesture,.task. Accessibility-модификаторы (.accessibilityLabelи т.п.) — в аннотации ноды, категория Accessibility.
Шаг 4 · Валидация
get_screenshot после каждой секции, и по отдельным нодам, а не только целиком: на уменьшенном общем скриншоте не видно обрезанного текста, наложений и неперезаписанных плейсхолдеров («Title», «Heading», «Button»). Список того, что ищем: обрезка по line-height, перекрытия, чужой вариант компонента, чужой шрифт, пустые картинки.
Большие фреймы разбивать: тяжёлые выделения тормозят инструменты, дают ошибки и неполные ответы.
Пайплайн B · HTML-макет как макет
Самый быстрый цикл итераций. Плюс: Claude видит собственный результат скриншотом и правит сам.
Каркас, который надо задать один раз
Фрейм 393×852, скругление 44px, overflow hidden.
Safe area: padding-top 59px, padding-bottom 34px.
Статус-бар 54px с Dynamic Island (pill 125×37 по центру, top 11).
Таб-бар: капсула, inset 21px по бокам, высота 49px, bottom 34px.
Шрифт: -apple-system, "SF Pro Text", system-ui.
Цвета — CSS-переменные с семантическими именами и блоком
@media (prefers-color-scheme: dark). Никаких хексов в компонентах.
Тач-таргеты ≥44×44. Шкала отступов: 4/8/12/16/24/32.
Правила, которые дают разницу
- Реальные данные, не lorem. Настоящие имена, суммы, даты, названия — это меняет и восприятие стейкхолдеров, и качество обратной связи на тестах.
- Все состояния на одном полотне: пустое, загрузка, ошибка, длинный текст, короткий текст. Это то, что AI-макеты пропускают по умолчанию.
- Обе темы сразу — рядом, а не «потом инвертируем».
- Жесты просить явно: свайп, pull-to-refresh, long press — иначе не появятся.
- Тестировать на живом телефоне. Мелкие таргеты, неожиданные переносы и тормоза анимаций видно только там.
Визуальный луп
Ключевой принцип: тот же агент, который написал код, не может судить собственный вывод. Рендерим в headless Chrome на размере iPhone, снимаем скриншот, кладём рядом с референсом, просим сравнить и назвать отличия по пунктам — и только потом править.
# снять скриншот прототипа в размере iPhone 16
chromium --headless --disable-gpu --hide-scrollbars \
--window-size=393,852 --screenshot=shot.png \
--force-device-scale-factor=3 http://localhost:8080/screen.html
Дальше HTML-прототип конвертируется в SwiftUI (есть готовый плагин Claude Code: сервит дизайн локально, снимает в Chrome на размере iPhone, инвентаризует HTML/CSS/ассеты, пишет один .swift с #Preview, чинит ошибки сборки и делает до трёх кругов визуального диффа) — или переносится в Figma по пайплайну A.
Пайплайн C · SwiftUI + «глаза»
Самый честный рендер — системные контролы, реальный Liquid Glass, настоящий Dynamic Type. И самая честная оценка ограничений.
Как дать Claude увидеть экран
- Отдельный тестовый таргет со snapshot-тестами (
assertSnapshot()с фиксированными размерами), изолированный от основного набора тестов. xcodebuild test -only-testing:"ViewSnapshotTests/ViewVerificationTests" -quiet— рендер без GUI Xcode, работает из терминала, каждый агент в своём worktree снимает независимо.- Анализ картинки через ImageMagick:
magick identifyдля габаритов,magick image.png -crop 1x1+200+300 txt:для цвета в точке,magick compare -metric RMSEдля расхождения с эталоном.
Честные ограничения — проверено на практике
- Claude плохо «замечает» детали по картинке: шрифты, веса, цвета, разницу в паддингах. Их надо давать текстом, а не надеяться на распознавание.
- Абсолютную и относительную ошибку размеров различает слабо.
- Склонен хвалить свой результат и останавливаться раньше времени.
- Практический лимит — 3 автоматических круга, дальше человек.
- Для пиксель-перфекта лучше отдать экспорт из Figma с токенами, чем гонять визуальный дифф.
Вывод: пайплайн C хорош для нащупывания направления и для проверки «а как это выглядит в реальной системе», а не для финальной полировки.
Промпты: формула и заготовки
Формула, к которой сходятся все источники: сильный дефолт → 3–6 жёстких ограничений → список запретов → состояния → способ проверки. Специфика бьёт прилагательные.
Экран в Figma
Собери экран «Карточка бронирования» в файле <figma-url>.
Дефолт: нативный iOS 26, тулбар с крупным заголовком слева,
плавающий таб-бар, инсет-группы вместо карточек.
Ограничения:
— фрейм 393×852, safe area 59/34, поля 16;
— chrome бери инстансами из библиотеки Apple «iOS and iPadOS 26»
(Status Bar - iPhone, Navigation Bar - iPhone (Compact Size Class),
Tab Bar - iPhone); ширину фрейма подгони под них;
— цвета только переменными label/*, background/*, separator/*,
обе моды light и dark;
— текст только именованными стилями (Large Title / Body / Footnote);
— иконки — SF Symbols через figma.util.getSfSymbolCharacter;
— внутри всё на auto-layout, абсолютных координат нет.
Запрещено: Inter, хексы в нодах, гамбургер-меню, тени в стиле Material,
кнопки меньше 44×44, плейсхолдеры «Title»/«Button» в финале.
Состояния: обычное, пустое, загрузка, ошибка — четыре фрейма в ряд.
Порядок: сначала discovery (get_libraries → search_design_system),
потом враппер, потом по одной секции за вызов, после каждой —
get_screenshot этой секции и отчёт что видно.
HTML-прототип
Контекст: приложение аренды загородных домов, гость управляет своей бронью.
Объём: три экрана — список броней, карточка брони, оплата допуслуги.
Дизайн: нативный iOS 26; SF Pro; акцент — тёплый зелёный #2E6B4F только
на CTA и активных состояниях; светлая и тёмная темы; 8pt-сетка.
Данные — настоящие: «Дом 1, 14–16 августа, 24 000 ₽», не lorem.
Формат: один HTML-файл, вьюпорт 393×852, iPhone-фрейм с Dynamic Island,
safe area 59/34, плавающий таб-бар.
Не надо: градиентов, glassmorphism, декоративных иллюстраций,
трёх одинаковых карточек в ряд.
Для каждого экрана — состояние пустое / загрузка / ошибка.
Ревью чужого (или своего) макета
Проверь этот экран как iOS-ревьюер по HIG 26. По каждому пункту —
вердикт и конкретное место:
1) тач-таргеты ≥44×44; 2) safe area 59/34 соблюдена;
3) шкала отступов кратна 4/8; 4) типографика попадает в стили Dynamic Type;
5) цвета — роли, а не хексы; 6) контраст 4.5:1 текст / 3:1 иконки в обеих темах;
7) паттерны нативные (таб-бар, не гамбургер; свайп назад; шиты);
8) стекло одним слоем, текст не на стекле;
9) радиусы концентричны родителю; 10) есть пустое/загрузка/ошибка.
Отвечай списком проблем, отсортированным по серьёзности.
Не хвали. Если всё чисто по пункту — одна строка «ок».
Delta-промпт (правка, а не перегенерация)
Не перегенерируй экран. Измени ровно три вещи:
1) вертикальный ритм секций 24 → 32;
2) вторичный текст на label/secondary вместо label/tertiary;
3) кнопку «Оплатить» из inline в закреплённую снизу над таб-баром.
Остальное не трогай. Покажи скриншот до/после.
Копите библиотеку промптов. Сохраняйте выигравшие формулировки дословно — магия в конкретных ограничениях, а не в общей структуре. Организуйте по типу экрана, а не по эстетике, и ведите отдельный «банк запретов».
Анти-паттерны: по чему видно AI-макет
Модель по умолчанию выдаёт самый вероятный ответ: Inter, фиолетовый градиент, три одинаковые карточки, синяя кнопка. Ниже — то, что ловится на ревью чаще всего.
Платформа
- Гамбургер-меню вместо таб-бара — на iOS он конфликтует с базовой навигацией и имеет низкую обнаруживаемость.
- Смешение таб-бара и бокового меню одновременно.
- FAB, ripple, Material-тени, толстые elevation-карточки.
- Нав-бар во всю ширину и статичный таб-бар — это iOS до 26.
- Текстовые Back/Cancel/Done там, где iOS 26 уже ставит иконки.
Вёрстка
- Inter / Roboto вместо SF Pro.
- Хексы вместо семантических ролей → тёмная тема разваливается.
- Отступы вне шкалы: 15, 18, 22, 27.
- Кнопки и иконки меньше 44×44.
- Абсолютное позиционирование в Figma вместо auto-layout.
- Одинаковый радиус у вложенных элементов вместо концентричного.
- Разделитель под последней строкой секции.
Содержание
- Lorem ipsum и «John Doe» вместо реальных данных.
- Только «счастливый» экран: нет пустого, загрузки, ошибки.
- Один вариант длины текста — всё ломается на длинном имени.
- Нет тёмной темы или она сделана инверсией.
- Иконки не из SF Symbols → выпадают из системы весов и выравнивания по тексту.
Визуальные клише
- Фиолетово-синий градиентный герой.
- Три идентичные карточки в ряд.
- Стекло поверх стекла и текст прямо на стекле.
- Эмодзи как маркеры разделов.
- Всё по центру,
rounded-lgна всём подряд. - «Clean and modern» как единственный бриф.
Чек-лист приёмки макета
Прогоняйте перед тем, как показывать кому-то. Половина пунктов проверяется самим Claude, если дать ему этот список.
- Фрейм из таблицы устройств, safe area 59 сверху / 34 снизу соблюдена
- Все интерактивные элементы ≥ 44×44 pt, включая иконки в тулбаре
- Каждое значение отступа кратно 4, основной ритм — 8/16/24
- Поля контента 16 pt, выровнены по всему экрану
- Типографика попадает в стили Dynamic Type, минимум 11 pt
- Шрифт — SF Pro (проверено фактически, а не «должен быть»)
- Цвета заданы ролями/переменными, ни одного сырого хекса в нодах
- Обе темы собраны и обе проверены на контраст 4.5:1 / 3:1
- Проверено при Reduce Transparency и Increase Contrast
- Текст ложится на плотную подложку, не на стекло
- Стекло одним слоем, интерфейс читается и без него
- Радиусы вложенных элементов концентричны родителю
- Навигация нативная: таб-бар-капсула, свайп назад, шиты вместо кастомных модалок
- Поиск на своём месте: глобальный — внизу справа, страничный — сверху
- Иконки — SF Symbols по именам, единый вес и шкала
- Есть пустое состояние, загрузка и ошибка с человеческим текстом
- Проверены длинный и короткий тексты, длинные имена не ломают строку
- Разделители: 1 pt, нет под последней строкой секции
- Данные реальные, плейсхолдеров «Title»/«Button» не осталось
- В Figma: всё на auto-layout, повторяющееся — инстансы, а не копии
Скелет IOS26-DESIGN.md
Кладётся в корень проекта и подключается из CLAUDE.md. Заполняется один раз, окупается на каждом экране.
# IOS26-DESIGN.md
## Бриф
<Что делает продукт. Кто пользователь. Какую работу выполняет экран.>
Платформа: iOS 26, iPhone. Рисуем на 393×852, проверяем на 375 и 440.
## Токены — значение, намерение, граница
accent/primary — только CTA и активные состояния. Никогда как фон секции.
label/primary — основной текст. Никогда на цветной заливке без проверки контраста.
label/secondary — подписи, метаданные. Не для действий.
background/* — primary для полотна, secondary для инсет-групп.
separator/* — 1 pt, не под последней строкой секции.
Правило: сырых хексов в макете нет. Только роли, обе моды.
## Шкала отступов
4 / 8 / 12 / 16 / 24 / 32 / 48. Поля экрана 16. Между секциями 32.
Внутри карточки 16, между карточками 24. Иконка↔текст 4.
## Типографика
SF Pro. Стили Dynamic Type, не фиксированные размеры.
Large Title 34 — только заголовок экрана до скролла.
Headline 17 Semibold — компактный заголовок и акцент в строке.
Body 17 — основной текст и строки списка.
Subheadline 15 — вторичный. Footnote 13 — метаданные. Caption 2 11 — минимум.
Правило: не более трёх уровней на экран.
## Компоненты — логика выбора
Строка списка: однородные объекты, действие = переход. Высота 44 (60 с подзаголовком).
Карточка: разнородное содержимое, несколько действий, есть медиа.
Инсет-группа: настройки и формы. Кнопка-капсула: одно главное действие на экран.
Состояния — варианты компонента, не отдельные копии.
## Обязательные состояния каждого экрана
default / empty / loading / error / long-text
## Don'ts
1. Не Inter и не системный дефолт браузера — SF Pro.
2. Не гамбургер-меню. Навигация — таб-бар-капсула iOS 26.
3. Не Material: без FAB, ripple и elevation-теней.
4. Не стекло на стекле и не текст поверх стекла.
5. Не хексы в нодах и не отступы вне шкалы.
6. Не тач-таргеты меньше 44×44.
7. Не lorem — только реальные данные домена.
8. Не показывать один «счастливый» экран без остальных состояний.
Источники
Отсортированы по практической ценности: сначала первичные, потом разборы.
Первичные — Apple и Figma
- Apple Design Resources — официальные UI-киты, включая iOS 26 для Figma (обновление 24.07.2026)
- Human Interface Guidelines — Layout и анонс новых design resources
- Figma Community — iOS and iPadOS 26, как начать работу с китом Apple
- Guide to the Figma MCP server и Figma skills for MCP — скиллы
figma-swiftui,figma-generate-design,figma-use - Figma Blog — From Claude Code to Figma — code-to-canvas
- Anthropic — Claude Design (research preview, апрель 2026)
Спека и разборы iOS 26
- learnui.design — iOS 26 Design Guidelines — размеры фреймов, типографика, плавающий таб-бар
- UI Changes in iOS 26 That's Not About Liquid Glass — тулбары, иконочные кнопки, поиск, модалки
- Liquid Glass: Hierarchy, Harmony, Consistency
- LogRocket — Adopting Liquid Glass: best practices
- Exploring Concentricity in SwiftUI и Corner concentricity in SwiftUI on iOS 26
- useyourloaf — iPhone screen sizes (safe area 59/34) и таблица размеров текстовых стилей
- iOS 26 in detail: Liquid Glass между юзабилити и доступностью, Access Advisors — accessibility-риски
Практика работы с Claude
- Giving Claude Code Eyes to See Your SwiftUI Views — snapshot-тесты, ImageMagick, честные ограничения
- claudedesign-to-swiftui — плагин HTML-прототип → SwiftUI с визуальным диффом
- Writing a DESIGN.md file Claude can actually use — структура и раздел Don'ts
- The Design Agent for Claude Code: real UI, not generic slop — reference grounding и цикл верификации
- UI Design Prompts: копипаст-библиотека и Apple Design System с копируемым DESIGN.md
- AI for Mobile App Prototyping: от спеки до интерактивного мокапа
- Framework для промптов на красивый UI, 7 ошибок, от которых приложение кажется чужим на платформе
- NN/g — iOS Design Rules to Break