Привет, это мой небольшой проект - приложение с прогнозом погоды
Я решил сделать очередное приложение с погодой, потому что на момент разработки у меня не было положительного опыта с подобными приложениями. Чаще всего я вижу захламленный интерфейс, в котором трудно сразу сориентироваться
Это экраны приложений с прогнозом погоды от Apple, Яндекс и OpenWeather. Как можно заметить, большая часть информации, показанная на скриншотах, пользователю не нужна каждый раз, когда он хочет посмотреть прогноз погоды. Чаще всего пользователю нужено узнать только о текущей температуре на улице и прогноз на ближайшие 2-3 часа. Остальная информация захламляет обзор и только мешает. Экран превращается в газетную колонку, что тормозит восприятие информации, которая должна быть схвачена за одно мгновение
Так как это стало моим повседневным раздражителем, решение этой проблемы стало основной задачей
- Использовать Core Data для хранения моделей данных
- Использовать KeyChain/UserDefaults для пользовательских настроек
- Не использовать сторонние библиотеки (кроме snapshot-тестов)
- Использовать сеть
- Минимальное количество экранов: 3
- Обязательно использовать UINavigationController/TabBarController
- Deployment Target: iOS 13
- Покрытие модульными тестами 10% и более
- Хотя бы один UI-тест через page object
- Использование Архитектурных подходов и шаблонов проектирования
- Верстка UI в коде
- Обязательно использовать UITableView/UICollectionView
- Кастомные анимации
Выше показан общий макет приложения с картой экранов. Здесь можно увидеть главный экран, на котором уже можно узнать всю основную информацию о сохраненных городах. На экране с информацией о погоде в выбранном городе находится почасовой прогноз, прогноз на неделю и характеристики текущей погоды
В настройках можно выбрать тему приложения. Систма тем полностью кастомизируемая. В проекте есть JSON файл, в который можно добавить свою тему с указанием новых цветов для каждого элемента приложения
Переходы на экраны сопровождаются кастомной анимацией с наплывом
На экране с обзором прогноза погоды в выбранном городе можно увидеть анимацию navigation bar-а при скроле. Это было сделано для расширения пространства вокруг основного лейбла с градусами
Между разделом с почасовым прогнозом и прочими блоками информации есть большой пробел, который был сделан, чтобы блоки ниже не торчали. Эти блоки автоматически поднимаются при скроле вниз, что делает такой дизайн адаптивным
Весь UI был сверстан при помощи кода, без InterfceBuilder-а и Nib-ов
В основу архитектуры приложения лег MVC. Значительное расширение функционала не планируется, поэтому этой архитектуры достаточно для поставленной цели Для создания ячеек на главном экране используется шаблон проектирования Builder
Для получения данных используется сервис OpenWeather
Описание запросов, используемых в приложении есть на этой странице
Для хранения данных о сохраненных городах используется Core Data, и для сохранения настроек приложения UserDefaults
Core Data - Весь функционал Core Data вынесен в отдельный класс WeatherCoreDataManager.swift
UserDefaults - Для работы с UserDefaults также был сделан отдельный класс UserDefaultsManager.swift
Есть старая версия этого приложения, сделанная в рамках Сбершколы. Там есть снапшот тесты и аналитика
Ссылка на раннюю версию
Супер, я с удовольствием принимаю пул реквесты!