ImageFeed — iOS-приложение для просмотра изображений из Unsplash с авторизацией через OAuth 2.0.
Приложение позволяет просматривать бесконечную ленту фотографий, добавлять изображения в избранное, открывать их в полноэкранном режиме с поддержкой жестов, делиться ссылками и просматривать профиль пользователя.
- Макет в Figma: https://www.figma.com/design/MujlanK7BDoQRrGci5G6pi/Image-Feed
- Unsplash API: https://unsplash.com/documentation
- OAuth-авторизация — безопасный вход через аккаунт Unsplash.
- Бесконечная лента изображений — просмотр редакционной коллекции Unsplash с автоматической подгрузкой новых фотографий.
- Избранное — добавление и удаление фотографий из списка понравившихся.
- Полноэкранный просмотр — поддержка масштабирования и перемещения изображения с помощью жестов.
- Поделиться — отправка ссылки на фотографию через системное меню iOS.
- Профиль пользователя — отображение информации о пользователе, аватара и количества избранных фотографий.
- Обработка ошибок — уведомление пользователя о сетевых ошибках с возможностью повторить запрос.
- Swift
- UIKit (программная верстка)
- MVP (Model–View–Presenter)
- URLSession — выполнение сетевых запросов
- Unsplash API
- OAuth 2.0
- Grand Central Dispatch (GCD) — многопоточность
Проект построен на архитектуре MVP (Model–View–Presenter).
- View — экраны приложения на UIKit, отвечающие за отображение данных и передачу пользовательских действий.
- Presenter — бизнес-логика приложения, подготовка данных для отображения и обработка пользовательских событий.
- Model — модели данных и сервисный слой для взаимодействия с Unsplash API.
- Helpers — вспомогательные компоненты для хранения OAuth-токена в Keychain и кэширования изображений.
- OAuth Flow — авторизация через WebView с безопасным хранением токена доступа в Keychain.
- Асинхронная загрузка изображений — фотографии загружаются в фоновом режиме с использованием кэширования для плавной прокрутки ленты.
- Пагинация — реализована бесконечная подгрузка изображений по мере прокрутки списка.
- Работа с избранным — добавление и удаление фотографий выполняется через соответствующие запросы к Unsplash API.
- Жесты в полноэкранном режиме — поддерживаются масштабирование (Pinch-to-Zoom) и перемещение изображения (Pan Gesture).
git clone https://github.com/rfhfv/ImageFeed.git
cd ImageFeed
open ImageFeed.xcodeproj