Cleanup
Правила очистки¶
Каталог правил — это данные и чистые функции: правила не ходят в файловую
систему, а ищут совпадения в уже готовом ScanTree. Советник
CleanupAdvisor вызывается после скана и не запускает отдельный обход диска.
Уровни риска¶
| Уровень | Что значит | Выбран по умолчанию |
|---|---|---|
| Безопасно | Приложения или система пересоздадут объект автоматически | Да |
| Проверить | Место освободится, но содержимое стоит проверить | Нет |
| Осторожно | Может сломать сборку или настройки | Нет |
Даже «безопасные» правила не удаляют ничего сами: пользователь видит список,
снимает галочки и подтверждает действие. Перемещение в Корзину можно отменить
через ⌘Z; очистка самой Корзины безвозвратна и требует отдельного согласия.
Правила v1¶
| ID | Где ищет | Что предлагает | Риск |
|---|---|---|---|
trash |
~/.Trash |
Всю Корзину; удаление безвозвратное | Безопасно |
xcode-derived-data |
~/Library/Developer/Xcode/DerivedData |
Папку целиком | Безопасно |
xcode-archives |
~/Library/Developer/Xcode/Archives |
Дочерние архивы старше 180 дней | Безопасно |
xcode-device-support |
.../Xcode/iOS DeviceSupport, watchOS, tvOS, visionOS |
Папки версий ОС | Безопасно |
downloads-installers |
~/Downloads |
.dmg, .pkg, .zip, .xip, .iso старше 30 дней |
Безопасно |
library-caches |
~/Library/Caches |
Дочерние кэши от 50 МБ, кроме Homebrew |
Безопасно |
core-simulator-caches |
~/Library/Developer/CoreSimulator/Caches |
Папку целиком | Безопасно |
ios-backups |
~/Library/Application Support/MobileSync/Backup |
Копии устройств старше 180 дней | Проверить |
docker-disk-image |
.../Docker/Data/vms/0/data/Docker.raw |
Файл, только если Docker не запущен | Проверить |
gradle-cache |
~/.gradle/caches |
Папку целиком | Проверить |
maven-cache |
~/.m2/repository |
Папку целиком | Проверить |
npm-cache |
~/.npm/_cacache |
Папку целиком | Проверить |
homebrew-cache |
~/Library/Caches/Homebrew |
Папку целиком | Проверить |
xcode-user-data |
~/Library/Developer/Xcode/UserData |
Папку целиком | Осторожно |
node-modules |
Любой каталог node_modules в скане |
Топ-50 по размеру | Осторожно |
trash — единственное правило с deletePermanently: перемещать содержимое
Корзины в Корзину бессмысленно, поэтому очистка требует отдельного
подтверждения. Корзина не выбирается по умолчанию. Остальные правила
используют обычное перемещение в Корзину.
Как правила находят совпадения¶
- Путь резолвится от корня текущего скана. Если папки нет в дереве, правило молчит: советник не проверяет диск повторно.
- Для правил с датами (
xcode-archives,downloads-installers,ios-backups) файл или папка должны быть старше порога. Неизвестная дата считается неподходящей — лучше пропустить, чем предложить лишнее. - Содержимое пакетов (
.app,.photoslibrary, …) не предлагается по частям. Пакет может быть предложен только целиком, если правило указывает на него. - Вложенные предложения схлопываются: если предложена папка, её внутренности не дублируются в списке.
- Список сортируется по риску, затем по размеру; по умолчанию отдаётся не больше 500 строк.
Что пока не покрыто¶
- Недоступные симуляторы: чтобы отличить их от рабочих, нужно читать
device.plist, а правила намеренно не трогают файловую систему. - Системные кэши вне домашней папки: для них нужен Full Disk Access и отдельная политика безопасности.
- «Крупные файлы без расширения»: эвристика даёт много шума, поэтому отложена до появления ручного выбора в мастере очистки.
- Клоны APFS и жёсткие ссылки: см. задачи про точность в roadmap.
Как добавить правило¶
Правила живут в Sources/DiskScopeKit/Core/CleanupAdvisor.swift. Для типовых
случаев есть фабрики directoryRule (папка целиком) и childrenRule
(дочерние объекты с фильтрами по расширению, размеру и возрасту). Сложные
правила, как docker-disk-image или node-modules, задают собственный matcher.
Новое правило стоит добавлять вместе с тестом в
Tests/DiskScopeKitTests/CleanupRulesTests.swift: фикстура создаёт домашнюю
папку во временном каталоге и проверяет, что правило срабатывает, не
срабатывает на «свежих» объектах и не выходит за корень скана.