Для чего это
Офлайн-поиск работает по уже загруженной истории. Для удаления нужно подключение к интернету; удалить сообщение у всех можно только там, где это разрешает Telegram.
В чатах остаётся всякое: пароль, отправленный в спешке, одноразовый код, API-ключ, номер карты, адрес. Собственный поиск Telegram найдёт слово, если вы помните, в каком чате оно было и в какой форме. TCleanner создаёт на устройстве простой индекс вашей истории и позволяет искать по всей истории сразу с помощью регулярного выражения, затем выбрать найденное и удалить — у всех, на всех устройствах, видя точное количество до удаления.
Приложение читает только ваш собственный аккаунт и никогда не отправляет сообщений. Оно индексирует ваши личные чаты и группы; каналы, на которые вы подписаны, индексируются, только если вы это включите.
Где данные
Сервера нет, как нет и аналитики, рекламы и трекеров. Единственные библиотеки — собственная TDLib от Telegram и локальная база данных GRDB. Индекс хранится в закрытом хранилище приложения и исключён из резервных копий. Сеанс хранится в зашифрованном каталоге данных TDLib, тоже закрытом и исключённом из резервных копий; ключ к нему — в Keychain с режимом «только на этом устройстве»: ключ может попасть в зашифрованную резервную копию устройства, но его нельзя восстановить на другом устройстве. Приложение обращается только к Telegram, как ваш клиент.
Те же шесть принципов есть в приложении, в разделе Настройки › Как это работает: на вашем устройстве; только Telegram; ничего третьим лицам; вы решаете, что удалять; ваш сеанс и индекс; диагностика — только если вы её экспортируете. Полный текст — в политике конфиденциальности.
Как это устроено
Нативное приложение для iPhone и iPad. Один Swift-пакет содержит домен и презентеры; SwiftUI отрисовывает снимок состояния и отправляет намерения обратно. К Telegram приложение обращается через TDLib с отключённой собственной базой сообщений, потому что индекс принадлежит этому приложению. Этот индекс — SQLite через GRDB, и поиск по нему — полный просмотр с ранней остановкой, а не словарный индекс: словарный индекс не может ответить на регулярное выражение.
Поведение описывается до того, как пишется код: одиннадцать спецификаций возможностей с исполняемыми сценариями, у каждого требования — замороженный идентификатор, на который ссылаются код и тесты. Тесты работают на тестовых реализациях с управляемыми часами. У проекта свой инструмент мутационного тестирования с целевым порогом 100%; его достигли все возможности. Индексация сама регулирует свой темп и продолжается после того, как приложение было принудительно закрыто. Удаление всегда у всех, всегда подтверждается точным количеством и никогда не выполняется по расписанию.
Статус
В App Store приложения пока нет. Встроенный демо-архив используется для разработки и тестирования без аккаунта Telegram. Исходный код закрыт.
Поддержка приложения и диагностика: support@kudravets.com. Общие вопросы: info@kudravets.com.
Неофициальное приложение. Использует Telegram API, не связано с Telegram.
Лицензии открытого ПО (на английском)



