Дипломный проект курса. Работа в команде (практика с git), 4 эпика - задачи, по одному на каждого участника. Результаты на момент сдачи: работал один (старый Xcode), реализовал 2 эпика. Работу в команде имитировал.
Итоговый ревью от Рената Галямова
Цели приложения (эпики):
- просмотр коллекций NFT - эпик Каталог;
- просмотр и покупка NFT (имитируется) - эпик Корзина;
- просмотр рейтинга пользователей - эпик Статистика;
- просмотр и редактирование профиля пользователя - эпик Профиль.
Дополнительным (необязательным) функционалом являются:
- экран просмотра NFT
- полная карточка NFT
- локализация (ru en)
- тёмная тема
- статистика на основе Яндекс Метрики
- экран авторизации
- экран онбординга
- алерт с предложением оценить приложение (реализовал: на основе количества сделанных лайков)
- сообщение о сетевых ошибках
- кастомный launch screen
- локальный поиск по таблице/коллекции
- кэширование результатов запросов в сеть
- пред-сортировка на бэкенде
- хранение выбранных способов сортировки
- используется Reachability и показывается сообщение об отсутствии интернета
- сетевой поиск по таблице/коллекции
- реализованы debounce или throttle
- Unit-тесты
- UI-тесты
- скриншот-тесты
Приложение помогает пользователям просматривать и покупать NFT (Non-Fungible Token). Функционал покупки иммитируется с помощью мокового сервера.
- Приложение демонстрирует каталог NFT, структурированных в виде коллекций
- Пользователь может посмотреть информацию о каталоге коллекций, выбранной коллекции и выбранном NFT.
- Пользователь может добавлять понравившиеся NFT в избранное.
- Пользователь может удалять и добавлять товары в корзину, а также оплачивать заказ (покупка иммитируется).
- Пользователь может посмотреть рейтинг пользователей и информацию о пользователях.
- Пользователь может смотреть информацию в своем профиле, включая информацию об избранных и принадлежащих ему NFT.
Полное описание функциональных требований находится в техническом задании
- Убедитесь что на компьютере установлен Xcode версии 13 или выше.
- Загрузите файлы YP-FakeNFT проекта из репозитория.
- Откройте файл проекта в Xcode.
- Возможно потребуется отключить SwiftLint (версия 44) в фазах сборки.
- Запустите активную схему.
[In progress]
- MVVM + Coordinator + DI
- Layout: Anchors, CompositionalLayout
- Factory, Repository, Observer, PropertyWrapper, UseCase
- UserDefaults
- SPM
- "Application": главные координатор и DI контейнер
- "Core": фабрики, DTO, интерфейсы, модели и UseCases
- "Presentation": независимые флоу со своим координатором и набором сцен согласно эпику, а также фабрики вью, общие сцены и общие вью
- "Library": протоколы, расширения и утилиты + слой для работы с сетью
- "Resources": файлы ресурсов приложения и поддержки работы с ними, файлы локализации.
- Kingfisher - для загрузки и кэширования изображений из Интернета;
- ProgressHUD - для оповещения пользователя о статусе загрузки.
- main - стабильные версии приложения
- develop - ветка для разработки и создания PR для ревью
- base-epics - ветка начальной/общей конфигурации
- epic-NAME - ветки для работы над эпиками/флоу, создаются на основе начальной конфигурации из
base-epics
, могут брать новые данные изbase-epics
, вливаются через PR в develop - feature/NAME - ветки для реализация дополнительного функционала
- Названия коммитов должны быть согласно гайдлайну
- Тип коммита должен быть только в нижнием регистре (feat, fix, refactor, docs и т.д.)
- Должен использоваться present tense ("add feature" not "added feature")
- Должен использоваться imperative mood ("move cursor to..." not "moves cursor to...")
feat:
- это реализованная новая функциональность из технического задания (добавил поддержку зумирования, добавил footer, добавил карточку продукта). Примеры:
feat: add basic page layout
feat: implement search box
feat: implement request to youtube API
feat: implement swipe for horizontal list
feat: add additional navigation button
fix:
- исправил ошибку в ранее реализованной функциональности. Примеры:
fix: implement correct loading data from youtube
fix: change layout for video items to fix bugs
fix: relayout header for firefox
fix: adjust social links for mobile
refactor:
- новой функциональности не добавлял / поведения не менял. Файлы в другие места положил, удалил, добавил. Изменил форматирование кода (white-space, formatting, missing semi-colons, etc). Улучшил алгоритм, без изменения функциональности. Примеры:
refactor: change structure of the project
refactor: rename vars for better readability
refactor: apply prettier
docs:
- используется при работе с документацией/readme проекта. Примеры:
docs: update readme with additional information
docs: update description of run() method
style: clean up
- корректирую/улучшаю стиль и читаемость кода, удаляю мертвый код
В проекте используются:
- SwiftLint - для обеспечения соблюдения стиля и соглашений Swift (версия 44, так как старый Xcode, возможно потребуется отключить в фазах сборки)
brew update
brew install swiftlint
- Live Preview с помощью SwifUI
#if canImport(SwiftUI) && DEBUG
import SwiftUI
struct ViewProvider: PreviewProvider {
static var previews: some View {
let viewController = ViewController()
let labelView = viewController.makeWelcomeLabel() as UIView
let labelView2 = viewController.makeWelcomeLabel() as UIView
Group {
viewController.preview()
VStack(spacing: 0) {
labelView.preview().frame(height: 100).padding(.bottom, 20)
labelView2.preview().frame(height: 100).padding(.bottom, 20)
}
}
}
}
#endif
- Инструментом для дизайна является Figma
- Дизайн приложения
- Постоянно обновляется, отслеживать здесь - скопировать на диск и открывать локально.