Зависшие мини-приложения Telegram на MacOS блокируют главный поток, парализуя интерфейс, но не всё приложение. Стандартные методы не помогают, поэтому создана утилита, которая целенаправленно убивает только зависшее окно по размеру, сохраняя остальные сессии.
kill-stuck-telegram: как убить зависший Mini App не теряя остальные чаты
наведи и нажми на цифру — раскроется глава
полный разбор ролика · 5 глав ↓
Введение в проблему
Мини-приложения Telegram на MacOS могут зависать, блокируя интерфейс, но не всё приложение. Официальный совет перезапустить всё приложение неприемлем для пользователей с несколькими активными аккаунтами.
Проблема критична, так как потеря всех сессий из-за одного зависшего окна парализует рабочий процесс. Необходим специализированный инструмент для избирательного решения.
Анатомия бага
Главный поток Telegram отвечает за пользовательский интерфейс, включая кастомные кнопки закрытия. Зависшее мини-приложение блокирует этот поток, из-за чего все клики и команды ставятся в бесконечную очередь.
Из-за блокировки главный цикл программы останавливается, и интерфейс перестаёт реагировать, хотя фоновые функции продолжают работать.
Неудачные методы лечения
Команды закрытия через AppleScript, Accessibility API и другие стандартные методы не работают, так как они попадают в очередь за заблокированным главным потоком и завершаются тайм-аутом.
Попытка убить процесс WebView убивает рендерер, но оставляет пустую рамку-зомби, а главный поток продолжает висеть, ожидая ответа.
Хирургическое решение
Утилита использует Core Graphics API для сбора метаданных окон без запроса расширенных прав, что позволяет работать прозрачно и без системных предупреждений.
Она фильтрует окна по размерам (ширина 300-520, высота 600-900), группирует по процессу, находит путь к бинарнику, убивает процесс командой kill -9 и перезапускает именно тот же бинарник с флагом Musn для надёжности.
Настройка и ограничения
Утилита работает только на MacOS 13 и новее, поиск окон основан на размерах, что может привести к ошибкам в других случаях.
Локальные черновики сообщений в зависшем окне могут быть потеряны при перезапуске. Требуется ручное подтверждение запуска из-за политики Apple, что экономит разработчикам деньги на нотариации.
Это временное решение, позволяющее быстро восстановить работу до официального исправления архитектуры Telegram.