Marat Khusainov
Разработка

Как я учил Swift с нуля в декабре 2022. И почему первый продукт провалился

7 мин чтения

В декабре 2022 я решил учить Swift, чтобы сделать своё приложение. Полтора года разработки, релиз в App Store, 500 скачиваний и ровно ноль рублей дохода. Это не успех-история. Это разбор того, как я учился и где сэкономил бы себе год, если бы знал тогда то, что знаю сейчас.

Декабрь 2022. Зачем вообще iOS

К тому моменту у меня уже был опыт в продажах, CRM, автоматизации бизнес-процессов. Я писал регламенты, настраивал воронки в AmoCRM, делал интеграции через подрядчиков. Технические основы были, но писать код руками я не умел.

Идея приложения родилась из личного опыта. Я учил английский и не находил инструмента, в котором было бы то, что мне действительно нужно. Свои словари, простая тренировка карточками, социальные механики. Duolingo это сильная социалка, но контент чужой. Quizlet это свой контент, но скучная обёртка. Хотелось гибрид.

Я выбрал нативный iOS и Swift. Не Flutter, не React Native. Логика была простая: учиться платформе целиком, чтобы потом можно было брать любые проекты.

Многие отговаривали. Аргументы стандартные. «Уже поздно», «сейчас все идут в AI», «нативная разработка умирает». Через три года ясно: всё ерунда. Сегодня у меня в App Store больше шести приложений, я веду клиентские проекты как лид-разработчик, и нативная iOS живее всех живых.

Первые три месяца. Туман

Декабрь, январь, февраль я просто ничего не понимал. И это не фигура речи. Буквально открывал документацию и не понимал ни одного слова. Что такое optional. Что такое generic. Почему у функции три варианта объявления. Чем ViewController отличается от View.

Учился интуитивно. Смотрел всё, что находил. Читал куски кода из чужих проектов. Пробовал собирать примеры из туториалов и ломал их. Это было дико интересно и дико медленно.

Главный вывод из этого периода: в первые месяцы важно не понять, а привыкнуть. Привыкнуть к синтаксису, к структуре проекта в Xcode, к именам типов и методов. Понимание приходит потом, когда мозг перестаёт паниковать от вида незнакомых слов.

Я бы не стал записываться на курсы на этой стадии. Курс ведёт от точки А к точке Б, но в первые месяцы ты не знаешь, где находится твоё А, и не понимаешь, нужна ли тебе точка Б. Лучше смотреть и копировать что-то конкретное и полезное лично тебе.

Февраль 2023. Ментор

В середине февраля я начал заниматься с ментором. И это был перелом.

Не потому что ментор «вкладывал мне знания». А потому что появилась обратная связь на мой код. Я писал, он смотрел и говорил: «вот тут ты делаешь так, потому что не знаешь про вот это». Каждое занятие давало мне сразу пять-десять конкретных вопросов, на которые я раньше не знал, что нужно искать ответы.

Первый рабочий экран получился в феврале. Translate-форма с переводом через Google Translate API. Пять-шесть элементов, текстовое поле, кнопка, результат. Радость была как от первого закрытого лида в продажах. Вроде ерунда, но это твоё, ты сам собрал.

И тут же первая техническая ловушка. Подключить Google Translate, казалось бы, просто. Документация есть, ключ получил, запрос отправил. Но в реальности всё ломалось на каждом шагу. Ответы приходили не в том формате, асинхронность непонятна, ошибки сетевого слоя ни о чём не говорят. Я начал рисовать схемы запросов и ответов на бумаге. Не ради красоты, а чтобы держать в голове, что происходит. Эта привычка осталась со мной. Диаграммы рисую до сих пор, особенно для сложных потоков данных.

Март, май. Просадка

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

Замкнутый круг. Мало работаешь, медленно двигаешься, расстраиваешься, ещё меньше хочется работать.

В этот период я временно прекратил занятия с ментором. Логика была такая: «если я не успеваю делать задания, то и заниматься нет смысла». Это была ошибка. Правильное решение, наоборот, увеличить частоту обратной связи и снизить размер задач. Но тогда я этого не видел.

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

Релиз. Реальность vs план

В июле 2023 я писал в канал, что до первого релиза осталось семь недель. Я искренне планировал релиз к сентябрю и заработок к концу года.

Реальность: релиз состоялся 1 марта 2024.

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

500 скачиваний. 0 дохода

Релиз. App Store одобрил с первой попытки (уже хорошо, см. отдельную статью про реджекты). Я опубликовал, поделился ссылкой в канале, попросил друзей скачать.

500 скачиваний. И всё.

Доход: 0 рублей. Конверсия в платную подписку у меня была заложена. Три уровня, гость, авторизованный, премиум, разные лимиты. Но никто не платил, потому что приложение не закрывало ничью реальную боль. Я делал то, что хотелось мне, а не то, что было нужно рынку.

Этот провал был неизбежен, и я расскажу почему.

Что я понял задним числом

Главная ошибка была в порядке шагов. Я начал с обучения Swift. Потом начал писать приложение. Только потом задумался, нужно ли оно кому-то. Правильный порядок ровно обратный: сначала проверь спрос, потом учи нужное под этот спрос.

Как это выглядело бы по уму. Я мог бы сделать Telegram-бот за месяц, который выдаёт пользователям карточки слов и собирает статистику использования. Это и есть валидация. Реально ли люди возвращаются к таким карточкам, готовы ли платить за расширенный функционал. И только увидев цифры, идти в нативный iOS.

Этот урок я применил уже на следующих проектах. Когда появился MeerGuard, я не пошёл сразу в iOS-приложение, а начал с Telegram-бота. Гипотеза подтвердилась, и только потом мы расширили продукт до Mini App, сайта и iOS-клиента. Сейчас у MeerGuard 7000+ активных пользователей и ноль рублей на рекламу. Разница в подходе очевидна.

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

Ментор окупается, когда у тебя нет ритма. В январе, когда я ещё не понимал даже синтаксиса, ментор мне был не очень нужен. Я не задавал правильных вопросов. К июню он стал бесценен. Когда у тебя есть код, который ты только что написал, и человек может за час объяснить, что ты сделал криво. Это самый дорогой и самый окупаемый формат обучения.

Мотивация работает как функция от результата, а не наоборот. Я долго ждал, что появится «вдохновение работать». Не появилось. Появилось наоборот. Когда я начал реально работать по шесть-восемь часов в день, через неделю появилось вдохновение. Сначала действие, потом эмоция.

Что сейчас

Meerno я перезапускаю с нуля на SwiftUI. v1 был на UIKit с программной вёрсткой, без storyboards. Теперь я бы такую архитектуру не выбрал. SwiftUI быстрее, чище, и за два года экосистема стала зрелой. Монетизация и онбординг переработаны полностью. Больше нет иллюзии, что «классный функционал сам себя продаст».

Параллельно я веду клиентские проекты, и каждый из них кладёт в копилку реальные знания, которые невозможно получить из туториалов. На No Sugar Challenge я разбирался с переходом с монолитного JSON на event-driven архитектуру с Firestore-синхронизацией. На Calorie Counter с AI-распознаванием еды через GPT-4o. На Loyalty Cards с интеграцией Apple Wallet через PassKit с подписью сертификатом.

Если бы я вернулся в декабрь 2022, я бы сказал себе одну вещь. Сначала найди человека, который заплатит тебе хотя бы 5000 рублей за решение его задачи, а потом учи язык под эту задачу. Всё остальное приложится.

Что дальше

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

Похожие статьи