Image Feed - многостраничное приложение предназначено для просмотра изображений через API Unsplash.
Приложение реализует авторизацию через OAuth Unsplash, позволяет пользователям просматривать бесконечную ленту изображений, добавлять их в избранное и делиться ссылками. Главный экран состоит из ленты с изображениями, где можно просматривать, лайкать и добавлять изображения в избранное. Также доступен просмотр изображения на весь экран и возможность делиться им. У пользователей есть профиль с избранными изображениями и краткой информацией о себе. В приложении предусмотрена удобная навигация и интерфейс, с использованием сторонних библиотек для расширения функционала.
Приложение использует API для получения данных, поэтому для полноценной работы требуется подключение к интернету.
Для запуска приложения необходимо клонировать репозиторий и запустить проект в Xcode выполнив следующие шаги:
-
Клонировать репозиторий на локальную машину:
git clone https://github.com/Dzhabaev/ImageFeed.git
-
Перейти в папку проекта, к примеру:
cd ~/ImageFeed
-
Открыть проект с помощью Xcode:
open ImageFeed.xcodeproj
-
Запустить проект на симуляторе или устройстве.
- Xcode 12.0 или выше
- Swift 5.3 или выше
- iOS 13.0 или выше
- Предусмотрен только портретный режим
- Вёрстка iPad не предусмотрена
- Зависимости: Kingfisher, ProgressHUD, SwiftKeychainWrapper
В планах по доработке:
- Сверстать все экраны приложения кодом.
- Добавить возможность редактирования профиля пользователя.
- Реализовать поддержку ландшафтного режима.
- Покрыть все экраны тестами.
Проект использует:
- Swift для разработки мобильного приложения.
- UIKit для построения пользовательского интерфейса.
- OAuth 2.0 Authorization для авторизации.
- Auto Layout для размещения элементов интерфейса.
- Animation для анимаций.
- UITableView и UIScrollView для отображения контента.
- SPM для управления зависимостями.
- Unit-тесты и UI-тесты для обеспечения качества кода.
AppDelegate- Класс, отвечающий за жизненный цикл приложения.SceneDelegate- Класс, отвечающий за управление сценами приложения.UIBlockingProgressHUD- Компонент для отображения индикатора загрузки, блокирующего интерфейс.AuthAuthConfiguration- Конфигурация для авторизации через OAuth.SplashViewController- Контроллер для отображения начального экрана загрузки.AuthViewController- Контроллер для экрана авторизации.WebViewViewController- Контроллер для отображения WebView с авторизацией через Unsplash.WebViewPresenter- Презентер для управления WebView.AuthHelper- Вспомогательный класс для работы с авторизацией.
TabBarTabBarController- Контроллер для управления таб баром.
ImagesListModels- Модели данных для списка изображений.ImagesListService- Сервис для работы с API Unsplash и загрузки изображений.ImagesListViewController- Контроллер для отображения списка изображений.ImageListPresenter- Презентер для управления логикой списка изображений.ImagesListCell- Ячейка таблицы для отображения изображения.
SingleImageViewSingleImageViewController- Контроллер для отображения одного изображения на весь экран.
ProfileModels- Модели данных для профиля пользователя.ProfileService- Сервис для работы с данными профиля.ProfileImageService- Сервис для загрузки изображений профиля.ProfileViewController- Контроллер для отображения профиля пользователя.ProfilePresenter- Презентер для управления логикой профиля пользователя.
NetworkingOAuth2Service- Сервис для работы с OAuth2 авторизацией.OAuth2TokenStorage- Хранилище для хранения OAuth2 токенов.OAuthTokenResponseBody- Модель данных для ответа от OAuth2 сервера.NetworkError- Перечисление возможных ошибок сети.
ExtensionsArray+Extensions- Расширения для работы с массивами.URLSession+Extensions- Расширения для работы с URLSession.URLRequest+Extensions- Расширения для работы с URLRequest.
Main- Основная точка входа приложения.Assets- Ресурсы и ассеты приложения.LaunchScreen- Экран загрузки приложения.Info- Информационные файлы проекта.ImageFeedTestsWebViewTests- Тесты для WebView компонентов.ImagesListTests- Тесты для списка изображений.ProfileTests- Тесты для профиля пользователя.
ImageFeedUITestsImageFeedUITests- UI-тесты для проверки пользовательского интерфейса.
Проект можно интегрировать с любой CI/CD системой, поддерживающей сборку проектов Swift и Xcode.
Чингиз Джабаев
