Skip to content

surfstudio/iOS-tech-task-weather-app-swiftUI

Repository files navigation

Weather App

Репозиторий содержит приложение для просмтора погоды. Фичи:

  • При первом в ходе в список городов добавляется Минск и Москва
  • При входе в приложение пользователь попадает на детальный экран погоды по его локации
  • Из детального экрана можно попасть на список городов
  • В писке можно выбрать другой город для детального просмотра
  • В списке можно удалить город нажав "Изменить"
  • В спсике можно доабвить новый город
  • В поиске работают подсказки
  • При выборе города из поиска он автоматически добавляется в БД и пользователь попадает на детальный экран этого города
  • Кеширование данных с TTL = 3 часа. То есть спустя 3 часа данные обновляются при необходимости. То есть обновится только то, что "протухло"

Что использовалось

Сервис данных о погоде Сервис геокодинга

В качестве БД использовалась CoreData

Структура проекта

Appliaction

Содержит все что касается в целом приложения и его запуска

Flows

Содержат экраны. Каждый экран представлен набором:

  • Configurator - для того чтоб инжектить зависимости
  • Presenter - поставщик данных во View
  • View - для отображения данных

Более подробнее об архитектуре

Library

Содержит переиспользуемые компоненты или утилиты которые используются по всему приложению

Styles

Содержитс тили для UI-компонентов. Стиль должен инкапсулировать конфигурацию внешнего вида компонента. Стили применяются только для примитивов.

UILabel

Именование стилей лейбла производится в формате FontWeightSizeColorAlignment. Пример для шрифта Montserrat с весом Semibold размера 48 цвета textGrey с выравниванием по центру – MS48TextGreyCenter. Для шрифтов SF Pro Text и SF Pro Display использовать первую букву последнего слова T и D соответственно, чтобы не усложнять запись.

UIСontrol, UIView

Название берется из 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.

Models

Содержит 3 слоя моделей

Entry - модели для парсинга днных пришедших от сервера. Четко отражают модели данных сервера Entity - бизнес-сущности. Часть похожи на серверные модели, однако могут содержать логику форматирования и прочую логику ограниченную доменным контекстом Cache - модели для БД. Повторяют Entity модели

Resources

Ресурсы приложения - ассеты, строки, шрифты e.t.c

Services

Содержит сервисы для работы с источниками данных. Сами по себе сервисы могут быть использвоаны в презентерах, однако иногда несколько сервисов инкапсулируются репозиторием - CityRepo который и реализует логику кеширования. Более подробне можно прочесть в комментариях.

CityRepo покрыт тестами, доказявающими, что он работает так как от него ожидается.

ThirdParty

Содержит расширения библиотечных компонентов

Как собрать

make init # Подтянет все ruby-зависимости и все pod-ы
make pbxprodj # Создасть .pbxprodj - используется XCodeGen
open Weather.xcworkspace