Обновление 5.9.24: безопасность наград, стабильность iOS и адаптация под экраны
Релиз без громких новых фич, но важный: закрыли накрутку наград, починили пару крашей и привели интерфейс в порядок на всех экранах.
БЕЗОПАСНОСТЬ НАГРАД
Раньше теоретически можно было накрутить внутриигровую валюту и прогресс. Закрыли три вектора: сложность AI теперь фиксируется подписанным токеном до начала партии (нельзя задним числом сказать «я выиграл на сложной»); rewarded-реклама проверяется на сервере через Google SSV; прогресс ежедневных миссий начисляет только сервер и только из проверенных действий. Подделка сложности и фарм наград закрыты.
Плюс обновили сетевой пакет ws до 8.21.0 (там чинили DoS и утечку памяти) и прогнали полный аудит зависимостей — 0 известных уязвимостей. Добавили SECURITY.md и документ аудита.
КРАШИ И СБОРКИ
iOS: устранён краш при запуске. Инициализация рекламы дёргала запрос App Tracking Transparency без нужного ключа в Info.plist — система убивала приложение. Теперь реклама на iOS включается только когда AdMob реально настроен.
Android: восстановили release-сборку — потерянный блок release {} в build.gradle ломал минификацию R8. Подписанные AAB и APK снова собираются.
ЭКРАНЫ
Окно результата партии в горизонтальной ориентации на телефоне больше не обрезает кнопки «Ещё игра» и «Реванш» — добавили прокрутку и отступы под вырез экрана и home indicator. Всплывающие уведомления (серия дней, ачивки, cookie-баннер) больше не заходят под чёлку/Dynamic Island и нижний индикатор.
Доступность: 9 модальных окон получили корректные роли для скринридеров (role="dialog", aria-modal, подписи), иконочные кнопки подписаны, декоративные иконки скрыты от озвучки. Тач-цели увеличены до 44px по гайдлайнам Apple и Google.
СТАБИЛЬНОСТЬ
В CI добавили блокирующий порог покрытия тестами и блокирующий typecheck, написали +28 новых unit-тестов (806 проходящих). Установка зависимостей теперь воспроизводима (npm ci).