# YanDisk Нативный SwiftUI-клиент Яндекс.Диска для macOS (Apple Silicon). ## Возможности - Авторизация OAuth (токен в Keychain) - Просмотр Диска: все файлы и папки, «Недавние», «Корзина» - **Избранное**: правый клик → «В избранное» (метка хранится локально, звезда в списке) - **Доступные мне**: папки, к которым доступ дали другие пользователи (обнаружение по полю `share.is_owned == false` в листинге API; права rw/r в контекстном меню) - Чтение / скачивание, загрузка (кнопка и 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`