Репозиторий содержит приложение для просмтора погоды. Фичи:
- При первом в ходе в список городов добавляется Минск и Москва
- При входе в приложение пользователь попадает на детальный экран погоды по его локации
- Из детального экрана можно попасть на список городов
- В писке можно выбрать другой город для детального просмотра
- В списке можно удалить город нажав "Изменить"
- В спсике можно доабвить новый город
- В поиске работают подсказки
- При выборе города из поиска он автоматически добавляется в БД и пользователь попадает на детальный экран этого города
- Кеширование данных с TTL = 3 часа. То есть спустя 3 часа данные обновляются при необходимости. То есть обновится только то, что "протухло"
Сервис данных о погоде Сервис геокодинга
В качестве БД использовалась CoreData
Содержит все что касается в целом приложения и его запуска
Содержат экраны. Каждый экран представлен набором:
- Configurator - для того чтоб инжектить зависимости
- Presenter - поставщик данных во View
- View - для отображения данных
Более подробнее об архитектуре
Содержит переиспользуемые компоненты или утилиты которые используются по всему приложению
Содержитс тили для UI-компонентов. Стиль должен инкапсулировать конфигурацию внешнего вида компонента. Стили применяются только для примитивов.
Именование стилей лейбла производится в формате FontWeightSizeColorAlignment
.
Пример для шрифта Montserrat
с весом Semibold
размера 48
цвета textGrey
с выравниванием по центру – MS48TextGreyCenter
.
Для шрифтов SF Pro Text
и SF Pro Display
использовать первую букву последнего слова T
и D
соответственно, чтобы не усложнять запись.
Название берется из Figma
из раздела UI Kit
. Например, для кнопки со скрина стиль должен называться mainActive
, если конфигурация стиля происходит только для одного состояния. В случае конфигурации всех состояния в одном стиле, стиль должен называться main
.
Если названия нет в Figma
проверить, есть ли такой реюзный компонент в проекте, возможно он уже сконфигурирован под ваш кейс.
Если нет названия в Figma
и нет реюзного компонента, то необходимо попросить дизайнеров назвать этот объект.
Если это не реюзный компонент, то называть по кейсу использования.
Цвета в проекте работают через Assets
. При создании нового цвета необходимо в Assets
перейти в папку Color
и добавить новый цвет. Например, для цвета со скрина необходимо создать новый цвет и назвать его lightBlue
.
Если у элемента есть opacity
и нет названия цвета, то можно использовать уже существующее название и добавить к нему opacity
. Например, для черного цвета с прозрачностью 70%, необходимо создать цвет black70
.
Если у какого-то цвета нет названия и он не является производным базового с другой прозрачностью, необходимо написать в чат дизайнерам, чтобы они добавили название.
Изображения в проекте работают через Assets
. При создании нового изображения необходимо в Assets
перейти в папку Image
и добавить новое изображение. Изображения стоит разделять на директории в соответсвии с элементами, для которого они используются. Например, для элемента RadioButton
необходимо создать директории RadioButton
и поместить изображения radioButtonOn
и radioButtonOff
в эту директорию.
При создании новой директории необходимо проставить галочку Provides Name Space
.
Изображения добавляем в проект в формате PDF
.
При добавлении изображения необходимо проставить Scales = Single scale
и галочку Preserve Vector Data
.
Содержит 3 слоя моделей
Entry - модели для парсинга днных пришедших от сервера. Четко отражают модели данных сервера Entity - бизнес-сущности. Часть похожи на серверные модели, однако могут содержать логику форматирования и прочую логику ограниченную доменным контекстом Cache - модели для БД. Повторяют Entity модели
Ресурсы приложения - ассеты, строки, шрифты e.t.c
Содержит сервисы для работы с источниками данных. Сами по себе сервисы могут быть использвоаны в презентерах, однако иногда несколько сервисов инкапсулируются репозиторием - CityRepo
который и реализует логику кеширования. Более подробне можно прочесть в комментариях.
CityRepo
покрыт тестами, доказявающими, что он работает так как от него ожидается.
Содержит расширения библиотечных компонентов
make init # Подтянет все ruby-зависимости и все pod-ы
make pbxprodj # Создасть .pbxprodj - используется XCodeGen
open Weather.xcworkspace