docs(desktop): решение владельца — без подписи и нотаризации, Windows/Linux позже через GitHub Actions

- .dmg распространяется неподписанным; инструкция для конечного пользователя
  (правый клик → «Открыть» или снятие карантина xattr) — в README
- хеш и путь текущего установщика 0.1.1
- сборки Windows/Linux отложены: репозиторий в Gitea, раннеры есть у GitHub
  Actions; локальная часть (desktop-check, desktop-release --target) готова
This commit is contained in:
2026-09-27 15:42:50 +03:00
parent 8814fe7cf4
commit 1fd9734fff
+36 -7
View File
@@ -357,14 +357,21 @@ python3 scripts/desktop-perf.py --runs 3 # 3 холодных старта +
- **Аватары в уведомлениях** (thumb/буква) и группировка — сейчас иконка приложения.
- **Захват экрана и микрофон**: разрешения macOS выдаёт webview, отдельных
экранов-инструкций у обёртки нет.
- **Developer ID и нотаризация** macOS, EV/Trusted Signing для Windows — только
в CI с платными сертификатами (ниже — точные команды).
- **Подпись и нотаризация macOS — сознательно не делаются** (решение владельца
26.09.2026): приложение распространяется неподписанным `.dmg`, карантин
снимает конечный пользователь (инструкция ниже). EV/Trusted Signing для
Windows — тем же решением не делаем.
- **`.dmg`**: собирается из обычного терминала (Finder/AppleScript для раскладки
окна); в песочнице агента `hdiutil create` и AppleScript запрещены, но образ
**без оформления окна** собирается флагом `--sandbox-safe` к `bundle_dmg.sh`
(проверено 2026-09-26, см. ниже).
- **Windows/Linux-бандлы**: конфигурация кросс-платформенная, но собирались и
проверялись только macOS-arm64.
проверялись только macOS-arm64. Сборки под другие ОС **отложены**: репозиторий
живёт в Gitea на мини-ПК, а `windows-latest`/`ubuntu-24.04`-раннеры есть у
GitHub Actions, поэтому владелец зеркалит проект в GitHub позже и запускает
сборку там. Локальная часть готова и проверена: `make desktop-check`,
`scripts/desktop-release.sh --artifact … --target windows|linux` (манифест
обновления для каждой платформы складывается в общий файл версии).
## Что осталось оператору (точные команды)
@@ -404,10 +411,33 @@ hdiutil verify glchat_0.1.0_aarch64.dmg
Артефакты без `.dmg` (для автообновления) собираются где угодно:
`make desktop-build-app`.
### macOS: подпись Developer ID и нотаризация
### macOS: подпись Developer ID и нотаризация — сознательно не делаем
Нужны сертификат Developer ID Application в связке ключей и пароль приложения
(appleid.apple.com → App-Specific Passwords):
**Решение владельца (2026-09-26): подпись Developer ID и нотаризацию не
делаем** — это платный аккаунт Apple Developer, а приложение распространяется
внутри своего круга. Распространяется **неподписанный** `.dmg`; действия при
первом запуске выполняет конечный пользователь (ниже). Подпись артефакта
обновления (ed25519, ключ инстанса) от этого не зависит и проверяется всегда —
её отсутствие или порча артефакта установку отменяют.
Что делает конечный пользователь (короткая инструкция, её же можно передать
вместе с файлом):
1. Открыть `.dmg` и перетащить `glchat` в `Applications`.
2. Первый запуск — **правый клик по приложению → «Открыть» → «Открыть»** в
диалоге «разработчик не может быть проверен». Дальше приложение запускается
обычным двойным кликом.
3. Если macOS не показывает кнопку «Открыть» (карантин): в терминале
`xattr -dr com.apple.quarantine /Applications/glchat.app`, либо «Системные
настройки → Конфиденциальность и безопасность → Всё равно открыть».
Текущий установщик релиза 0.1.1:
`desktop/src-tauri/target/release/bundle/dmg/glchat_0.1.1_aarch64.dmg`
(3,1 МБ, sha256 `7f93609164dc5fdfe6255b88eaf909c02ba819a7e4fb79951cc50b142da825c0`).
Собирается `make desktop-build` (или `bundle_dmg.sh --sandbox-safe` в headless).
Если однажды понадобится подпись, команды остаются прежними (переменные читает
сам Tauri, в репозиторий они не попадают):
```bash
security find-identity -v -p codesigning # проверить наличие сертификата
@@ -420,7 +450,6 @@ xcrun stapler validate desktop/src-tauri/target/release/bundle/macos/glchat.app
spctl --assess --type execute --verbose=4 desktop/src-tauri/target/release/bundle/macos/glchat.app
```
Переменные читает сам Tauri (`APPLE_*`), в репозиторий они не попадают.
Проверка «не подписано»: `codesign -dv --verbose=4 <app>` покажет `Signature=adhoc`.
### Windows (x64): MSI/NSIS + подпись