Домашнее задание для iOS школы EPAM

Правила сдачи домашнего задания:

  1. Необходимо скачать исходный репозиторий с базовыми файлами для домашнего проекта.
  2. Создать свое решение задачи в виде исходного кода.
  3. Отправить в виде pull request к данному репозиторию с наименованием ветки surname_name/feature_name (наименование ветки обязательно(!) в lowercase. feature_name будет описано отдельно в каждом домашнем задании).

Calculator

feature_name: calculator

Описание задачи:

  • Необходимо создать прототип калькулятора, взятого из нативного приложения "Калькулятор" в системе iOS.
  • Необходима поддержка landscape режима.
  • Дизайн должен выполнен согласно pixel-perfect.
  • Калькулятор должен поддерживать все функции вычисления нативного калькулятора кроме "(", ")", "mc", "m+", "m-", "mr".
  • Калькулятор должен поддерживать операции undo/redo.

Custom Gesture Recognizer

feature_name: gesture

Описание задачи:

  • На стартовом экране приложения должно лежать изображение в виде эллипса.
  • При проведении пальцем по контуру данной фигуры в случае успеха пользователь попадает на экран с UITabbarController. Величина отклонения задается по желанию автора кода.

StarWars

feature_name: starwars/iteration_{iteration_num}

Описание задачи (Итерация 1):

  • Для работы приложения используется API https://swapi.co/api/
  • На стартовом экране приложения должен лежать лейбл
  • При запуске приложения делается запрос к people/1
  • В полученном ответе берутся ссылки на все фильмы, в которых присутствует персонаж
  • По ссылкам получаем названия всех фильмов
  • Выводим названия всех фильмов через запятую в лейбл

Описание задачи (Итерация 2):

  • Для работы приложения используется API https://swapi.co/api/
  • На стартовом экране приложения должно лежать текстовое поле и таблица (UITableView)
  • При вводе имени в текстовое поле и нажатии "Ввод" (aka Return) делается запрос к странице этого персонажа, а таблица очищается
  • В полученном ответе берутся ссылки на все фильмы, в которых присутствует персонаж
  • По ссылкам получаем названия всех фильмов
  • Выводим названия всех фильмов выводятся в таблицу, при этом они должны появиться одновременно
  • При нажатии на фильм под таблицей выводится надпись "Этот фильм вышел в {год выхода} году"

Предъявлении итерации 1 к проверке является необязательным.

FilmBrowser

feature_name: film_browser

Описание задачи:

  • Приложение представляет из себя набор из двух экранов: списка фильмов и детальная информация по каждому фильму.
  • Все данные о фильмах хранятся внутри приложения (Картинка, название, описание, количество лайков). Делать сетевое взаимодействие не нужно.
  • Ячейка таблицы на первом экране состоит из картинки, названия и количества лайков.
  • Второй экран должен скроллится в зависимости от количества контента. На нем последовательно снизу вверх по вертикали располагаются элементы: картинка, шириной во весь экран. Ниже название без сокращений, ниже полное описание без сокращений. В самом ниже располагается кнопка с количеством лайков.
  • При нажатии на кнопку с количеством лайков на экране деталей, мы увеличиваем количество лайков на обоих экранах у данного фильма.

Финальное задание для iOS школы EPAM

Базовые общие требования:

  • Можно выбрать любое одно из пяти заданий
  • Использование swift 4, Xcode 9.1+.
  • Наличие сетевого слоя.
  • Использование персистентности и оффлайн режима.
  • Использование списка: таблица, коллекция.
  • Все UX/UI вопросы остаются для решения разработчиком на его усмотрение. Все вопросы по дополнительной логике также остаются на усмотрение разработчика.
  • Наличие autolayout.
  • Запрещается использование всех видов сторонних зависимостей и библиотек.
  • Структура проекта, его архитектура остается на усмотрение разработчика.
  • Оценивается в первую очередь полная работоспособность проекта и код проекта.
  • Обязателен один кастомизированный анимационный переход между экранами.
  • Обязательно наличие анимации внутри приложения.

Приложение для показа напоминаний.

  • Приложение позволяет создавать напоминания для пользователя. Напоминание можно создать с временем в будущем, текстом описания, названием и прикрепленными фотографиями с фотокамеры пользователя.
  • Созданные напоминания отображаются в виде списка.
  • При достижении времени срабатывания - уведомление отображается в виде локального уведомления на телефоне пользователя.
  • При переходе из списка к конкретному уведомлению - есть возможность отредактировать все параметры напоминания.
  • Каждое уведомление можно пошарить в социальную сець Вконтакте. Должно отображаться как обычный пост с фотографиями и текстом. Текст формируется из времени, названия и описания напоминания.

Приложение клиент социальной сети вконтакте.

  • Приложение представляет из себя клиент для социальной сети вконтакте.
  • После авторизации, первым экраном является лента постов пользователя.
  • С ленты постов можно перейти к деталям поста пользователя.
  • Под постом отображается кнопка лайка
  • Помимо кнопоки лайка в деталях поста должна быть кнопка "добавить в избранное". При нажатие на данную кнопку, данный пост отправляется в хранилище телефона.
  • Список избранных постов работает в оффлайне и открывается после перезагрузки приложения.
  • Должна быть возможность выйти из своего аккаунта и зайти под другим.

Приложение - музыкальный плеер.

  • Приложение представляет из себя простейший музыкальный плеер.
  • Для скачивания музыки можно использовать абсолютно любое API, которое позволяет прослушивать музыку и делать поиск по аудио. Пример https://freemusicarchive.org/api
  • На главном экране приложения должен отображаться поиск с возможностью найти через API необходимый трек. Все найденные треки отображаются в виде таблицы. При переходе к деталям трека, отображается его обложка и детальная информация. Можно также добавить трек в избранное.
  • Все избранные треки сохраняются в приложении и доступны в оффлайн режиме.

Приложение - фоторедактор.

  • Приложение представляет из себя простейший фоторедактор изображений.
  • Фотографии могут браться с хранилища устройства или загружаться из поиска в гугл.
  • Фотографию можно также получить со снимка камеры внутри приложения.
  • Редактирование фотографий заключается в применении фильтров к изображению (сепия, черно-белое фото и тд.).
  • Список отредактированных фотографий должен храниться внутри приложения и сохраняться после перезагрузки приложения.
  • Список отредактированных фотографий должен храниться в виде истории и отображаться в табличном представлении.

Приложение - карта + сохранение своей геопозиции в виде умных объектов.

  • Приложение представляет из себя возможность сохранения своей геопозиции в виде умных объектов.
  • В приложении должна быть кнопка добавления нового "умного объекта" (далее просто "объект") через сохранение текущей геолокации и задание радиуса. Радиус задает пользователь самостоятельно. Также задается название данному объекту. У каждого объекта есть поле "адрес", получаемое из сетевого API геокодера гугла, яндекса или 2гис.
  • Главный экран приложения представляет из себя переключение между двумя вариантами. В первом варианте на экране отображается карта со всеми заданными объектами. Объекты нарисованы в виде точек с радиусом, который задал пользователь. При нажатии на карту можно также добавить новый объект. Второй вариант данного экрана отображается в виде таблицы с заданными объектами. В таблице выводится вся информация. Помимо этого в таблице объекты можно удалять.
  • С главного экрана можно перейти на экран деталей объекта, который содержит в себе помимо детальной информации об объекте, также информацию о количестве посещений данного объекта пользователем и суммарное время нахождения в данной зоне.
  • Все объекты должны храниться на устройстве и сохраняться после перезагрузки приложения.
  • При входе пользователя в радиус любого объекта ему приходит local notification.