Версия для macOS отстаёт от Windows по нескольким пользовательским функциям: в ней нет настройки автозапуска, уведомление об обновлении только открывает страницу релизов, в настройках отсутствует действие для установки обновления. Кроме того, в верхней панели используется старая синяя иконка вместо адаптивной системной.
Что изменено
Добавлен автозапуск при входе в macOS через пользовательский LaunchAgent в ~/Library/LaunchAgents. Управлять им можно из настроек приложения.
Кнопка обновления добавлена в настройки и меню верхней панели. Она появляется при наличии более новой версии, а стартовое уведомление открывает тот же диалог установки.
Реализована установка официального обновления для macOS: приложение скачивает DMG, проверяет SHA-256 из релиза GitHub, монтирует образ только для чтения, проверяет идентификатор приложения, исполняемый файл и подпись, после чего подготавливает замену и перезапускает приложение.
Предыдущая версия .app сохраняется для восстановления. Если новую версию не удаётся установить или запустить, установщик возвращает старую. При следующем запуске удаляются устаревшие резервные папки, а последняя копия сохраняется.
Иконка приложения для macOS теперь использует тот же логотип, что и Windows. Для верхней панели используется уменьшенная адаптивная иконка: круг с прозрачной буквой T, который автоматически меняет цвет вместе с оформлением macOS.
Добавлены русские и английские строки интерфейса, обновлены существующие инструкции для macOS и описание конфигурации Tray.
Обновление внутри приложения доступно только для собранной .app, установленной в постоянную папку с правом записи. При запуске из исходников открывается страница релиза. Обновление из смонтированного DMG или временного пути App Translocation блокируется с понятным сообщением об ошибке.
Официальный релиз не устанавливался поверх разрабатываемой сборки, поскольку текущая опубликованная версия ещё не содержит этих изменений. Процесс замены приложения проверялся на отдельной временной .app и локальном DMG.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
## 📋 Pull Request Information
**Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/1341
**Author:** [@f4rceful](https://github.com/f4rceful)
**Created:** 9/13/2026
**Status:** ❌ Closed
**Base:** `main` ← **Head:** `feat/macos-desktop-parity`
---
### 📝 Commits (3)
- [`baf58b6`](https://github.com/Flowseal/tg-ws-proxy/commit/baf58b6b11b22a77eb590e569381a9bc48d72287) feat(macos): add native updates and desktop integration
- [`4c170b9`](https://github.com/Flowseal/tg-ws-proxy/commit/4c170b9e643a46f82c827ddf074fb929dd788ebb) Style macOS update progress window
- [`59384f3`](https://github.com/Flowseal/tg-ws-proxy/commit/59384f3a3694ea5bf78bb94b5a9211c65badbd1c) Remove redundant macOS touchpad scroll handler
### 📊 Changes
**14 files changed** (+616 additions, -47 deletions)
<details>
<summary>View changed files</summary>
📝 `docs/EN/README.macos.md` (+16 -0)
📝 `docs/EN/TrayConfig.md` (+3 -2)
📝 `docs/RU/README.macos.md` (+16 -0)
📝 `docs/RU/TrayConfig.md` (+3 -2)
📝 `macos.py` (+169 -37)
📝 `packaging/macos.spec` (+3 -2)
📝 `pyproject.toml` (+1 -0)
➕ `tests/test_macos_integration.py` (+140 -0)
📝 `tests/test_update_check.py` (+29 -0)
📝 `ui/ctk_tray_ui.py` (+3 -2)
📝 `ui/i18n/en.json` (+7 -1)
📝 `ui/i18n/ru.json` (+7 -1)
➕ `utils/macos_integration.py` (+210 -0)
📝 `utils/tray_common.py` (+9 -0)
</details>
### 📄 Description
## Проблема
Версия для macOS отстаёт от Windows по нескольким пользовательским функциям: в ней нет настройки автозапуска, уведомление об обновлении только открывает страницу релизов, в настройках отсутствует действие для установки обновления. Кроме того, в верхней панели используется старая синяя иконка вместо адаптивной системной.
## Что изменено
- Добавлен автозапуск при входе в macOS через пользовательский `LaunchAgent` в `~/Library/LaunchAgents`. Управлять им можно из настроек приложения.
- Кнопка обновления добавлена в настройки и меню верхней панели. Она появляется при наличии более новой версии, а стартовое уведомление открывает тот же диалог установки.
- Реализована установка официального обновления для macOS: приложение скачивает DMG, проверяет SHA-256 из релиза GitHub, монтирует образ только для чтения, проверяет идентификатор приложения, исполняемый файл и подпись, после чего подготавливает замену и перезапускает приложение.
- Предыдущая версия `.app` сохраняется для восстановления. Если новую версию не удаётся установить или запустить, установщик возвращает старую. При следующем запуске удаляются устаревшие резервные папки, а последняя копия сохраняется.
- Иконка приложения для macOS теперь использует тот же логотип, что и Windows. Для верхней панели используется уменьшенная адаптивная иконка: круг с прозрачной буквой `T`, который автоматически меняет цвет вместе с оформлением macOS.
- Добавлены русские и английские строки интерфейса, обновлены существующие инструкции для macOS и описание конфигурации Tray.
Обновление внутри приложения доступно только для собранной `.app`, установленной в постоянную папку с правом записи. При запуске из исходников открывается страница релиза. Обновление из смонтированного DMG или временного пути App Translocation блокируется с понятным сообщением об ошибке.
Официальный релиз не устанавливался поверх разрабатываемой сборки, поскольку текущая опубликованная версия ещё не содержит этих изменений. Процесс замены приложения проверялся на отдельной временной `.app` и локальном DMG.
---
<sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
📋 Pull Request Information
Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/1341
Author: @f4rceful
Created: 9/13/2026
Status: ❌ Closed
Base:
main← Head:feat/macos-desktop-parity📝 Commits (3)
baf58b6feat(macos): add native updates and desktop integration4c170b9Style macOS update progress window59384f3Remove redundant macOS touchpad scroll handler📊 Changes
14 files changed (+616 additions, -47 deletions)
View changed files
📝
docs/EN/README.macos.md(+16 -0)📝
docs/EN/TrayConfig.md(+3 -2)📝
docs/RU/README.macos.md(+16 -0)📝
docs/RU/TrayConfig.md(+3 -2)📝
macos.py(+169 -37)📝
packaging/macos.spec(+3 -2)📝
pyproject.toml(+1 -0)➕
tests/test_macos_integration.py(+140 -0)📝
tests/test_update_check.py(+29 -0)📝
ui/ctk_tray_ui.py(+3 -2)📝
ui/i18n/en.json(+7 -1)📝
ui/i18n/ru.json(+7 -1)➕
utils/macos_integration.py(+210 -0)📝
utils/tray_common.py(+9 -0)📄 Description
Проблема
Версия для macOS отстаёт от Windows по нескольким пользовательским функциям: в ней нет настройки автозапуска, уведомление об обновлении только открывает страницу релизов, в настройках отсутствует действие для установки обновления. Кроме того, в верхней панели используется старая синяя иконка вместо адаптивной системной.
Что изменено
LaunchAgentв~/Library/LaunchAgents. Управлять им можно из настроек приложения..appсохраняется для восстановления. Если новую версию не удаётся установить или запустить, установщик возвращает старую. При следующем запуске удаляются устаревшие резервные папки, а последняя копия сохраняется.T, который автоматически меняет цвет вместе с оформлением macOS.Обновление внутри приложения доступно только для собранной
.app, установленной в постоянную папку с правом записи. При запуске из исходников открывается страница релиза. Обновление из смонтированного DMG или временного пути App Translocation блокируется с понятным сообщением об ошибке.Официальный релиз не устанавливался поверх разрабатываемой сборки, поскольку текущая опубликованная версия ещё не содержит этих изменений. Процесс замены приложения проверялся на отдельной временной
.appи локальном DMG.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.
[PR #1341] feat(macos): add native updates and desktop integrationto [PR #1341] [CLOSED] feat(macos): add native updates and desktop integration