Xcode 12
- Нужно склонировать репозиторий: git clone
- Установить SwiftPM зависимости
- Запустив приложение (схема iCoffee), нажать на иконку корзины и зарегистрироваться. Без регистрации доступен просмотр товаров, но не доступно добавление в корзину и оформление заказа.
- Для установки виджета нужно запустить схему iCoffeeWidgetExtension
Приложение является клиент-серверным. Доступен функционал регистрации аккаунта по email и паролю, аутентификации, верификации email, восстановления пароля, дополнение учетных данных, выход. Кофе сгруппировано по категориям, список товаров строится на основе данных с сервера. В детальной карточке товара можно почитать описание и положить в корзину. Также можно просмотреть корзину, удалить из нее товар, оформить заказ и выбрать способ оплаты. Приложение адаптировано для темной и светлой темы.
Вся регистрация/аутентификация аккаунта происходит только при попытке входа в корзину. Вход в аккаунт возможен только после верификации электронной почты. Доступ к корзине возможен только после входа и завершения регистрации с заполнением данных, нужных для обработки заказа. После первого успешного входа предлагается создать пинкод. В дальнейшем при входе также можно пользоваться TouchId. Для сброса пинкода нужно осуществить выход.
Для установки виджета нужно запустить схему iCoffeeWidgetExtension. На виджете выводится информация о текущей акции с изображением товара. Данные получаются из Cloud Firestore. При клике на виджет осуществляется переход в основное приложение.
Клиент-серверная синхронизация данных реализована посредством облачных сервисов Firebase: Authentication и Cloud Firestore. Данные кешируются на устройстве средствами библиотеки Firebase. Реализована обработка ошибок, в случае неуспешной аутентификации и других сетевых ошибок, а также вывод аллертов. Для упорядочения работы с асинхронными вызовами Firebase, читаемости и снижением количества completion-ов, некоторые функции Firebase обернуты в Combine Future, а также используется библиотека готовых combine оберток - CombineFirebase. Чтобы упростить маппинг данных используется Codable и библиотека CodableFirebase.
- SwiftUI
- Combine (для биндинга view models со View)
- LocalAuthentication (для работы с TouchId)
- KeychainAccess (для сохранения пинкода и пароля в связке ключей)
- Firebase
- CodableFirebase
- CombineFirebase (обертка над Firebase для работы с Firebase в реактивном стиле)
- Для работы с аутентификацией/регистрацией использованы промисы на основе нативного Combine Future