Disk Usage

DiskUsage – плагин, предназначенный для мониторинга использования дискового пространства вашим приложением. Он позволяет отслеживать, какие проекты или сборки занимают больше всего места на диске, что может быть полезно для управления ресурсами и оптимизации использования хранилища. С помощью этого плагина возможно отслеживать утекающие или забытые файлы и вовремя их удалять. Полезно, чтобы пользователь не удалял ваше приложение, когда на его устройстве закончится место :)

Этот плагин предоставляет информацию о размере и распределении файлов и каталогов на диске. С его помощью также возможно установить оптимальное количество занимаемого на диске пространства, чтобы знать, если ваш проект использует больше места, чем хотелось бы. В самом отчёте это выглядит следующим образом:

Все файлы распределены по 3-ем GlobalDirs, которые по умолчанию имеют значения:

ДиректорияОписание
int_dataВнутренние данные приложения: кэши, временные файлы, логи и другие. Это корневая папка приложения, в которой хранятся такие папки, как files, caсhe, shared_prefs и другие файлы, относящиеся к работе приложения.
ext_dataДанные, предназначенные для обмена с внешними системами или пользователями: загружаемые файлы, выгрузки, обменные файлы и другие. Здесь можно найти файлы временных кэшей, журналы, временные файлы сеансов и т. д.
src_dataИсходные кода приложения: исходные коды программ, скрипты, конфигурации и другие ресурсы.

Информация обо всех утечках файлов агрегируется в отдельный отчёт по версии используемого приложения. Найти эти отчёты можно в верхней панели в разделе «Использование диска»:

Внутри самого отчёта предоставлена основная информация о проекте и распределении файлов и каталогов на диске с указанием количества утечек. Важно понимать, что инструмент не выгружает данные из вашей файловой системы, а лишь помогает найти путь до необходимых ресурсов на диске:

Подключение зависимостей к проекту

Для cocoapods Podfile

source 'https://github.com/odnoklassniki/tracer-ios.git' pod 'OKTracer'

Описание FeatureConfiguration.diskUsage()

За настройку отвечает DiskUsageConfiguration:

ПараметрТипОписание
systemExcluded[FileManager.SearchPathDirectory]?Список системных директорий, которые будут исключены из мониторинга. По умолчанию nil.
excluded[String]?Список пользовательских директорий (путей), которые необходимо исключить из мониторинга. По умолчанию содержит TracerStorage.
notifyIfEqualsBool?Если true, отчёты отправляются, даже если использование диска не изменилось. По умолчанию false.
maxDepthInt?Максимальная глубина обхода директорий при вычислении использования диска. По умолчанию 200.
maxEntriesInt?Максимальное количество записей директорий для мониторинга диска. По умолчанию 400.
isRecursiveBool?Указывает, должен ли мониторинг рекурсивно обходить поддиректории. По умолчанию true.
observeModeDiskUsageObserveMode?Определяет режим наблюдения за использованием диска. Может быть timer(interval: TimeInterval) или постоянным – permanently. По умолчанию .timer(interval: 86400).
autoStartBool?Определяет, должен ли мониторинг автоматически запускаться. По умолчанию true.
differenceInt?Минимальное изменение в использовании диска (в байтах), необходимое для отправки уведомления. По умолчанию 1 байт.
probability IntВероятность того, что раз в день в фоновом режиме будет произведена проверка использования дискового пространства. По умолчанию 0 (мониторинг включён).

Описание FeatureObject.diskUsage()

DiskUsageObject используется для привязки конфигурации к отслеживаемым объектам и сценариям. Включает директории, папки и файлы с возможностью присвоения им тега для идентификации. Инициализируется следующими свойствами:

ПараметрТипОписание
pathStringВозвращает строковый путь объекта файловой системы в зависимости от его типа.
tagStringВозвращает тег, присвоенный объекту (директории, папке или файлу). Этот тег можно использовать для идентификации объекта при отслеживании использования дискового пространства.

DiskUsageObject имеет три варианта использования:

  • directory(path: FileManager.SearchPathDirectory, tag: String)

Представляет системную директорию (определённую через FileManager.SearchPathDirectory), например, директорию документов или кеша. Каждая директория может быть идентифицирована через заданный тег.

  • folder(path: String, tag: String)

Представляет папку с пользовательским путём (в виде строки). Позволяет отслеживать произвольные пользовательские директории на основе их путей и идентифицировать их через тег.

  • file(path: String, tag: String)

Представляет файл с конкретным путём. Как и в случае папок, файлы можно идентифицировать с помощью тега.

Отслеживание размеров каталогов и файлов

Чтобы проверить, что плагин подключён верно и действительно обрабатывает данные, установите для DiskUsage в качестве параметра probability 1:

import OKTracer let diskUsageObjects: [DiskUsageObject] = [ .file(path: "/Users/guest/1.txt", tag: "1.txt"), .directory(path: .documentDirectory, tag: ".documentDirectory"), .folder(path: "/Users/guest/Downloads", tag: "Downloads"), .folder(path: NSHomeDirectory(), tag: "homeDirectory"), .folder(path: Bundle.main.bundlePath, tag: "mainBundle") ] let diskUsageConfiguration = DiskUsageConfiguration(autoStart: true, excluded: ["TracerStorage", "SplashBoard"], notifyIfEquals: false, maxDepth: 200, maxEntries: 400, difference: 10000, isRecursive: true, observeMode: .timer(interval: 300)) let features: [FeatureConfiguration] = [.diskUsage(probability: 1)] let items: [FeatureObject] = [.diskUsage(objects: diskUsageObject, configuration: diskUsageConfiguration)] let tracerService = TracerFactory.tracerService(token: "Ваш appToken", features: features, items: items) tracerService.start()