iOS-приложение за три месяца, не зная ничего: только опыт

Статья для тех, кто думает о своём приложении, но не решается начать. Ну и для остальных. Здесь опыт, полученный за три месяца разработки с нулевыми знаниями на старте.

В конце статьи суть и выводы. Можно скролить сразу туда, если очень лень.

По зёрнышку, по семечке

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

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

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

У меня были знания HTML и CSS, небольшой опыт в JavaScript и совсем крохи в PHP. Опыт работы с дизайном в личных проектах. А вот знаний Swift или Objective-C (языки, на которых пишутся iOS-приложения) не было совсем. Также я имел весьма туманные представления о механике работы App Store, продвижении (ASO), настройке сертификатов, внутренних покупок, мобильной аналитики и прочем.

Ключевая вещь для понимания: сделать приложение — не главное. Как другие люди узнают о его существовании?

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

На секунду просто остановите мечты о покорении всех смартфонов планеты и представьте момент: вот вы опубликовали приложение в магазине. Что происходит? Вы внезапно видите в iTunes Connect тысячи установок каждый час? Этого не будет хотя бы потому, что статистика отстаёт на пару дней от реального времени (поэтому озаботьтесь сторонней и лучше в первом релизе). Даже для суперпопулярного Prisma использовались различные маркетинговые техники продвижения (например, окучивание редактора NYT).

Как только вы поймёте, как привлекать установки (например, у вас есть деньги на платный трафик), начинайте разработку. Дальше от вас требуется только дисциплина. Её, кстати, можно подтянуть с помощью AVE.

Результат выполненного задания AVE

Студия «20 век Фокс»

Как бы подробно вы ни составили ТЗ, многие вещи изменятся несколько раз. Я очень детально обдумал и описал механики приложения. Экраны и их состояния отрисовал в Sketch. Там же сделал даже прототип с переходами.

Экраны приложения в Sketch AVE

В задачу входили разработка клиента (то, что непосредственно у пользователя) и сервер (часть, где хранятся данные, работает логика приложения). Разместил заказ и получил около 15 предложений от студий и отдельных разработчиков. Самое низкое по цене предложение было около 450 тысяч, самое высокое — 3 миллиона.

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

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

Разработка

Начал с просмотра курсов и первых попыток кодить. Через неделю мне стало лень смотреть видео, и я перешёл на лучший, на мой взгляд, метод обучения: есть задача → Google → Stackoverflow (чаще всего). Stackoverflow — это как «Ответы Mail.ru», только не у курильщика и про разработку.

Самое сложно при этом — сформулировать то, что ты, собственно, хочешь. Ответ на ваш вопрос будет в 99% случаев, об этом уже кто-то подумал. А если нет, то задумайтесь ещё раз, возможно, вы хотите сделать какую-то чушь.

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

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

Да, поначалу будет тоже непросто. Например, функции в Cloud Functions вы будете писать на JS. А база имеет NoSQL-тип, то есть сама её суть отличается от реализаций, с которыми вы могли работать на обычных сайтах и проектах (вроде MySQL).

Также Firebase почти из коробки даёт авторизацию с помощью Google, Facebook и других сервисов. Большой плюс: вы сможете сделать анонимную регистрацию (нам всем лень регистрироваться), к которой в будущем пользователь сможет уже привязаться.

Сколько стоит использование такого сервера (вы же не думали, что он бесплатный)? По-разному, зависит от нагрузки и оптимизации вашего приложения, но пока дёшево, за июнь у меня счёт всего в $2.

Готовьтесь, что будут факапы. После фичеринга (о нём позже) и ощутимого объёма установок я обнаружил, что у некоторых пользователей удаляются все их способности… Я упустил один момент в логике очистки достижений, и скиллы просто сносились в какой-то момент.

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

Аналитика и экономика

Когда начинают говорить про юнит-экономику, метрики, от обилия обозначений начинаешь сходить с ума (а они ещё и отличаются в разных подходах).

Как же просто понять, что приложение прибыльно и имеет смысл лить деньги на рекламу, масштабируя пользователей? У вас должна сходиться экономика: доход с пользователя за весь период (LTV) должен быть хотя бы равен стоимости привлечения установки (CAC).

Чтобы получить LTV, берём когорту, смотрим сколько она принесла выручки на каждого. Кстати, это можно сделать прямо в iTunes Connect (у меня было предвзятое к нему отношение). Это очень мне помогло, потому что стандартными способами я не смог это увидеть ни в Firebase Analytics, ни в Facebook Analytics (он коряво считал выручку), а AppMetrika на момент выпуска ещё не имела отчёта по внутренним покупкам (сейчас уже есть).

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

У меня сейчас вот так:

Когортный анализ AVE

Нетрудно понять, что при стоимости установки в $0,5 и LTV в 5 центов (по последней неделе) существует десятикратная разница. Сходимость так себе. В такой ситуации можно снижать CPC, например, отправиться на поиски волшебной (мифической?) одна- и двухцентной установки в Google Ads (бывший AdWords), но есть вопросы к качеству такого трафика. Можно пытаться растить конверсию.

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

Фичеринг

Потрясающий шанс протестировать вашу идею, не тратя деньги на платный трафик. Apple добавляет приложение в список рекомендуемых, «Приложение дня» или другие подборки. Что же происходит? У меня было вот так.

График установок AVE

AVE попало в «рекомендуемые» на третий день после релиза. Узнал я об этом случайно: увидел рост установок органики в AppMetrica и не мог понять, откуда он появился. Поискав, обнаружил приложение в подборке. Сказать, что мне повезло, ничего не сказать, ведь каждый день релизится около 200 новых приложений.

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

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

Выводы и эффективные вещи

  • Ключевой вывод, который нужно сделать: не стоит надеяться на рост, который возникнет сам по себе. Нужно чётко понимать, как вы будете получать установки.
  • Решили разрабатывать сами и нет знаний Objective-C? Изучайте и пишите на Swift. Даже не сомневайтесь, там всё уже ок.
  • Используйте сервисы наподобие Firebase. Это даст возможности, скорость и гибкость на старте. Позже, если понадобится, вы всегда сможете использовать более серьёзные решения.
  • Используйте встроенную возможность SKStoreReviewController от Apple для получения отзывов. Сама интеграция простейшая (пара строчек кода), а результат значительный. Ещё я бы рекомендовал поработать над логикой запроса отзыва. Например, отложить по времени, запускать после положительных событий (прохождение уровня или задания). К тому же сейчас стандартные манипуляции с отсылкой при негативном отзыве пользователя на почту не нравятся Apple при проверке.
  • Об этом уже сто раз писали, но я повторю: не запрашивайте разрешение на пуши при старте.
  • Реализация in-app-покупок с нормальной проверкой чеков (не на устройстве) может быть весьма трудоёмка. Вместо того чтобы упарываться самому, вы можете использовать сторонние сервисы (бесплатно).
  • Фичеринг — мечта и минимум х10 установок. Вы не найдёте выходы на редакторов App Store, чтобы договориться (у меня не получилось). Лучшее, что можно сделать, — это написать вот сюда.
  • Обязательно внедрите аналитику и настройте базовые события до релиза. Особенно in-app-покупки, если они у вас будут. На первых порах вполне можно пользоваться аналитикой от Apple.
  • Отслеживайте источники установок (трекинг). К примеру, с помощью AppMetrica. Создаётся специальная ссылка, по которой в будущем вы будете видеть установки, например, от конкретного блогера или даже поста.

А что за приложение-то?

AVE про действия и поступки. Ты выполняешь задания: от совсем простых в начале до сложных на более высоких уровнях. Развиваешь и открываешь новые способности (основаны на теории самоактуализации личности Маслоу). Кроме того, что растёшь сам, как бонус за выполнение получаешь награды: подарки и скидки на книги, еду, одежду и другие вещи.

Если есть идеи или пожелания → рад услышать.

func getReview()
return "завтра же начинаю делать свой app!"
error = "ничего не понял, но интересно"
Мне нужен негативный вариант 😠
Показать результаты
Переголосовать
Проголосовать
0
67 комментариев
Написать комментарий...
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Релевантного опыта не было) эти знания помогли, возможно, в целом, но не в частности.
Да и дизайн UI все таки был абсолютно новой сферой для меня. Тем не менее посчитал честным написать про такой опыт.

Ответить
Развернуть ветку
Виталий Подольский

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

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

Ответить
Развернуть ветку
Denis Bystruev

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

Ответить
Развернуть ветку
Vladimir Chernatkin

Норм статья для начинающих. Основные грабли раскрыты. Зачет и респект

Ответить
Развернуть ветку
Vladimir Chernatkin

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

Ответить
Развернуть ветку
4 комментария
Посторонний

"в надежде на то, что проекты нарисуют клюшку" - я не встречал такой метафоры.

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Медленный, а затем взрывной рост. Например, здесь: https://rb.ru/glossary/hockey-stick/

Ответить
Развернуть ветку
Renat Badgiev
с нулевыми знаниями на старте.
были знания html/css, небольшой опыт с JS и совсем крохи с PHP. Опыт работы с дизайном в личных проектах.

Это какой-то особый «ноль» среди программистов?

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
5 комментариев
Artem Dzyuba

Статья интересная. Однако я так и не увидел момент между "и я перешел на лучший.." и началом установок. Как вы пилили приложения 3 месяца, не зная язык? Какие были проблемы, как вы их решали? Как мотивировали себя эти 3 месяца, ведь без базы наверняка были долгие затыки.

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Спасибо 👌
Про детали самой разработки хочу рассказать на Хабре. В начале делаешь много глупых вещей -> их хотел описать простым языком, чтобы другие могли избежать.

Элементарные вещи языка понятны через несколько дней (тут лучше всего курсы). Гораздо сложнее с паттернами, логикой и архитектурой. Делал, чтобы работало, потом улучшал. Например, сначала у меня была куча глобальных переменных без классов, потом были классы, которые инциализировались при каждом вызове функции, потом я узнал о синглтонах 🤦‍♂️ Да и сейчас много корявого.

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

По мотивации мне помогло только следующее. Я четко определил MVP, убрав все, что мог и расписал задачи на недели. Сделал это после 2 месяцев работы, когда понял, что можно улучшать код бесконечно. И, конечно, меня сильно мотивировала сама идея.

Ответить
Развернуть ветку
4 комментария
F. K.

очередной todo list для прокрастинирующих подростков

Ответить
Развернуть ветку
Сергей Борисович

а прокрастинируют только подростки?

Ответить
Развернуть ветку
Denis Tsarkov

Хорошая статья, интересно было читать!)

Ответить
Развернуть ветку
Денис Абдуллин

На днях скачивал это приложение, показывал друзьям, и тут такая статья выходит. Три месяца вам потребовалось, чтобы одновременно научиться и сделать приложение? Включая публикацию в стор?

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Здорово, что рассказали друзьям 👍
Да, можно сказать 3,5 месяца, с учетом публикации (попыток сделать более-менее стабильную версию, ожидания ревью и тд). Качество кода, конечно, оставляет желать лучшего даже сейчас (понимаешь это с каждым днем).

Ответить
Развернуть ветку
Roman
Развивай вторую руку

Oh my god

Ответить
Развернуть ветку
Roman

Короче приложение сомнительное, но то, что вы получили нужные вам навыки - это здорово!

Ответить
Развернуть ветку
1 комментарий
Aaa Bbb
Сколько стоит использование такого сервера (вы же не думали, что он бесплатный)?

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

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

На мой взгляд, совсем бесплатно получится только в очень простых приложениях... Например, бесплатно в Cloud Functions можно работать только с гугл-сервисами (нельзя делать запросы к 3 стороне), планировщик не бесплатный. Но стоимость незначительная.

Ответить
Развернуть ветку
3 комментария
Anna Abramova

Идея приложения прикольная. Спасибо за статью! Скачаю и попробую

Ответить
Развернуть ветку
Михаил Затолокин

Firebase - тема) сделал вебаппу в феврале , включил гибкий тариф, в приложении более 1000 пользователей, за пол года почти вот накапало 2 бакса) плюс они же покрываются трехста долларами, который даёт Гугл на год после того, как сделал гугл карты с платным лимитом тоже
Главное думаю при создании там базы и проекта выбирать европу/Азию , если знаешь что целевая аудитория из рашки будет например , нет нет, а пинг поменьше будет) я вот не уследил по началу, в итоге 100% русская аудитория долбит американские серверы( хоть и все равно задержка минимальная

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Я тоже упустил этот момент, стоит us-central. Но действительно не катастрофа)

Ответить
Развернуть ветку
Егор Жохов

Чот слишком кликбейт в заголовке

Ответить
Развернуть ветку
Maxim Syabro

Дайте возможность переключить язык, а не просто брать из системы :)

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Почти все готово для английского, бьюсь только с переключением "on fly" (без перезагрузки)... Тексты всех заданий тоже почти переведены.
Думаю, будет в одной из следующих версий.

Ответить
Развернуть ветку
1 комментарий
Nikolay Kenig

Вы начинающий?
Да я некоторых слов даже не понял!

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Да, когда начинал - почти ничего не знал (на странные слова старался поставить ссылки). Все получится, если приложить усилия)

Ответить
Развернуть ветку
911

круто, респектую 💪

(пробисило что даже сюда вставил трек ссылки, так и не смог скачать из-за эдблока)

Ответить
Развернуть ветку
Евгений Колотов

Автор молодец, респект тебе. Ждем приложение под android.

Ответить
Развернуть ветку
Владимир Дефолтный

как не зная ничего (работал гуманитарием в библиотеке и было скучно) прочитать 2 книги и построить ракету на Марс за 30 дней
а в середине статьи косвенно указывается, что папа - депутат, а сам космонавт сидит на ЛСД

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

На андроид нет, пока не осилил) А аналог выпустили, можно ссылку? Очень интересно.

Ответить
Развернуть ветку
3 комментария
Jan Sosunov

Александр, посмотри на Native Script - получится разрабатывать и под iOS и под Андроид. На будущее и как вариант. Ты писал, что у тебя есть опыт с веб-разработкой.

Ответить
Развернуть ветку
Paul_N

Под него как минимум нет нормальных IDE. Тогда уж лучше Flutter.

Ответить
Развернуть ветку
S.Z

Блин, как же хочется на андроид. Кто-нибудь знает аналоги?

Ответить
Развернуть ветку
Михаил Гаугаш

Спасибо за статью. Было неожиданно увидеть автора этого приложения на vc. Примерно две недели назад нашел ваше приложение где-то по рекомендациям внутри App Store, когда собирал референсы, т.к. планирую делать приложение в сфере саморазвития и образования. Ваша идея мне очень понравилась, была необычной, и одной из моих любимых. Был бы рад пообщаться с вами, ваш опыт вдохновляет.

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Большое спасибо!
Можно написать в FB или Telegram (@osmyakov) - с удовольствием пообщаюсь.

Ответить
Развернуть ветку
Oleh Kopyl

Как понять что приложение прибыльно – понятно.

А как понять что приложение пользуется спросом и в него стоит вкладывать ресурсы на дальнейшую доработку и доведение до монетизации?

Сразу делать монетизацию не вариант (куча причин лично для меня).

Вот вложил я, например, 100 баксов на трафик, а пришло 64 пользователей. Это значит что оно пользуется спросом и в... А если 63, то уже все, шляпа?

Тут про анализ рынка в разрезе спроса, а не экономики.

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Промахнулся с ответом (ниже).

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Возможно кто-то более опытный предложит другое, но я бы смотрел на метрики:
- рост Retention, DAU, MAU
- время в приложении (если важно),
- свои события (достижение уровня, использование фич)
Если метрики растут, то и будущая монетизация будет лучше работать (но это не точно).
Введенная монетизация может изменить поведение/конверсии и смысл данных потеряется.
63-64 платных инсталла без LTV просто не с чем сравнить...

Ответить
Развернуть ветку
Ivan

А можно еще данных про запуск (именно релиз первой версии) проекта:
- потратил денег: __ USD
- потратил дней жизни: ____ дней

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Если считать только траты на приложение (не на жизнь): около 5к руб + 99$ акк apple
Со старта самостоятельной разработки до выпуска 1 версии прошло где-то 3,5 месяца. Если брать с дизайном, ТЗ/обдумыванием в голове - побольше, но посчитать сложно.

Ответить
Развернуть ветку
Viacheslav Moroz

Подскажите как именно получали базу по Swift. Если человек ноль в программировании, то как за 3,5 месяца написать полноценное приложение я не представляю, может быть потому что уделяю языку по часу в день (работа)...

Интересует именно очередность этапов изучения, которая дает быстрое погружение и прогрес (учитывая что на ютубе есть лекции по алгоритмам, которые можно смотреть неделями). Матерые программисты меня закидают, но новичку нужны постоянные результаты для того, чтобы мотивация не умерла. А совершенствовать знания можно уже потом, когда как минимум понимаешь зачем это нужно.

Ответить
Развернуть ветку
Alexandr Osmyakov
Автор

Да, я тратил, обычно, полный день.
Полностью согласен насчет результатов и выгорания. Было жутко коряво (и сейчас тоже), но я видел результат. С каждым днем многое становятся понятней. Единственное я бы рекомендовал не копипастить код, а переписывать ручками и пытаться понять (если непонятно ничего страшного) - я так быстрее учился.

По этапам у меня было так (что помню):
1. Курсы
- курс Дениса Быструева (бесплатная часть), он тут в комментариях отметился
- несколько курсов со swiftbook
2. Ролики
Смотрел ролики на ютуб по нужным мне вещам. Например, получение и запись данных в базу Firestore или как сделать tabview. Выбирал несколько и смотрел, какой больше нравится или где понятней. Больше всего заходил "kilo loco" и какой-то индус, было мало воды.

Сейчас это в основном stackoverflow и для совсем нового ютуб.

Ответить
Развернуть ветку
64 комментария
Раскрывать всегда