📊 StatApp
Тестовое задание iOS-разработчика
StatApp — приложение для просмотра статистики профиля: посетители, демография (пол и возраст) и динамика наблюдателей. Отдельный модуль StatLogic отвечает за расчёты и хранение данных, чтобы UI оставался тонким и легко поддерживаемым.
✨ Основные возможности • 📈 Карточка «Посетители» Краткое резюме: текущее количество и изменение относительно начала периода (рост / падение / без изменений). • 📊 Линейный график посещений Переключение режимов: • «По дням» • «По неделям» • «По месяцам» • 👥 Блок «Чаще всех посещают ваш профиль» Список топ-посетителей с именем, возрастом и аватаром-инициалами. • ⚧ Блок «Пол и возраст» • Кольцевая диаграмма распределения по полу (М / Ж) • Легенда с цветными точками • Горизонтальные бары по возрастным группам (0–17, 18–24, 25–34, 35–44, 45+) • Фильтрация по периодам: Сегодня / Неделя / Месяц / Все время • 👀 Блок «Наблюдатели» Две строки: • «Новые наблюдатели» • «Перестали наблюдать» У каждой — значение и мини-график тренда. • 📱 Современный кастомный UI на UIKit с использованием кастомных вью и PinLayout.
⸻
🧱 Архитектура проекта
Приложение разделено на два слоя: • StatApp (iOS-клиент) — UIKit-экран со стэком кастомных вью: • StatisticsViewController + вью StatTrendRowView, VisitorsLineChartView, GenderDonutChartView, AgeGroupRowView, TopVisitorRowView и т. д. • StatLogic (Swift Package) — доменная логика и работа с данными: • менеджер EpisodeStatisticsManager • модели EpisodeStatistics, EpisodeUser и др. • преобразование DTO → доменные модели → данные для UI
Используются принципы разделения ответственности: • UI ничего не знает о способе хранения данных • StatLogic можно переиспользовать в другом клиенте
⸻
🛠 Используемые технологии • UIKit — основной интерфейс • PinLayout — декларативная верстка без Auto Layout • RxSwift — реактивное обновление данных и биндинги • Swift Package Manager — подключение модуля StatLogic • Realm (через RealmProvider в StatLogic) — локальное хранилище статистики • Кастомные графики и диограммы для отображения трендов и распределений
