Приложение для iOS, позволяющее проанализировать данные пользовательской активности и экспортировать реузльтат анализа в файл.
Ссылка на описание задачи:
Проект содержит зависимости только от стандартных библиотек Apple, дополнительная установка не требуется.
Помимо основных требований учтено:
- Файл содержит противоречащие данные из раных источников активности.
- Запустить приложение
- Нажать кнопку Analyze
- Дождаться завершения анализа
- Нажать кнопку Share После нажатия на кнопку Share покажется стандартное окно шаринга iOS, и в лог консоли выведется путь до файла с результатом.
Проект можно разделить на 4 условных слоя:
- Бизнес слой
- Сервисный слой
- Интерфейс
Состоит из основного интерфейса модели:
- Менеджер
- WalkActivityManager
- Сущности:
- WalkActivityRecord
- WalkHourActivity
- WalkDayActivity
- Вспомогательные компоненты:
- WalkActivityParser
- WalkActivityAnalyzer
- WalkActivityExporter
Представляет из себя фасад над всей моделью данных и представляет простой интерфейс для доступа к функциям анализа.
Работа с ним осуществляется посредством методов analyze(...)
и exportResults()
, а так же свойства делегата через протокол WalkActivityManagerDelegate
.
Стркутура, содержащая входные данные для анализа:
- startDate
- endDate а так же вспомогательные свойства и методы для работы с объектами.
Класс, содержащий агрегированные данные об активности пользователя для определенного астрономического часа и позволяет:
- расчитать эпизоды хотьбы с учетом требований к минимальной длительности активности и минимального интервала между эпизодами;
- расчитать Balance Point для данного часа.
Класс, содержащий агрегированные данные о накопленных Balance Point в течение определенного дня и позволяет расчитать Balance Day для данного дня.
Класс-обертка, позволяеющий WalkActivityManager
в удобном виде получить входные данные для анализа. Содержит вспомогательные объекты из сервисного слоя и данные о формате файла, позволяющие его считать.
Операции работы с файлом выполняются асинхронно в отдельной очереди GCD.
Класс-обертка, позволяющий WalkActivityManager
передать на анализ данные о зарегистрированных активностях и получить результат по дням.
Операции анализа выполняются асинхронно в отдельной очереди GCD.
Класс-обертка, позволяющий WalkActivityManager
передать результат анализа и получить ссылку на экспортированный файл.
Операция экспорта выполняется асинхронно в отдельной очереди GCD.
Состоит из вспомогательных классов:
TextFileReader
- осуществляет построчное чтение текстового файла.CSVParser
- осуществляет парсинг строки файла и преобразование в массив строк.
- Хранит объект класса
WalkActivityManager
- Является делегатом
WalkActivityManager
и обрабатывает события парсинга, анализа и экспорта. - Управляет состоянием элементов
MainView
- Обрабатывает события
MainView
- Инкапсулирует работы с контролами UIKit
- Представляет интерфейс для управления видимостью и доступностью элементов интерфейса
- Обрабатывает события интерфейса и передает
WalkActivityManager
Верстка экрана приложения и связь с MainView
.