Нужно написать приложение iOS для поиска контента, которое будет состоять из двух экранов:
- Экрана поиска медиа-контента
- Экрана с детальной информацией, который отображается после нажатия на элемент из результатов поиска
- При реализации необходимо использовать iTunes Search API
- Внешний вид приложения реализуется на усмотрение кандидата
- Отображает строку ввода поискового запроса
- Сохраняет историю поиска (до пяти последних запросов)
- В момент начала ввода отображаются элементы-подсказки с ранее введенными значениями. По мере ввода символов подсказки фильтруются по вхождению без учета регистра. Например, при вводе ‘scor’ могут быть включены ‘The Score’, ‘Scorpions’, ‘underscore’ и т.п.
- Поисковый запрос выполняется по завершении ввода при помощи элементов управления клавиатуры и использует формат
https://itunes.apple.com/search?key-value-params
- Результаты поиска представлены на экране в виде «плиток», расположенных в два столбца (по умолчанию limit = 30)
- В результатах поиска поддерживаются для отображения как минимум двух типов медиаконтента (например,
movie
иaudiobook
). В каждом элементе поисковой выдачи отображена его принадлежность к типу, превью-изображение (artwork, если доступно) и название. Помимо этого элементы отображают краткую информацию, относящуюся к соответствующему типу контента (имя исполнителя, длительность, цена, рейтинг и т.п.) — на ваше усмотрение - С экрана поиска должен открываться экран детальной информации по нажатию на элемент поисковой выдачи.
- Если реализована возможность применения фильтров по различным параметрам (например по entity, explicit или языку контента)
- Если реализована возможность изменить значение лимита на количество элементов в результатах поиска.
- Изображение для контента
- Название материала
- Имя автора материала
- Тип контента (брать из wrapperType/kind, возможные типы описаны тут)
- Гиперссылка для перехода на страницу медиаконтента вне приложения (trackViewUrl)
- Описание
- Блок с более подробной информацией об авторе с использованием lookup-запроса. Блок должен содержать гиперссылку для перехода на страницу автора вне приложения (artistLinkUrl).
- Добавление функции отображения дополнительной информацию о медиаконтенте, исходя из его типа
- Добавление возможности пользоваться запросами с релевантной к конкретной сущности информацией. Например, отобразить 5 других работ/приложений, сделанных автором работы, которая просматривается сейчас
- Покрытие кода unit-тестами
- Отсутствие подвисаний (hitches, hangs) при скроле поисковой выдачи
- Каждый экран должен поддерживать отображение трёх состояний:
- Отображение контента
- Отображение ошибки
- Состояние загрузки
- Элементы не показываются на экране, если необходимая для их отображения часть информации отсутствует в ответе сервера
- Приложение написано на языке Swift, без использования сторонних библиотек
- Пользовательский интерфейс полностью реализован кодом с использованием UIKit (без SwiftUI)
- Для выполнения сетевых запросов используется
URLSession
Если у вас возникнут вопросы по заданию, ответы на которые вы не найдете в описанных требованиях, то вы вольны принимать решения самостоятельно. В таком случае приложите к проекту README-файл, в котором будет список вопросов/проблем, с которыми вы столкнулись, и поясните как вы их решили и почему именно таким образом.
- Код должен быть размещен в git-репозитории на github.com
- Сделайте репозиторий публичным, чтобы была возможность проверить вашу работу
- Приложите файл README.md с инструкцией по запуску
- Если требуется, приложите файл README.md с вопросами/проблемами, с которыми вы столкнулись, и с описанием логики их решений.