Как не забросить свой пет-проект. Мой кейс запуска приложения в App Store

Расскажите о себе и сути проекта?

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

Я рассчитывал выпустить его месяца за три… как же я ошибался 😂

Проект удалось релизнуть лишь спустя 4 года, за это время он несколько раз изменился до неузнаваемости: совершенно другой дизайн, функционал, ну и конечно же код, он множество раз переписывался по мере моего взросления в профессии.

Как не забросить свой пет-проект. Мой кейс запуска приложения в App Store

Что я только не перепробовал:

  • Вдохновлялся и отчаянно пилил на энтузиазме нон-стопом.
  • Разбирался как вообще нужно организовывать проектную деятельность, ставил конкретные цели, выписывал все задачи, сделал даже доску задач.
  • Расписывал MVP, убирал всё лишнее. Множество раз.
  • Создавал челенжи с друзьями, по условиям которых мы коммитились несколько раз в неделю писать код в свои проекты, организовали денежный склад, а выбывшие должны были потерять свою ставку. И я даже выиграл этот челенж, и забрал честно заработанные 10 тысяч рублей 😁
  • Объявлял публично, что не буду стричься пока не выпущу Rise. И не стригся больше года 💪🏻 Но в определенный момент сдался.
  • Искал помощников. Ребят которые будут пилить со мной. Люди находились, но быстро испарялись, когда дело доходило до реальной разработки. Но в самом конце именно это и сработало!

В какой-то момент это приложение стало моим незакрытым гештальтом.

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

Поэтому за месяц с небольшим, общими усилиями мы довели MVP до App Store 🔥

Как появилась идея? Что вдохновило?

У меня всегда были и есть проблемы со сном. Ложусь спать я хаотично, хоть сколько-нибудь стабильного графика у меня нет. Бывает я встаю в 7 утра, а бывает в 7 только иду спать.

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

Тогда зародилась мысль — идти к цели нужно маленькими шажками, долгосрочно и понемногу.

От этого я отталкивался в основной идее приложения — Rise фиксирует цель и формирует множество промежуточных точек, по сути просто сдвигает каждый день график сна на несколько минут.

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

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

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

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

Но далеко не всё из перечисленного реализовано в текущей версии, важнее было допушить до релиза то что уже сделано.

Как не забросить свой пет-проект. Мой кейс запуска приложения в App Store

Что вошло в MVP и сколько времени на него было потрачено?

MVP запущено спустя 4 года. Хахах) Но зато запущено!

Что вошло:

  • Создание и редактирование цели желаемого режима сна.
  • Генерация расписаний сна на сегодня и последующие дни.
  • Пауза — режим в котором расписание замирает на текущем дне, пока не захочется вернуться к движению к цели.
  • Отображение восходов и закатов солнца в паре с расписанием.
  • Помощь в перерасчете расписания на случаи соскоков.
  • Полноценный будильник внутри приложения.
  • Красивый онбординг да и вообще всё приложение реализовано в милом приятном стиле.

Какой технологический стек вы использовали? Почему?

Это нативное iOS приложение на языке Swift, на фреймворке UIKit.

Код открыт и доступен в open source.

WeatherKit

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

Работает быстро и удобно.

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

XCode Cloud

Это no code CI/CD от Apple.

Мы использовали его для прогона тестов, для публикации в TestFlight и App Store.

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

До конца года они предоставляют бесплатные 25 часов в месяц.

CoreData + CloudKit

CoreData это объектно ориентированная обертка над базой данных от Apple. В моей реализации достаточно громоздкая, но сейчас уже есть очень удобные интеграции со SwiftUI, которые позволяют работать с ней буквально в несколько строчек кода (и файлы описания моделей).

CloudKit это сихнронизация и хранение данных в iCloud. Интегрируется с CoreData и работает самостоятельно. Настройка простая. Для маленьких проектов — топ.

Swift Packages

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

Легковесная альтернатива Cocoapods, некоторые пакетики я даже вынес в open source, чтобы использовать и в других проектах.

SF Symbols

Это нативные iOS иконки, я использовал их чтобы не заморачиваться с поиском иконок и не тянуть лишние ресурсы в приложение. Из минусов — многие иконки требуют высокую минимальную версию ОС. Но если это не проблема — работает очень просто и удобно.

GitHub Projects

Использовали для доски задач, а теперь ещё роадмапа. Огромным преимуществом над примерно всеми альтернативами я выделю быстроту работы и простоту системы. А ещё достаточно удобно что оно из коробки интегрировано в репозиторий и в issues.

Фич очень мало, но для маленькой команды, опять же — топ.

GitHub Pages

Это совершенно бесплатная штука, которая позволяет быстро и без доп. кода запустить веб сайт для репозитория. Для релиза в App Store веб сайт обязателен, так что я привязал свой домен и запустил такой минималистичный сайтик.

ChatGPT

В чём только он не выручал… Действительно ценный инструмент.

  • Генерация текстов, уведомлений, цитат, советов.
  • Прикольная идея, которая легко реализуема благодаря GPT: рандомизация текстов, то есть в одних и тех же местах показывать разное, оживляет приложение.
  • Советы по UI, например весь онбординг я делал с ChatGPT. А ещё на некоторых экранах он помогал определить куда лучше положить элементы управления. А в других местах помогал улучшить UX оценивая “понятность” экранов.
  • Маркетинговые советы, например ключевые слова для App Store.
  • Описания для App Store и для веб сайта.

Как вы запускались и искали первых пользователей?

Запустились только в App Store. Две недели реджектов, и наконец аппрув после нескольких фиксов. Пользователей не искал, только знакомые. Есть мысли про ProductHunt, но не уверен что проект к этому готов.

С какими самыми неожиданными трудностями пришлось столкнуться?

С тем что можно реализовать проект на 80% и забросить… И так множество раз 🥲

С тем что без корпоративного аккаунта apple developer другие разработчики не могут толком запускать проект на реальных устройствах.

Сколько потратили и заработали? Есть идеи как это можно монетизировать?

Проект пока некоммерческий. Полностью бесплатен. Есть идея монетизировать через дополнительные платные фичи в будущем:

  • Синхронизация режима сна с солнцем, когда сдвигаются восходы и закаты — сдвигать расписание.
  • Прокачка будильника — звуки природы для засыпания и просыпания.
  • Подробная статистика снов и режима.
  • Интеграция со Spotify или другим подобным сервисом — чтобы юзер мог установить будильник из своих аудио.

Потрачено:

  • 100 баксов на apple developer программу.
  • 50 баксов на дизайн, иконку и иллюстрации (заказывал у начинающего дизайнера).
  • 100500 человекочасов и переживаний…

Какие планы на будущее?

Приложение сейчас на этапе MVP, а значит есть куча нереализованных интересных идей, которые хочется запустить:

  • Максимальная интеграция с системой: live activity, отправлять время сна в apple health, виджеты, приложение для часов, siri shortcuts.
  • Хранение отчетов по снам, возможность ими делиться.
  • Больше тем! Как минимум тёмная, причем для неё хочется сделать прямо отдельные иллюстрации.
  • Добавить серию или streak успешных засыпаний подряд.
  • Хочется сильно больше интерактивности: чтобы приложение более активно общалось с юзером, задавало вопросы, рассказывало инсайды, мотивировало.

Нужны ли какие-то советы или помощь?

Буду рад услышать любые советы, мысли или фидбек. Буду очень рад если скачаете и попробуете Rise сами!

Если хотите поучаствовать в разработке — велком, проект опенсорсный, доска и роадмап публичные, пишите! Добавлю в чатик и будем делать Rise вместе.

Денег не даю, но можно будет добавить проект в портфолио и получить упоминание в секции About в настройках приложения.

Какой совет вы бы сами могли дать идущим по вашим стопам?

  • Когда проект не приносит денег, ищите мотивацию помимо энтузиазма. На энтузиазме далеко не уехать!

Для меня решающей мотивацией стали другие люди которые помогали мне в разработке и тестировании. Их фидбек, настрой и новые идеи.

  • Продумайте MVP: основные фичи и юзер стори. Зафиксируйте список задач MVP и не добавляйте туда ничего нового, кроме обязательных неучтенных штук.
  • Отбросьте всё лишнее — переписывание кода на новую архитектуру подождет, функционал который кажется необязательным лучше тоже отложить.
  • Не гонитесь за инструментами и практиками. Берите самое простое и быстрое. Если можно что-то не затягивать — не затягивайте. В моём проекте вообще нет сторонних зависимостей кроме нативных фреймворков.
  • Найдите людей, возможно среди близких, которым будет интересно тестировать проект и от которых будет фидбек — это мотивирует.
  • Если не можете предложить денег — ищите новичков. Дизайн, разработка, тестирование. Новички могут согласиться помочь за скромные суммы или за сам факт работы вместе с экспертом. Это абсолютный вин-вин. К тому же начинающие специалисты часто с “горящими глазами”, чего может не хватать вам, если проект затянулся.
Начать дискуссию