Skip to content
This repository has been archived by the owner on Dec 20, 2023. It is now read-only.

miamib34ch/AvitoTech-TraineeAssignment

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 

Repository files navigation

Тестовое задание для стажёра iOS

Оглавление:

  1. Описание задания
  2. Инструкция по запуску
  3. Комментарии по работе

Скринкаст

Описание задания

Общее описание задания:

Написать приложение для iOS, которое будет состоять из двух экранов:

  • Список товаров, данный экран будет стартовым.
  • Детальная карточка товара, будет открываться по нажатию на элемент в списке товаров.

Требование к реализации:

У каждого экрана должно быть три состояния:

  • Отображение ошибки
  • Состояние загрузки
  • Отображение контента из JSON файла Внешний вид приложения реализовывается на усмотрение кандидата, за референс можно брать приложение Авито. Для каждого экрана нужно будет загружать данные в формате JSON из интернета:
  • https://www.avito.st/s/interns-ios/main-page.json
    • URL для запроса на главном экране.
  • https://www.avito.st/s/interns-ios/details/{itemId}.json

Требования к коду:

  1. Приложение написано на языке Swift.
  2. Пользовательский интерфейс приложения реализован кодом без использования SwiftUI.
  3. Для отображения списка используется UICollectionView с отображением в 2 столбца.
  4. Для запроса данных используется URLSession.

Требования к сдаче результатов:

  • Код должен быть выложен в git-репозиторий на github.com и отправлен нам.
  • Не забудьте сделать репозиторий публичным, чтобы мы могли его посмотреть.

Инструкция по запуску

Для запуска потребуется Xcode

  1. Скачайте архив main ветки или релиз из github:
    1.1 Скачивание main ветки:
    image 1.2 Скачивание релиза:
    image image
  2. Распакуйте архив и запустите проект:
    2.1 Зайдите в распакованную папку:
    image
    2.2 Зайдите в папку AvitoTech-TraineeAssignment:
    image
    2.3 Откройте файл AvitoTech-TraineeAssignment.xcodeproj:
    image
    2.4 Появится окно, в котором нужно нажать Trust and Open:
    image
  3. В Xcode запустите приложение на симуляторе или на реальном устройстве. Приложение работает, начиная с iOS 14.0, поддерживает только iPhone.

Комментарий по работе

  1. По тз не было запрещено использовать внешние зависимости, поэтому использовал две:
    1.1 ProgressHud - для индикатора загрузки экрана.
    1.2 Kingfisher - для загрузки картинок из сети. Библиотека работает c URLSession (всё по тз).
  2. В приложении реализована тёмная и светлая тема.
  3. В приложении реализована русская и английская локализация, зависит от системного языка устройства, базовый русский.
  4. Реализован свайп влево для выхода с экрана детальной информации.
  5. На реальном устройстве можно написать на email и позвонить по номеру (показно в скринкасте).
  6. Приложение сохраняет кэш, и если уже был загружен каталог или детальный экран, то они будут показаны даже при отсутствии интернета. Поэтому если нужно посмотреть на алерт с ошибкой загрузки экрана каталога, то нужно удалить приложение, выключить интернет и запустить заново. Для экрана с детальной информацией достаточно открыть без интернета тот, который раннее не был загружен.
  7. После включения интернета карте нужно какое-то время, чтобы заново начать работать.
  8. Если указанного в объявлении адреса в городе не существует, то на карте показывается просто город.
  9. В работе использован swiftlint, но его скрипт закомментирован, чтобы могли запустить те, у кого он не установлен.
  10. Архитектура MVP.