Оглавление:
Написать приложение для iOS, которое будет состоять из двух экранов:
- Список товаров, данный экран будет стартовым.
- Детальная карточка товара, будет открываться по нажатию на элемент в списке товаров.
У каждого экрана должно быть три состояния:
- Отображение ошибки
- Состояние загрузки
- Отображение контента из JSON файла Внешний вид приложения реализовывается на усмотрение кандидата, за референс можно брать приложение Авито. Для каждого экрана нужно будет загружать данные в формате JSON из интернета:
- https://www.avito.st/s/interns-ios/main-page.json
- URL для запроса на главном экране.
- https://www.avito.st/s/interns-ios/details/{itemId}.json
- URL для запроса на детальной странице. ID берется из данных для главного экрана.
- Пример ссылки: https://www.avito.st/s/interns-ios/details/1.json
- Приложение написано на языке Swift.
- Пользовательский интерфейс приложения реализован кодом без использования SwiftUI.
- Для отображения списка используется UICollectionView с отображением в 2 столбца.
- Для запроса данных используется URLSession.
- Код должен быть выложен в git-репозиторий на github.com и отправлен нам.
- Не забудьте сделать репозиторий публичным, чтобы мы могли его посмотреть.
Для запуска потребуется Xcode
- Скачайте архив main ветки или релиз из github:
1.1 Скачивание main ветки:
1.2 Скачивание релиза:
- Распакуйте архив и запустите проект:
2.1 Зайдите в распакованную папку:
2.2 Зайдите в папку AvitoTech-TraineeAssignment:
2.3 Откройте файл AvitoTech-TraineeAssignment.xcodeproj:
2.4 Появится окно, в котором нужно нажать Trust and Open:
- В Xcode запустите приложение на симуляторе или на реальном устройстве. Приложение работает, начиная с iOS 14.0, поддерживает только iPhone.
- По тз не было запрещено использовать внешние зависимости, поэтому использовал две:
1.1 ProgressHud - для индикатора загрузки экрана.
1.2 Kingfisher - для загрузки картинок из сети. Библиотека работает c URLSession (всё по тз). - В приложении реализована тёмная и светлая тема.
- В приложении реализована русская и английская локализация, зависит от системного языка устройства, базовый русский.
- Реализован свайп влево для выхода с экрана детальной информации.
- На реальном устройстве можно написать на email и позвонить по номеру (показно в скринкасте).
- Приложение сохраняет кэш, и если уже был загружен каталог или детальный экран, то они будут показаны даже при отсутствии интернета. Поэтому если нужно посмотреть на алерт с ошибкой загрузки экрана каталога, то нужно удалить приложение, выключить интернет и запустить заново. Для экрана с детальной информацией достаточно открыть без интернета тот, который раннее не был загружен.
- После включения интернета карте нужно какое-то время, чтобы заново начать работать.
- Если указанного в объявлении адреса в городе не существует, то на карте показывается просто город.
- В работе использован swiftlint, но его скрипт закомментирован, чтобы могли запустить те, у кого он не установлен.
- Архитектура MVP.