Мне было 17, когда я открыл Xcode в первый раз. До этого я делал сайты, ковырялся в Python и считал, что программирование — это когда текст в терминале бежит. А потом я увидел, как парень на YouTube за 20 минут собрал приложение с красивым интерфейсом, анимациями и кнопками, которые реально работают.
Я подумал: "Я тоже так хочу."
Это начало истории, в которой я потратил 4 месяца на приложение, которое скачали 23 человека. И знаете что? Я бы не поменял ни дня.
Идея, которая казалась гениальной
Как и все начинающие разработчики, я хотел сделать что-то "уникальное." Придумал приложение для трекинга привычек. Да, я знаю. Трекер привычек. Самая оригинальная идея в истории App Store.
Но в 17 лет мне казалось, что мой будет особенным. У него будет красивый дизайн (я ведь ещё и дизайнер!) и удобный интерфейс. Я даже придумал название — "AppРитм". Ритм жизни, ритм привычек, всё в тему.
План был простой: за месяц написать, за неделю опубликовать, через два месяца стать миллионером. Спойлер: ни один пункт не сработал по плану.
Первая неделя: эйфория и StackOverflow
Первые три дня я летал. Создал проект, накидал экраны, подключил NavigationView (тогда ещё не было NavigationStack). Каждые 10 минут показывал маме: "Смотри, кнопка работает!"
На четвёртый день реальность ударила. Мне нужно было сохранять данные. Локально. На устройстве.
Я залез в документацию Apple по Core Data. Прочитал первые два абзаца. Закрыл вкладку. Залез на StackOverflow. Скопировал код. Не заработало. Нашёл другой ответ. Скопировал. Тоже не заработало. Третий ответ был для Objective-C. Пятый — для UIKit.
В итоге я просто сохранял данные в UserDefaults. Массив строк. Хардкор.
// Мой первый "код для хранения данных"
// Пожалуйста, не делайте так
UserDefaults.standard.set(habits, forKey: "myHabits")
Это работало? Да. Это было правильно? Вообще нет. Но я этого не знал, и незнание — это счастье.
Месяц первый: дизайн vs реальность
В Figma мой дизайн выглядел потрясающе. Градиенты, скруглённые карточки, плавные анимации. Я потратил на макеты целую неделю.
Потом начал переносить это в SwiftUI.
Оказывается, тот градиент из Figma — это не просто "поставить gradient." Это LinearGradient с конкретными stops, в конкретном фрейме, который ведёт себя по-разному на разных размерах экранов. Анимация, которая в прототипе занимала 2 секунды, в реальности требовала понимания withAnimation, тайминговых кривых и состояний.
Мой дизайн из Figma:
- 5 экранов
- 12 кастомных компонентов
- 3 анимации
Реальность через месяц:
- 3 экрана (два я вырезал, потому что не смог реализовать)
- 4 кастомных компонента (остальные заменил стандартными)
- 1 анимация (
.opacity— да, это считается)
Урок номер один: дизайн и разработка — это два разных мира. Рисовать можно что угодно. Реализовать — сильно меньше. Особенно когда ты учишься на ходу.
Месяц второй: баг, который чуть не убил проект
К середине второго месяца приложение выглядело прилично. Список привычек, возможность отмечать выполнение, простая статистика за неделю.
И тут я обнаружил Баг.
При перезагрузке приложения некоторые привычки дублировались. Иногда одна привычка превращалась в три. Иногда все исчезали. Помните UserDefaults? Вот оно.
Я боролся с этим багом две недели. ДВЕ НЕДЕЛИ. Я переписывал логику сохранения, добавлял проверки, ставил принты через каждые три строчки. В итоге проблема оказалась в том, что я сохранял данные в onAppear и в onDisappear одновременно, и при быстром переключении между экранами они конфликтовали.
Фикс занял 4 строчки кода. А поиск фикса — 30 часов.
Это был мой первый настоящий дебаг-сеанс. И я тогда понял: программирование — это не про написание кода. Это про починку того, что ты написал.
Месяц третий: App Store и бюрократия
Я закончил приложение (вернее, решил, что оно "достаточно готово") и решил его опубликовать. Зашёл в Apple Developer Program.
$99 в год.
Мне 17. У меня нет кредитной карты. У меня нет $99. У меня есть только Xcode и энтузиазм.
Пришлось просить маму. Она, конечно, спросила: "А это точно нужно?" Я уверенно ответил, что верну ей деньги через месяц. (Спойлер: не вернул через месяц.)
Регистрация заняла неделю. Создание сертификатов, профилей, App ID — это отдельный квест. В 2024 году Apple уже упростила процесс, но тогда я реально потерялся в их документации.
Потом — ревью. Apple Review Guidelines — это 180 страниц правил. Моё первое ревью вернули с замечанием: "Ваш скриншот показывает placeholder-контент." Я не заменил тестовые данные на скриншотах. Такие дела.
Второе ревью прошло. Приложение появилось в App Store. Я сделал скриншот и отправил всем друзьям.
Релиз: 23 скачивания и один отзыв
Первые три дня я проверял App Store Connect каждый час. Статистика загрузок обновляется не в реальном времени, и я этого не знал. Думал, что она просто показывает ноль.
Через неделю набралось 23 скачивания. Из них минимум 10 — это я сам и мои друзья. Ещё 5 — это, скорее всего, боты.
Один человек оставил отзыв: "Нормальное приложение, но зачем мне ещё один трекер привычек?" 3 звезды.
Честно? Этот отзыв убил мою мотивацию на два дня. Потом я перечитал его и понял, что чувак прав. Мой трекер ничем не отличался от 500 других трекеров в сторе. У меня не было уникальной фишки, не было маркетинга, не было аудитории.
23 скачивания. $0 дохода. -$99 за аккаунт разработчика. ROI: минус бесконечность.
Чему это меня научило
Прошло два года. Мне сейчас 19, и я смотрю на тот трекер привычек как на свою первую тренировку в зале — кривую, неуклюжую, но необходимую.
1. Начинай с маленького
Мой план был "5 экранов, 12 компонентов, 3 анимации." Надо было начать с одного экрана и одной функции: добавить привычку и отметить выполнение. Всё. MVP из учебника.
Сейчас, когда я начинаю новый проект, я спрашиваю себя: "Какая одна вещь должна работать, чтобы это имело смысл?" И делаю только её.
2. Не трать месяц на дизайн
Дизайн важен. Но не на первом этапе. Сначала сделай работающую штуку. Потом наведи красоту. Обратный порядок — ловушка для перфекционистов. Я знаю, потому что сам перфекционист.
3. Читай документацию (хотя бы начало)
Если бы я потратил час на чтение документации по Core Data вместо того, чтобы два дня гуглить ответы на StackOverflow, я бы сэкономил кучу времени. Документация Apple не самая дружелюбная, но она полная и точная.
4. Маркетинг > код
23 скачивания — это не провал кода. Это провал маркетинга. Приложение работало нормально. Но о нём никто не знал. Можно написать идеальный код, но если никто не видит твой продукт — какая разница?
Сейчас я начинаю рассказывать о проекте ещё до того, как напишу первую строчку кода. Посты в Telegram, статьи на Dev.to, треды в Twitter. Аудитория строится параллельно с продуктом.
5. Шип. Просто шип.
Самое главное, что я вынес из этого опыта: я отправил приложение в мир. Неидеальное. С багами. С UserDefaults вместо базы данных. С одной анимацией вместо трёх.
Но я его зашипил. И 90% людей, которые "пишут приложение," никогда этого не делают. Они бесконечно добавляют фичи, полируют дизайн и ждут момента, когда будет "идеально." Этот момент не приходит.
Shipped is better than perfect. Это клише, но это правда.
Что стало с приложением
Честно? Оно до сих пор в App Store. Я обновлял его пару раз — поправил критический баг и обновил дизайн под iOS 17. Скачиваний по-прежнему мало. Но мне уже не стыдно за него.
Оно стало моим первым пунктом в портфолио. На собеседованиях я рассказывал: "Я сделал приложение и опубликовал его в App Store." И людей впечатляло не приложение, а факт, что я довёл проект до конца в 17 лет.
Сейчас я работаю с SwiftUI на совсем другом уровне. Знаю SwiftData, Combine, async/await, тестирование. Но всё это началось с того кривого трекера привычек и UserDefaults.
Каждый эксперт когда-то был новичком, который просто не бросил. Банально, но факт.
Если вы думаете написать своё первое приложение
Вот мой совет: не думайте. Откройте Xcode. Создайте проект. Напишите хоть что-нибудь.
Оно будет кривым. Оно будет с багами. Кто-то оставит вам три звезды с комментарием "зачем мне ещё один трекер привычек."
Но вы получите опыт, который нельзя получить из туториалов. И, может быть, через два года вы будете писать статью о том, как ваше первое кривое приложение изменило вашу жизнь.
Если было полезно, заходите в Telegram — там ещё больше такого контента. А на Boosty продаю готовые тулкиты для разработчиков.
Top comments (0)