Для кого эта статья?

  • Для новичков в IOS, которым интересно как устроена сфера

  • Для тех, кто тоже выкладывает свое приложение

  • Для тех, кому интересно вспомнить, как они начинали свой путь новичком

  • Для тех, кто еще не определился со сферой в IT

  • Для тех, кому интересна моя история

Кто я и почему именно IOS?

На данный момент я являюсь 16-и летнем Питерским парнем, у которого еще с 7 класса была цель стать программистом. Пытался начать я свой путь несколько раз в течение 3-х лет. Вкатывался в Web dev с JS, но что-то не зашло - забил. Начинал вкатываться в Python с появлением его на школьных уроках информатики - забил. И вот, третий подход - состоявшийся, как я считаю. Я всегда был влюблен в технику Apple, и в один момент мне дико захотелось МакБук без причины. Он мне нравился и все - я горел им. В течение года копил 120к. Откладывал, работал с отцом, мутил серые темы. Вместе с моей покупкой мне открылся мир iOS разработки, которая с первых минут показалась мне особенным, чем-то новым. Это симбиоз как разработки клиент-серверной части(backend), так и версткой UI(frontend). Конечно, это вылилось в огромный трудоемкий процесс после того, как я начал создавать свое собственное приложение, но об этом позже.

Как я вкатывался в IOS?

В большинстве случаях новички загораются конкретным направлением в программировании после просмотра на ютубе человека, который говорит, что он зарабатывает 100000$ в наносекунду сидя дома и ничего не делая. Так случилось и со мной, когда я наткнулся на зарубежного IOS engineer'a. А так как этот период совпал с моей покупкой MacBook'a - я сразу определился с родом занятий на ближайшее время. Начинал я с простейших видео на ютубе: изучал основы, пробовал делать что-то в playground'e. Сначала было легко, ибо основные понятия в программировании я знал, оставался только синтаксис Swift'a.

Мой первый учебный проект, который и стал моим занятием на пол года

Я знал, что учить язык лучше сразу с практики. Мой путь был таков:

есть задача -> моя попытка реализации -> анализ результата -> поиск способа как сделать лучше

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

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

LiquiLove: Приложение для пар

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


Цикл разработки I: Создание первых экранов регистрации

На этом этапе я только познавал основы UIKit'a, верстки, переходов. Хочу отметить, что с самого начала я был против Сторибордов, все писал кодом. Этот период был самым сложным, ведь я окунулся в абсолютно незнакомую среду. Основы языка, которые я до этого учил, оказались вообще не тем, в чем заключались мои нынешние задачи. В результате я познакомился с созданием и настройкой UI, переходами между экранами.

Цикл разработки II: Подключение базы данных - Realm

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

Цикл разработки III: Основные экраны: Главная, Календарь, Профиль

Самая масштабная ступень, которая до сих пор регулярно обновляется и дорабатывается. Здесь я намного ближе познакомился с UIKit, стал использовать архитектуру MVVM. Главный экран, где выводятся две фотографии, два имени и количество дней, проведенных вместе со своей второй половинкой, не составил большого труда. Интереснее же Календарь!

CalendarScreen
CalendarScreen

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

Цикл разработки IV: Работа с сетью - синхронизация, добавление друзей

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

  • Расширил функционал приложения, добавив две глобальных функции

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

Использовал я Firebase - сервис от Гугла. В нем пользовался инструментами базы данных, хранилища фотографий, аналитики, авторизации, используя Sign In With Apple. В дальнейшем планирую ознакомиться A/B тестами.

Думаю, на этот этап я потратил больше всего нервных клеток) Ведь столько раз сталкивался с необъяснимым поведением. А сколько крашей и блокирований пользователей было на релизе - ммммм) Ведь синхронизация Realm и Firestore выкинула много подводных камней.

Цикл разработки V: виджеты и проблема с изучением новой технологии

Я решил вынести виджеты в отдельный пункт, ведь ради них мне пришлось познакомиться со SwiftUI, что выбило меня из колеи. Тут сработал "Синдром утенка". Ведь с начала знакомства с IOS разработкой я работал только с UIKit'ом. Я посчитал это лучшим для себя, отбрасывая другие варианты. Так же получилось и с Realm - я посчитал его перспективной и современной технологией с крутой командой разработчиков, как говорилось в видео на ютубе. В результате на ментально уровне у меня появилось отвращение к CoreData, он стал мне неприятен. После слов этого же видео, в котором гласилось, что Apple обосрались с кор датой, мой "эффект установки" дал о собе знать.

Эффект установки (Einstellung-effect) — феномен, при котором уже имеющаяся у вас идея или начальная мысль препятствует поиску лучшей идеи или решения.

Цикл разработки VI: подготовка к релизу, тесты

И вот, казалось бы, все уже готово, остается только протестировать, но этот этап затянулся. Я скинул проложение на оценку своим друзьям и знакомым, попросил фидбека. В результате этого в приложение много что поменялось, начиная переработкой каких-либо функций, заканчивая изменением в дизайне. Так же выявился ряд ошибок, на исправление которых мне понадобилась неделя. Параллельно я готовился выкладывать приложение в AppStore. Начал создавать дизайн, логотип, превью для аппстора. Это заняло у меня еще одну неделю. На релиз получилось бы выйти быстрее, если бы я не скачал Xcode 14 Beta. Мне пришлось около месяца ждать официальной версии Xcode, чтобы выложить приложение.

Цикл разработки VII: Финал - релиз

И настал заветный день - 8 сентября. Ровно пол года с момента начала моего изучения IOS разработки. Я не стал сразу подключать рекламу, ведь должен был убедиться, что все работает хорошо. Как вы понимаете, не все пошло хорошо)) пришлось выпустить 5 версий приложения с мелкими доработками и фиксами. На шестой версии я подключил рекламу от AppleAppstoreSearch с бесплатным промо кредитом в 100$. Спустя 10 дней после релиза приложение собрало около 70 загрузок, 1/3 из которых пришла при помощи синхронизации с партнером! Сейчас на момент 19-го сентября я буду подключать стороннюю рекламу, пытаясь добить 1000 загрузок до конца октября.


Итог

С полного нуля в IOS разработке за пол года я создал свое собственное приложение, что считаю хорошим результатом. Я не сидел по 6 часов в день, часто я вообще не садился за разработку. Главное, я не потерял интерес к этому, делал все по своим силам и возможностям, никуда не торопясь.

Отдельное спасибо хочу передать сообществу EasySwift

Ссылка на приложение

Комментарии (0)