miniReddit - это приложение для просмотра постов с Reddit.
miniReddit может загружать посты в режиме инкогнито, для авторизации можно использовать свой личный аккаунт или воспользовать этим:
- Login: miniredditaccount
- Psssword: fLyr&63fhFHf
Для работы miniReddit требуется CLIENT_ID
, который находится в конфигурацонном файле - /Configuration/Config.xcconfig.
Если он не работает, его можно получить самостоятельно по инструкции или написать мне на почту [email protected].
Для загрузки постов используется - Reddit API.
Авторизация происходит по протоколу OAuth2 - Reddit OAuth2.
В приложении не используются сторонние библиотеки.
Приложение адаптировано для работы в вертикальной и горизонтальной ориентации.
iOS Deployment Target - iOS 13.
Архитектура приложения в miniReddit строится на координаторах, фабриках, роутере и модулях.
Каждый модуль включает в себя View, ViewController, Model и Provider.
Внутри модуля все части общаются друг с другом через протоколы.
Provider(это viewModel/presenter/interactor и т.д.) - предоставляет данные и сервисы для работы модуля.
Общие сервисы закрыты протоколами и с использованием адаптеров они инжектятся в модули.
Работа miniReddit начинается со сборки и старта координатора в /Application/Lifecycle/SceneDelegate.swift.
В приложении 2 модуля Posts и Account, каждый собирается с использованием своей фабрики Posts factory и Account factory.
Есть 2 состояния: режим инкогнито и авторизован.
В режиме авторизован, при выполнении запросов к Reddit API, используется accessToken
, если его действие истекло, то будет вызван запрос на обновление токена с refreshToken
, после чего основной запрос будет выполнен с новым accessToken
- Реализация с fallback через unauthorizedFallback.
Хранилищем для токенов выступает Keychain.
Загрузка изображений постов в таблице выполняется с помощью Operation и OperationQueue с последующим кешированием. Реализация.
Для удобства авторизации по OAuth2 используется ASWebAuthenticationSession. Реализация.