WeatherTestApp2020

Выполнение приложения согласно техническому заданию Тестовое приложение

Краткое описание

Данное приложение состоит из двух экранов:

  1. Отображение прогноза погоды для текущего местоположения пользователя
  2. Возможность добавления/редактирования комментария к текущему городу и его погодным условиям

Приложение работает с нативным модулем CoreLocation для получения геопозиции пользователя и определения города и страны.

Приложение работает с сетью: Запрос на получение прогноза погоды средствами сервиса "openweathermap"

  • Приложение полностью написано без использования сторибордов (все реализовано в ксибах).
  • В приложении нет ни одной зависимости (cocoapods, carthage, spm).
  • Работа с сетью реализована исключительно нативными средствами.
  • В приложении реализована адаптация под разные размеры экранов (от 4 до 6 дюймов).
  • Обработано нажатие вне поля ввода для скрытия клавиатуры.
  • Реализованы индикаторы загрузки для понимания процесса пользователем (activity indicator).
  • Использованы расширения для кастомизации настроек: UIViewController, UIXib, UserError.

Архитектура

Приложение разделено на модули (в данном случае, это модуль прогноза и модуль добавления комментария). Каждый модуль состоит из:

Assembly

Элемент, который отвечает за создание модуля, подготовку модели, подготовку вью, связывание их, имеет публичное свойство 'view', которое отдается вызывающему модулю, для правильной подготовке и показу модуля.

Model (ViewModel)

Может включать в себя логику интерактора, презентера, вью модели и пр. (если таковые не представлены в проекте или выбран сокращенный архитектурный подход). Основной задачей модели является подготовка данных, работа с ними, передача данных о вью.

View (ViewController)

Является классическим элементом отображения данных и работе с действиями пользователя. Имея связь с моделью, динамически реагирует на изменения модели, обновляя свое состояние, обращается к модели если контекст (действия пользователя) требуют обновления (изменения) данных.

Что могло бы быть дополнительно реализовано: Локализация приложения. Реализация унифицированного доступа к строкам и ресурсам приложения (R.swift). Добавлены анимации и плавные переходы. Возможность загрузки уникальных фотографий местоположения пользователя с помощью сервиса google places API. Хранение перечня пользовательских комментариев с ключом по городу, а так же с сохранением даты добавления. Реализация БД для хранения данных. Реализция keychain для хранения данных и синхронизации между устройствами. Возможность поделиться текущими данными посредством социальных сетей. Реализация онбординга для пользователя, с описанием возможностей приложения. Реализация отображения прогноза на несколько дней вперед. Поддержка нескольких городов с возможностю просматривать актуальные погодные данные.

Дополнительно можно ознакомиться с погодным приложением такого же типа в этом репозитории.