Необходимо клонировать репозиторий https://git.miem.hse.ru/616/miemapp. Запустить XCode и открыть корневой файл проекта
При начале работы над задачей необходимо отвести ветку. Когда разработка закончена нужно сделать push в репозиторий и создать merge-request.
Приложение поддерживает версии iOS выше 12. Без крайней необходимости не отказываемся от старых версий.
Зависимости в проеке подулючаются через CocoaPods.
Текущие зависимости
Каждый модуль по сути является одним основным экраном, внутри которого может осуществляться своя навигация, независимо от главного приложения. Этому модулю также могут быть нужны доступ к постоянному хранилищу данных или сетевым запросам. Таким образом весь модуль можно свести к одной основной сущности, которая при инициализации принимает необходимые зависимости в виде аргументов, а затем предоставляет свой основной экран главному приложению. Затем на основе полученных экранов строится меню, которое позволяет открывать эти экраны. Это происходит подстановкой выбранного экрана в экран главного приложения.

Данный подход позволяет свести к минимуму количество точек интеграции модуля. Преимуществом этого является быстрая интеграция модуля, так как чтобы его экран отображался в приложении и его меню надо всего лишь создать сущность модуля и затем передать его экран в меню. Это позволяет снизить количество конфликтов при разработке сразу несколькими программистами. Также такая архитектура позволяет заменять одну реализацию модуля на другую, например, в случае смены дизайна интерфейса.
Каждый модуль может быть разработан внутри с использованием своей архитектуры. Это даёт возможность сторонним разработчикам гибкость и удобство выбора. Однако такой подход может привести к тому, что новым разработчикам будет трудно понять строение программы. Поэтому все модули имеют одинаковую архитектуру. Она основана на архитектурном шаблоне Model-View-View Model. Внутри основной сущности модуля создаются источник данных и основное представление на основе полученных зависимостей от основного приложения. Источник данных предоставляет модель для представления на основе данных с диска и из сети. Он также несёт ответственность за обновление данных в результате действий пользователя.
