Перейти к содержанию

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: фикстура создаёт домашнюю папку во временном каталоге и проверяет, что правило срабатывает, не срабатывает на «свежих» объектах и не выходит за корень скана.