Техническое задание описывает требования и детали реализации мобильного приложения «Расписание Путешествий». Готовое приложение предоставляет расписание транспорта и информацию о маршрутах с использованием API Яндекс.Расписания.
Цель проекта — создать мобильное приложения для iOS, которое позволит пользователям искать и просматривать расписание движения транспортных средств в различных городах, а также получать информацию о перевозчиках.
Основные задачи:
- Разработать пользовательский интерфейс с четырьмя основными и четырьмя второстепенными экранами.
- Интегрировать в приложение API Яндекс.Расписания, чтобы получать данные о расписании.
- Реализовать систему сторис с новостным контентом.
Все экраны описаны в Figma
-
Стартовый экран:
- Панель со сторис сверху экрана.
- Поисковые строки для выбора городов по направлениям «откуда» и «куда».
- Алгоритмы и действия:
- Пользователь нажимает на строку с плэйсходрером «откуда» и переходит на экран поиска отправной точки.
- Пользователь нажимает на строку с плэйсходрером «куда» и переходит на экран поиска города прибытия.
- Пользователь тапает по иконке сторис для открытия полноэкранного просмотра.
- Кнопка «найти» не отображается/скрыта до тех пор пока не заполнены обе строки «откуда» и «куда».
- Если обе строки заполнены, то кнопка «найти» отображается. Нажав на неё, пользователь переходит на экран расписания/выбора рейса.
-
Экран «Выбор города»:
- Поисковая строка в верхней части экрана для ввода названия города.
- Список городов под поисковой строкой, где пользователь может выбрать населённый пункт из предложенного списка.
- Алгоритмы и действия:
- Пользователь вводит название города в поисковую строку.
- По мере ввода происходит автоматический поиск/фильтрация и отображение подходящих городов в реальном времени.
- Пользователь выбирает город из предложенного списка, что приводит к переходу на следующий экран.
-
Экран станций:
- Список всех станций выбранного города.
- Возможность выбора станции.
- Алгоритмы и действия:
- Пользователь вводит название станции в поисковую строку или просматривает список всех доступных станций.
- Поиск станции также работает в режиме реального времени.
- После выбора станции пользователь возвращается к экрану выбора городов по направлениям «откуда» и «куда», на котором уже отображается кнопка «найти».
-
Экран расписания:
- Отображение расписания по выбранным станциям.
- Кнопка перехода на экран с фильтрами для настрокий сортировки по пересадкам и времени отправления.
- Алгоритмы и действия:
- На этом экране пользователь может просматривать все доступные рейсы из выбранной станции.
- Пользователь выбирает рейс, чтобы увидеть подробную информацию о нем и о перевозчике.
-
Экран уточнения параметров маршрута:
- Отображение и выбор фильтров по времени отправления.
- Включение/отключение показа маршрутов с пересадками.
- Алгоритмы и действия:
- Возможность уточнения поиска по времени отправления и наличию пересадок.
-
Экран информации о перевозчике:
- Информация о перевозчике, включая контактные данные.
- Алгоритмы и действия:
- На экране отображается подробная информация о выбранном перевозчике, включая логотип, название компании, веб-сайт и номер телефона.
- Пользователь может перейти на сайт перевозчика или позвонить по номеру, используя соответствующие ссылки или кнопки.
-
Экран настроек:
- Переключение между светлой и тёмной темой интерфейса.
- Переход на просмотр пользовательского соглашения.
- Информация об использовании API Яндекс Расписания.
- Информация о версии приложения.
- Алгоритмы и действия:
- Пользователь может изменить тему приложения с темной на светлую и обратно.
- Возможность просмотра пользовательского соглашения.
- Возможность просмотра версии приложения.
- Информация о том, что приложение использует API Яндекс.Расписаний.
-
Экран «Сторис» (Stories Screen):
- Сторис содержит визуальные и текстовые истории, связанные с путешествиями, новостями или обновлениями.
- В каждой сторис присутствуют изображения и связанный с ними текст.
- В верхней части экрана присутствуют индикаторы: количество сториз и время до автоматического закрытия/перехода к следующей.
- Алгоритмы и доступные действия:
- В полноэкранном режиме пользователь может листать сторис вправо или влево, тапая по соответствующим сторонам экрана или свайпая по экрану в соотвествующем направлении.
- Временные индикаторы на верхней части экрана показывают прогресс просмотра текущей сторис, показывая время до переключения на следующую сторис.
- Время просмотра одной сторис 10 секунд.
- Пользователь может закрыть сторис и вернуться на стартовый экран, тапнув по крестику в правом верхнем углу экрана или свайпнув сторис сниз.
- Сторис автоматически переключаются после завершения времени просмотра, позволяя пользователю увидеть следующую сторис без вмешательства.
- После просмотра последней сторис, экран автоматически закрывается.
- Навигация между экранами типа master-detail.
- Таббар для перехода к начальному экрану и экрану настроек.
- Для показа сторис окно отображается модально.
- Архитектура: MVVM
- Поддержка iOS версии 15.0 и выше.
- Язык программирования: Swift 5.x.
- Использование SwiftUI при имплементации интерфейса.
- Адаптивный дизайн для поддержки различных размеров экранов.
- Реактивное программирование с использованием Combine.
- Асинхронное программирование с использованием async/await.
- Кодогенерация сетевого слоя.
- Соответствие SOLID. Примение паттернов.
- Для обеспечения полной функциональности приложения, нужно реализовать сетевой слой, используя кодогенерацию для всех необходимых запросов.
- Все запросы к API должны выполняться асинхронно с использованием структурированной многопоточности async/await. Ошибки должны корректно обрабатываться и отображаться пользователю в удобной форме.
- Должна быть предусмотрена обработка состояний загрузки, ошибок и пустых состояний.
- Интерфейс должен быть адаптирован для использования в темной и светлой теме.
- Должено быть реализовано сохранение выбранных пользователем настроек.
- Тексты и медиа для сторис должны загружаться из локальных источников.
- Необходимо внедрить систему аналитики для отслеживания поведения пользователя и улучшения приложения на основе этих данных.
- Приложение должно поддерживать адаптивный дизайн для различных размеров экранов и ориентаций.
- Все текстовые данные должны быть локализованы и поддерживать как минимум русский и английский языки.
- Документация кода и комментарии должны быть написаны на английском языке для универсальности и доступности.
- Соответствие дизайну Human Interface Guidelines от Apple.
- Интуитивно понятные элементы управления и взаимодействие с ними.
- Необходимо разработать комплексный план тестирования, включающий unit-тесты, UI-тесты.
- Приложение должно пройти тестирование на реальных устройствах с различными версиями iOS.
- Проектирование и разработка пользовательского интерфейса: 6 недель.
- Интеграция API Яндекс Расписания: 2 недели.