Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AutodocTest

Тестовое iOS-приложение на UIKit для отображения новостной ленты Autodoc.

Что внутри

  • UIKit без storyboard/xib
  • MVVM + Combine для binding между экраном и ViewModel
  • async/await для всех сетевых запросов
  • UICollectionView + CompositionalLayout + DiffableDataSource
  • постраничная загрузка новостей (pageSize = 15)
  • простой Clean Architecture без лишних абстракций
  • собственный ImageLoader на URLSession + NSCache
  • адаптивный UI для iPhone и iPad

Архитектура

Проект разделен на слои:

  • App — точка входа, scene lifecycle, сборка зависимостей
  • Core — networking, image loading, переиспользуемые UI-компоненты и утилиты
  • Domain — сущности, use case, протокол репозитория
  • Data — DTO, endpoint, репозиторий, маппинг API-моделей
  • Presentation — экраны списка и деталей новости

Как запустить

  1. Открыть AutodocTest.xcodeproj
  2. Выбрать схему AutodocTest
  3. Запустить на iPhone или iPad simulator / device с iOS 16.0+

Если нужен regen проекта, достаточно выполнить:

tuist generate --no-open

Ключевые решения

  • Список новостей построен на UICollectionViewDiffableDataSource, обновления выполняются только через snapshot.
  • Пагинация запускается при приближении к хвосту списка и защищена от дублей флагами isLoading и canLoadMore.
  • Начальное состояние, пустой экран, ошибка и загрузка пагинации отображаются отдельно.
  • Экран деталей честно использует доступные поля API и открывает fullUrl через SFSafariViewController.

Пагинация

  • первая страница загружается при открытии списка
  • следующая страница запрашивается при показе элементов около конца ленты
  • новые элементы добавляются без reloadData
  • загрузка прекращается, когда:
    • загружено totalCount элементов
    • сервер вернул меньше элементов, чем pageSize

Сетевой слой

  • Endpoint описывает путь и параметры запроса
  • APIClient работает поверх URLSession и использует async/await
  • есть обработка:
    • некорректного URL
    • HTTP-ошибок
    • decode errors
    • transport errors
  • timeout настроен на уровне URLSessionConfiguration

Загрузка изображений

  • ImageLoader использует NSCache для in-memory cache
  • повторные запросы одного и того же URL дедуплицируются через Task-хранилище
  • RemoteImageView умеет отменять собственную задачу при переиспользовании ячейки
  • при отсутствии изображения отображается placeholder

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages