81 lines
3.1 KiB
Markdown
81 lines
3.1 KiB
Markdown
# YanDisk
|
||
|
||
Нативный SwiftUI-клиент Яндекс.Диска для macOS (Apple Silicon).
|
||
|
||
## Возможности
|
||
|
||
- Авторизация OAuth (токен в Keychain)
|
||
- Просмотр Диска: все файлы и папки, «Недавние», «Корзина», «Доступные мне» (в разработке)
|
||
- Чтение / скачивание, загрузка (кнопка и drag-and-drop)
|
||
- Копирование, перемещение, переименование, дублирование
|
||
- Удаление в Корзину, восстановление, очистка Корзины
|
||
- Синхронизация `~/Yandex.Disk`: **Везде** / **Только на компьютере** / **Только в облаке** (по умолчанию — «Только в облаке»)
|
||
- Общий доступ: ссылка, права, пароль, срок действия
|
||
- Иконка приложения подстраивается под тему системы (светлая/тёмная), иконка в меню-баре
|
||
|
||
## План доработок
|
||
|
||
Аудит кода, найденные неоптимальные места и порядок работ — в [ПРАВКИ.md](ПРАВКИ.md).
|
||
Актуальные задачи также заведены в Issues Gitea: https://git.statix.sbs/akhmed/YanDisk/issues
|
||
|
||
## Сборка
|
||
|
||
```bash
|
||
cd /Users/statix/Projects/YanDisk
|
||
./build.sh
|
||
open .build/YanDisk.app
|
||
```
|
||
|
||
Установка в `/Applications`:
|
||
|
||
```bash
|
||
rm -rf /Applications/YanDisk.app
|
||
cp -R .build/YanDisk.app /Applications/
|
||
codesign --force --deep --sign - /Applications/YanDisk.app
|
||
```
|
||
|
||
Smoke-тесты (сборка + проверка OAuth-парсинга, кодирования путей и бандла):
|
||
|
||
```bash
|
||
./smoke_test.sh
|
||
```
|
||
|
||
## Иконка
|
||
|
||
Исходники: `icons/Icon-iOS-*.png` (1024×1024).
|
||
Собранные ресурсы:
|
||
|
||
- `Resources/AppIcon.icns` — Dock/Finder (светлая тема)
|
||
- `Resources/AppIconDark.icns` — Dock/Finder (тёмная тема)
|
||
- `Resources/Assets.xcassets/AppIcon.appiconset` — варианты light/dark (HIG)
|
||
|
||
Пересборка иконки:
|
||
|
||
```bash
|
||
./scripts/generate_icons.sh
|
||
```
|
||
|
||
## Темы
|
||
|
||
Настройки → Основные → **Тема**: Как в системе / Светлая / Тёмная.
|
||
Значение хранится в `AppStorage("Appearance")`. Иконка Dock переключается автоматически
|
||
по `effectiveAppearance` (`AppDelegate.updateAppIcon()`).
|
||
|
||
## Структура
|
||
|
||
```
|
||
Sources/YanDisk/
|
||
App/ точка входа, AppDelegate, окна
|
||
Core/ API, OAuth, Keychain, модели, AppStore
|
||
Sync/ движок синхронизации
|
||
UI/ меню-бар, браузер, шаринг, настройки, вход
|
||
icons/ исходные PNG иконки
|
||
Resources/ Info.plist, AppIcon.icns, AppIconDark.icns, Assets.xcassets
|
||
```
|
||
|
||
## Авторизация
|
||
|
||
1. Иконка облака → **Добавить аккаунт**
|
||
2. **Войти через Яндекс**
|
||
3. Вставить `access_token`
|