Код
#подборки

6 пет-проектов для начинающих iOS-разработчиков

Опытные айосеры делятся идеями для пет-проектов. Нет, здесь не будет скучных парсеров погоды, тудушек и помидорок.

Иллюстрация: Оля Ежак для Skillbox Media

Главная проблема начинающих iOS-разработчиков в том, что вакансии для джунов появляются редко, а конкуренция за них высокая. Крутое портфолио с пет-проектами может помочь выделиться на фоне конкурентов — но идеи для них искать трудно, а те, что есть интернете, довольно банальны и сложны в исполнении.

Поэтому мы попросили двух опытных iOS-разработчиц поделиться свежими идеями для тренировочных проектов, а заодно расписать их так, чтобы разобрался даже новичок. Даже если вы не найдёте здесь проект мечты, возможно, эти идеи помогут вам выйти на что-то по-настоящему великое :)

Елена Грачёва

Разработчик-фрилансер. Занимается iOS-разработкой с 2011 года. Вела курс по Swift в Астраханском государственном университете. Программный директор и эксперт по мобильной разработке в Skillbox.

С 2016 года также занималась управлением проектами в мобильной разработке.

Моя остановка

Сложность: ⭐⭐⭐⭐✰

Чему научитесь: работе с фоновыми процессами, отслеживанию геопозиции в реальном времени, работе с уведомлениями.

Инструменты: Swift, UIKit, user notifications, Core Location, фреймворк для работы с картами на выбор.

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

Для этого потребуется разработать два экрана:

1️⃣ Стартовый экран — список остановок. Если остановок нет, можно оставить на экране всплывашку с рекомендацией добавить остановку, чтобы начать пользоваться приложением. Когда остановки есть, показываем список их названий. Также на экране должна быть кнопка добавления новой остановки.

2️⃣ Добавление остановки. Здесь лучше всего интегрировать фреймворк для работы с картами. Выбирайте SDK на свой вкус: Apple, Google, Yandex или любой другой. На карте пользователь может выбрать точку. Когда точка выбрана, появляется предложение указать название остановки и сохранить её. До ввода названия кнопка сохранения заблокирована. Пока точка не сохранена, можно нажать «Отмена» и вернуться к выбору точки.

После сохранения точки проверяем, есть ли у нас разрешение на использование геолокации. Если нет, выводим сообщение с запросом для пользователя предоставить это разрешение или предлагаем самостоятельно включить геолокацию в настройках.

Когда геолокация включена и точки установлены, приложение должно запустить отслеживание местоположения. При приближении к точке на определённое расстояние создаём локальное уведомление с баннером и звуком и рассылаем её через центр нотификаций.

Для выполнения проекта нужно изучить:

  • Работу с фоновыми процессами.
  • CLLocationManager.
  • Работа с локальными уведомлениями.
  • Карты (фреймворк на ваш выбор).

Как усложнить. При развитии приложения можно добавить несколько функций:

  • Редактирование и удаление остановок.
  • Активация и деактивация остановок (чтобы они оставались в списке, но не отслеживались, пока неактивны).
  • Добавление расписаний: отслеживание некоторых остановок можно привязать к дням недели или к определённым интервалам времени.

Дневник состояния

Сложность: ⭐⭐⭐✰✰

Инструменты: Swift, UIKit, Core Data, Swift Charts.

Чему научитесь: работе с базой данных.

Приложение, которое позволит собирать статистику по своему самочувствию и отслеживать, как на него влияют внешние обстоятельства.

Идея в том, что пользователь составляет собственный набор показателей, по которым он хочет собрать статистику. Например, можно выбрать настроение (в баллах от 1 до 10), количество выпитых чашек кофе, температуру за окном и количество часов сна. После выбора показателей начинается сбор данных. Пользователь каждый день заходит в приложение и отмечает результат за сутки. Эти данные мы собираем и храним локально, используя Core Data. Дальше на отдельном экране можно будет посмотреть сводку в виде графика.

В самом простом варианте нужно будет создать три экрана.

1️⃣ Ежедневное заполнение данных. На этом экране нужно списком вывести поля, куда пользователь будет вносить данные. Каждое поле соответствует одному из выбранных для отслеживания показателей. Из-за частоты обращения этот экран лучше сделать стартовым.

2️⃣ Список показателей для отслеживания. Экран для первоначальной настройки приложения. Здесь пользователь сможет добавлять, удалять или редактировать показатели. В самом простом варианте нужно будет установить название показателя и выбрать рамки, в которых он измеряется. Например, для настроения выбираем значения от 1 до 10, а для количества часов сна зададим границы от 0 до 24. Эти значения нужны для построения графика.

В более сложном варианте можно настроить приложение так, чтобы экран со списком параметров выводился первым автоматически, если список показателей ещё не заполнен.

3️⃣ Экран статистики. Самая сложная и интересная часть всего проекта. На этом экране будут выводиться графики с разными показателями. Проще всего это реализовать с помощью недавно добавленного в Swift фреймворка Swift Charts, который предназначен как раз для построения графиков и диаграмм.

Основная сложность задачи в том, чтобы вывести на одном графике показатели с разными единицами измерения и с разным шагом. Для этого в Swift Charts можно добавить справа дополнительную ось Y со своей шкалой. Это позволит вывести одновременно два параметра.

Более сложный вариант потребует преобразования всех данных в общий формат. Например, если у нас есть шкала от 1 до 10 (10 шагов) и шкала от 0 до 24 (25 шагов), то общая шкала будет содержать 50 делений (наименьшее общее кратное для 10 и 25).

Дальше нужно будет подумать, как вывести данные на экране, чтобы пользователю было легко их считать. Можно сделать подписи прямо возле точек графика, а можно — всплывающие подсказки по долгому нажатию.

Как усложнить. Изучите другие фреймворки для построения графиков. Даже если вы не будете их использовать, в комментариях к проекту укажите список рассмотренных решений и объясните свой выбор. Это будет положительно оценено потенциальным работодателем.

Лист характеристик персонажа D&D

Сложность: ⭐⭐⭐✰✰

Чему научитесь: аккуратной и внимательной работе с ТЗ, простой вёрстке.

Инструменты: Swift, UIKit.

Этот проект не так сложен технически, как предыдущие два, однако требует гораздо большего внимания к деталям и кропотливости. Оба качества часто недооцениваются разработчиками на старте карьеры, хотя именно они могут показать вас работодателю с выгодной стороны.

Суть задачи в том, чтобы создать приложение для генерации персонажа и заполнения характеристик в соответствии с правилами игры Dungeons & Dragons. Если вы не играли в подобные игры, дальнейший текст может показаться вам довольно запутанным. Если же вы игрок, то знаете, что заполнение всех характеристик с учётом зависимостей от расы, профессии, умений и бэкграунда персонажей может быть нетривиальной задачей.

Если коротко, персонажа ролевой игры можно описать набором из его истории и характеристик.

  • Предыстория — описание жизни героя, его привычек, мыслей и мотивации. Например, персонаж может быть ремесленником, шутом или рыцарем — все эти амплуа наделяют его особыми свойствами.
  • Характеристики — набор параметров, по которым можно просчитать успех его действий: как далеко персонаж может пройти за ход, какой урон нанести, сможет ли убедить оппонента сделать что-то и так далее.

Характеристики персонажа зависят от разных факторов: его расы, класса, профессии, навыков, уровня. Также влияние может оказать формализованная часть предыстории. Например, у сына торговца может быть больше денег, а у воина — лучше с боевыми навыками и силой, но хуже с красноречием.

Как может выглядеть интерфейс приложения
Изображение: DALL-E 3 / Skillbox Media

Все зависимости описаны в правилах игры и могут меняться в разных версиях правил и используемых дополнений. Чтобы посмотреть список характеристик, можно погуглить лист персонажа в PDF — например, для пятого релиза подойдёт этот.

Многие из этих листов позволяют заполнить данные и даже получить вычисленный результат по всем характеристикам. Но сложность их реализации именно в использовании PDF со встроенным исполняемым кодом. Взаимодействовать с таким файлом легко на компьютере, но почти невозможно на iPad или iPhone.

Итак, основная задача проекта — дать пользователю возможность выбрать основные характеристики персонажа и заполнить лист вычисляемыми характеристиками на основе выбора. Здесь я не буду давать рекомендаций и описывать количество экранов. Прелесть задачи именно в том, чтобы самостоятельно выписать правила и скрупулёзно реализовать их в коде.

Желаю удачи и надеюсь увидеть ваши приложения в App Store!

Арина Павлова

Тимлид команды мобильной разработки в Ozon Tech. Занимается разработкой для iOS с 2019 года. Окончила Школу 21 «Сбера». Эксперт по мобильной разработке в Skillbox.

Большим плюсом для начинающего разработчика будет наличие в портфолио приложения и на UIKit, и на SwiftUI. Это покажет работодателю, что вы знаете разные архитектуры и подходы к вёрстке. В приложении на UIKit можно сделать упор на бизнес-логику, интерфейс при этом сделать облегчённым. На SwiftUI, наоборот, — уделить больше внимания визуальным деталям.

Этот день в истории

Сложность: ⭐⭐⭐⭐✰

Чему научитесь: работе с архитектурами MVC/MVP, сторонним API, сетевыми запросами.

Инструменты: Swift, UIKit, URLSession.

Разработчики часто используют сторонние программы для выполнения специфической работы. Например, если в вашем приложении есть фича перевода текста, вам нет смысла самому создавать переводчик, достаточно подключить готовый API. Работа с API предполагает, что приложение посылает запросы стороннему сервису, а в ответ получает данные.

Приложение «Этот день в истории» будет показывать человеку факт о введённой дате, используя сервис Numbers API. Ответ от сервиса будет содержать текст на английском языке. Чтобы перевести его на русский, можно использовать API переводчика, например «Яндекса».

1️⃣ Экран первый: ввод даты. Для этого вы можете использовать системный компонент DatePicker. После ввода даты осуществляется переход на новый экран.

2️⃣ Экран второй: факт о дне. При переходе на этот экран нужно отправить URL-запрос к сайту Numbers API, получить ответ с текстом и перевести его через переводчик, используя API. До момента загрузки всех необходимых данных можно отобразить лоадер. После получения данных выведите на экран факт о дне, импровизируя с внешним видом — например, можно сделать ему обрамление эстетичной рамкой.

Чтобы отправить на втором экране запрос, нужно будет передать ему дату с предыдущего экрана. Ещё один вариант — сделать один общий класс для работы с датой и запросами, которым будут пользоваться оба экрана.

Важно!

Так как все мы уважаем авторское право и знакомы с правилами использования API, на экране, где отображается переведённый текст, разместим надпись «Переведено сервисом…» с активной гиперссылкой на страницу переводчика. Также стоит указать информацию об использовании сервиса в файле Readme репозитория на GitHub.

Как усложнить. Добавьте выбор языка, на который будет осуществляться перевод. Можно также поэкспериментировать с обработкой ошибок и кэшированием ответов, полученных с помощью API.

Найди пару

Сложность: ⭐⭐⭐✰✰

Чему научитесь: архитектуре MVVM, вёрстке с помощью VStack/HStack/ZStack, а также работе с картинками, анимацией и рандомайзером.

Инструменты: SwiftUI.

Простая игра, суть которой в том, чтобы запомнить расположение одинаковых карточек и перевернуть их.

Для этого приложения нам понадобится всего один экран — карточки. Создайте экран, на котором в скроллящейся коллекции будут располагаться карточки. На внутренней стороне карточек разместите картинки. В начале игры пользователю даётся несколько секунд, чтобы изучить все карточки и запомнить их расположение. Затем они переворачиваются обложкой вверх, и нужно открыть картинки нажатием пары одинаковых карточек.

Интересными задачами тут будут вёрстка карточек, анимация их переворота (можно использовать rotation3DEffect), логика их хранения (например, массив, хранящийся во View Model) и перемешивания. После каждого раунда игры вам нужно будет перемешать массив с карточками, чтобы они расположились в новом порядке.

Как усложнить. Предоставьте пользователю возможность задавать количество карточек, добавьте счётчик успешных и неуспешных попыток.

Визуализация интерфейса приложения «Найди пару».
Изображение: DALL-E 3 / Skillbox Media

Самопрезентация

Сложность: ⭐⭐⭐⭐✰

Чему научитесь: импровизации без чёткого ТЗ, использованию основных элементов SwiftUI.

Инструменты: SwiftUI.

Приложение-самопрезентация. Поможет убить двух зайцев — показать навыки работы со SwiftUI и произвести хорошее первое впечатление на работодателя. Рассказывать можно о чём угодно, не только о хард-скиллах — например, о своём пути в IT, бэкграунде, хобби и увлечениях.

Чтобы было интереснее, используйте на каждом экране или в каждом разделе новые элементы интерфейса. SwiftUI предлагает много легко настраиваемых компонентов, которые помогут сделать богатый деталями интерфейс: скроллящиеся фото, возможность зума и вращения фото, кастомизация текста, picker, slider — всё что угодно. Но помните, что не стоит добавлять элементы просто для красоты — их выбор должен быть уместен и продиктован задачей.

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

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована