Приложение помогает пользователям просматривать и покупать NFT (Non-Fungible Token). Функционал покупки имитируется с помощью mock-сервера.
Цели приложения:
- Просмотр коллекций NFT;
- Просмотр и покупка NFT (имитируется);
- Просмотр рейтинга пользователей.
- Приложение демонстрирует каталог NFT, структурированных в виде коллекций.
- Пользователь может просматривать информацию о каталоге коллекций, выбранной коллекции и отдельном NFT.
- Пользователь может добавлять понравившиеся NFT в избранное.
- Пользователь может управлять корзиной: добавлять/удалять товары и имитировать оплату.
- Пользователь может просматривать рейтинг пользователей и их профили.
- Пользователь имеет доступ к личному профилю с информацией о своих NFT и избранных коллекциях.
Дополнительный (необязательный) функционал:
- Локализация;
- Тёмная тема;
- Интеграция с Яндекс Метрикой;
- Экран авторизации;
- Экран онбординга;
- Алерт с предложением оценить приложение;
- Обработка сетевых ошибок;
- Кастомный экран загрузки (launch screen);
- Поиск по коллекциям/таблицам.
- Отображает таблицу (
UITableView
) с коллекциями NFT. - Для каждой коллекции указано:
- Обложка;
- Название;
- Количество NFT.
- Кнопка сортировки: выбор критерия сортировки обновляет таблицу.
- Индикатор загрузки (
UIActivityIndicator
) отображается во время загрузки данных. - Нажатие на ячейку открывает экран коллекции NFT.
- Содержит:
- Обложку и название коллекции;
- Описание коллекции;
- Имя автора (ссылка на сайт в
WKWebView
); - Коллекцию NFT (
UICollectionView
).
- Каждая ячейка NFT включает:
- Изображение;
- Название;
- Рейтинг;
- Стоимость (в ETH);
- Кнопку добавления в избранное (иконка сердца);
- Кнопку добавления в корзину (отображает крестик при наличии NFT в корзине).
- Нажатие на ячейку открывает экран NFT (реализуется наставником).
- Таблица (
UITableView
) с NFT в корзине. Для каждого NFT указано:- Изображение;
- Название;
- Рейтинг;
- Цена;
- Кнопка удаления.
- При удалении отображается экран подтверждения:
- Изображение NFT;
- Текст подтверждения;
- Кнопки «Удалить»/«Отмена».
- Кнопка сортировки в верхней части экрана.
- Панель внизу: общее количество NFT, сумма, кнопка оплаты.
- Индикатор загрузки отображается во время загрузки данных.
- Нажатие на кнопку оплаты открывает экран выбора валюты.
- Коллекция (
UICollectionView
) с валютами. Для каждой валюты:- Логотип;
- Полное и сокращённое название.
- Ссылка на пользовательское соглашение (открывается в веб-вью
WKWebView
). - Кнопка оплаты отправляет запрос:
- При успехе — подтверждение;
- При ошибке — всплывающее окно с кнопками «Повторить»/«Отмена».
- Содержит:
- Фото пользователя;
- Имя и описание;
- Таблицу (
UITableView
) с пунктами:- «Мои NFT» (переход к списку NFT);
- «Избранные NFT» (переход к избранным);
- «Сайт пользователя» (открывается в веб-вью).
- Кнопка редактирования профиля (изменение имени, описания, фото, сайта).
- Таблица (
UITableView
) с NFT пользователя. Каждая ячейка содержит:- Иконку NFT;
- Название;
- Автора;
- Цену (в ETH).
- Кнопка сортировки. При отсутствии NFT — сообщение.
- Коллекция (
UICollectionView
) с NFT из избранного. Каждая ячейка содержит:- Иконку;
- Кнопку удаления из избранного (иконка сердца);
- Название;
- Рейтинг;
- Цену (в ETH).
- При отсутствии избранных NFT — сообщение.
- Таблица (
UITableView
) с пользователями. Для каждого указано:- Место в рейтинге;
- Аватар;
- Имя;
- Количество NFT.
- Кнопка сортировки. Нажатие на ячейку открывает профиль пользователя.
- Содержит:
- Фото и имя;
- Описание;
- Кнопку перехода на сайт;
- Возможность просмотра коллекций пользователя.
- Коллекция (
UICollectionView
) с NFT. Каждая ячейка содержит:- Иконку;
- Кнопку избранного;
- Название;
- Рейтинг;
- Цену (в ETH);
- Кнопку корзины.
Доступна на экранах: «Каталог», «Корзина», «Мои NFT», «Статистика».
Настройки сохраняются локально через UserDefaults
и восстанавливаются после перезапуска.
Значения по умолчанию:
- Каталог — по количеству NFT;
- Корзина — по названию;
- Мои NFT — по рейтингу;
- Статистика — по рейтингу.
- Минимальная версия iOS: 17.0 и выше;
- Работоспособность: проект компилируется без ошибок и запускается в симуляторе.
- Фреймворк для верстки: UIKit;
- Архитектурный паттерн: Выбрать между MVC/MVP/MVVM
- Компоненты архитектуры и ответственность между ними чётко разделены: то, что должно быть
Presenter
, не названоView
. - Данные обрабатываются через
struct
илиclass
с соблюдением принципов инкапсуляции. - Классы названы правильно. Компоненты архитектуры связаны корректно.
- Реализована обработка задач с использованием
GCD
и подходящимQoS
- Реализовано правильное использование многопоточности, чтобы избежать
race conditions
иdeadlocks
черезDispatchQueue
- Используется
URLSession
для сетевых запросов.
- Запрещено: Swift Concurrency (
async/await
,actor
); - Обязательно: обновление UI только из главного потока
Main Thread
. - Используется: GCD (
DispatchQueue
,DispatchGroup
);