Repository navigation
Architecture
- быстро сканировать миллионы файлов;
- держать память под контролем;
- показывать понятную карту;
- безопасно удалять и переносить файлы;
- оставаться полностью локальным приложением.
| Модуль | Ответственность |
|---|---|
DiskScope |
точка входа, окно, меню, Settings scene |
DiskScopeKit |
сканер, дерево, UI, модели, медиа, обновления |
DiskScopeCLI |
замеры и отладочные прогоны |
DiskScopeSnapshots |
рендер PNG без screen recording |
DiskScopeKitTests |
42 XCTest |
папка
→ DiskScanner (getattrlistbulk + openat)
→ ScanTree (плоские массивы узлов)
→ AppModel
→ карта / крупнейшие / типы / медиа
- основной путь:
getattrlistbulk+openat; - запасной:
readdir + fstatat; - прогресс и отмена через
ScanCancellation; - пакеты
.app,.photoslibraryи подобные считаются одним объектом; - жёсткие ссылки считаются по каждому пути;
- ошибки доступа собираются в отчёт, а не прерывают скан.
ScanTree хранит плоские массивы узлов и общий UTF-8-блоб имён. Это уменьшает количество аллокаций и позволяет быстро обходить дерево. Файлы меньше 64 КБ агрегируются по папкам, чтобы не раздувать память.
Удаление использует copy-on-write: после перемещения в Корзину создаётся обновлённое дерево без полного перескана.
Squarified treemap укладывает прямоугольники по площади. Для крупных узлов показывается второй уровень. UI рисует карту в SwiftUI/AppKit и поддерживает навигацию, наведение и подсказки.
MediaSearchEngine обходит выбранные папки, фильтрует расширения и возвращает результаты. MediaMover переносит файлы с уникальными именами и fallback copy+remove между томами. PhotosImporter использует PhotoKit и shouldMoveFile.
UpdateChecker делает GET к GitHub Releases API, сравнивает semver и возвращает состояние: idle, checking, upToDate, available, failed. Сеть используется только по кнопке.
- кастомный title bar;
- sidebar;
- HeaderView с хлебными крошками и вкладками;
- карта, таблицы, медиа, настройки;
- палитра команд
⌘K; - светлая и тёмная темы.
- файлы читаются только для метаданных;
- запись — только по действию пользователя;
- нет сетевых запросов, кроме проверки обновлений;
- нет сторонних зависимостей.
- снимки APFS и purgeable не учитываются отдельно;
- поиск дубликатов не реализован;
- жёсткие ссылки дублируются;
- медиа-поиск ограничен 25 000 результатов.
См. Сборка из исходников и Возможности.
DiskScope 1.1.1 · macOS 14+ · Apple Silicon + Intel · MIT
GitHub · Документация · Релизы · Issues · Wiki
v1.1.1 · macOS 14+ · universal