/Weather-app

Simple and convenient weather app made with OpenWeatherMap API for educational purposes

Primary LanguageSwift

cover


Привет, это мой небольшой проект - приложение с прогнозом погоды
Я решил сделать очередное приложение с погодой, потому что на момент разработки у меня не было положительного опыта с подобными приложениями. Чаще всего я вижу захламленный интерфейс, в котором трудно сразу сориентироваться

Например:

otherWeatherApps

Это экраны приложений с прогнозом погоды от Apple, Яндекс и OpenWeather. Как можно заметить, большая часть информации, показанная на скриншотах, пользователю не нужна каждый раз, когда он хочет посмотреть прогноз погоды. Чаще всего пользователю нужено узнать только о текущей температуре на улице и прогноз на ближайшие 2-3 часа. Остальная информация захламляет обзор и только мешает. Экран превращается в газетную колонку, что тормозит восприятие информации, которая должна быть схвачена за одно мгновение

Так как это стало моим повседневным раздражителем, решение этой проблемы стало основной задачей

Базовые требования:

  • Использовать Core Data для хранения моделей данных
  • Использовать KeyChain/UserDefaults для пользовательских настроек
  • Не использовать сторонние библиотеки (кроме snapshot-тестов)
  • Использовать сеть
  • Минимальное количество экранов: 3
  • Обязательно использовать UINavigationController/TabBarController
  • Deployment Target: iOS 13
  • Покрытие модульными тестами 10% и более
  • Хотя бы один UI-тест через page object
  • Использование Архитектурных подходов и шаблонов проектирования
  • Верстка UI в коде
  • Обязательно использовать UITableView/UICollectionView
  • Кастомные анимации

Концепт

concept

Выше показан общий макет приложения с картой экранов. Здесь можно увидеть главный экран, на котором уже можно узнать всю основную информацию о сохраненных городах. На экране с информацией о погоде в выбранном городе находится почасовой прогноз, прогноз на неделю и характеристики текущей погоды

Темы приложения

themes

В настройках можно выбрать тему приложения. Систма тем полностью кастомизируемая. В проекте есть JSON файл, в который можно добавить свою тему с указанием новых цветов для каждого элемента приложения

Кастомные анимации

Переходы на экраны сопровождаются кастомной анимацией с наплывом
На экране с обзором прогноза погоды в выбранном городе можно увидеть анимацию navigation bar-а при скроле. Это было сделано для расширения пространства вокруг основного лейбла с градусами
Между разделом с почасовым прогнозом и прочими блоками информации есть большой пробел, который был сделан, чтобы блоки ниже не торчали. Эти блоки автоматически поднимаются при скроле вниз, что делает такой дизайн адаптивным

Весь UI был сверстан при помощи кода, без InterfceBuilder-а и Nib-ов


Архитектура и шаблоны проектирования

В основу архитектуры приложения лег MVC. Значительное расширение функционала не планируется, поэтому этой архитектуры достаточно для поставленной цели Для создания ячеек на главном экране используется шаблон проектирования Builder

Использование сети

Для получения данных используется сервис OpenWeather
Описание запросов, используемых в приложении есть на этой странице

Хранение данных

Для хранения данных о сохраненных городах используется Core Data, и для сохранения настроек приложения UserDefaults

Core Data - Весь функционал Core Data вынесен в отдельный класс WeatherCoreDataManager.swift
UserDefaults - Для работы с UserDefaults также был сделан отдельный класс UserDefaultsManager.swift


Прошлая версия

Есть старая версия этого приложения, сделанная в рамках Сбершколы. Там есть снапшот тесты и аналитика
Ссылка на раннюю версию


Хочешь сделать вклад в этот проект?

Супер, я с удовольствием принимаю пул реквесты!