Как я изучил Swift и выпустил своё приложение

Хочу поделиться опытом изучения языка программирования Swift с нуля.

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

В заголовке я написал что «изучил» Swift, это, конечно же, не так. Процентов на 3–5%, думаю, да, но даже этого мне хватило, чтобы написать и выпустить своё приложение, которое даже приносит какие-то деньги.

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

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

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

Когда ты делаешь сам, ты доделываешь каждый элемент до того состояния, пока ты сам не будешь кайфовать, и неважно, сколько это займёт времени.

Сейчас есть множество крутейших курсов для изучения чего угодно (в том числе Swift). Например, за смешную сумму в $11 на сайте Udemy можно найти всё, что хочешь, правда, нужно знать (хотя бы понимать) английский. Обычно у топовых курсов есть субтитры, тоже на английском.

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

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

Моей целью не было получить работу где-то, я просто хотел делать приложения для себя, потому что нужные мне приложения я часто не находил в App Store, вернее, приложения, которые мне бы нравились. Всегда хотелось что-то сделать удобнее или переделать, а лишний мусор выкинуть. Кстати, для приложения vc.ru тоже есть пара комментариев, подскажите, куда их лучше адресовать.

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

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

Сейчас я понимаю что главное, как и везде, это желание и интерес, потому что 90% информации я почерпнул из Google (95% стековерфлоу). Вообще, сейчас крайне просто стать программистом «из гугла», а вот наши отцы изучали всё по книгам, и даже загуглить нельзя было ничего, вот это хардкор.

Я провёл с ним примерно 20 занятий, после чего его девушка сказала, что он слишком мало времени уделяет ей. И нам пришлось закончить :(

Следующего учителя я нашёл в интернете, ставка была уже 800 рублей, но и уровень был повыше, ему я задавал свои накопившиеся вопросы: как сделать вот так, почему тут xCode пишет ошибку. Со вторым учителем я созванивался раз 25–30 по часу-два. Моё первое приложение называлось «Секреты iOS», где я собрал вручную более 90 фишек и секретов, некоторые из которых даже сам не знал.

Естественно, приложение было примитивным, конечно же, с множеством бесполезных и бездарных анимаций, звуков и прочего хлама, свойственного начинающему программисту. К сожалению (счастью), Apple запретила такие приложения уже давно, и моё приложение не пропустили, а я ещё думал: «Странно, что в сторе нет таких приложений, сейчас как сделаю, ух».

Но ценность, конечно, была колоссальная, я научился очень многому, что в последствие стало фундаментом. Дальше я сделал довольно популярное приложение (не скажу, какое, простое, но крайне востребованное даже сейчас), которое прожило примерно год, после чего Apple его удалила.

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

Примерно в октябре 2018 года я захотел написать своё приложение для отслеживания дней рождений и других праздников. В AppStore, конечно, есть такие приложения, но все они мне не нравились, и пользоваться ими было неудобно. Расскажу про него подробнее.

Главный экран

До того как я пришёл именно к такому дизайну, было более пяти других, но в той же концепции. Как выглядит приложение сейчас, мне нравится. В нативном дизайне Apple, как это сейчас модно. Мне всегда нравился именно такой простой стиль, и сейчас почти все к нему пришли (даже Viber).

За основу я взял любимый Telegram и постарался сделать список контактов максимально похожим. Сейчас, наверное, это тоже золотой стандарт. Кстати, цвет фона у количества дней не родной синий, потому что родной синий цвет немного выжигает глаза, поэтому я сделал ему альфу 0.9. Это мелочь, но из этих мелочей состоит всё приложение.

На главном экране простая таблица с секциями, где секции — название месяца. Выглядит просто, но присутствует много нюансов. Например: нужно рассчитать, сколько и какие секции тебе нужны, что делать с ДР, которые уже прошли в этом месяце, что делать, если удалить последний контакт в месяце, распределить контакты по этим секциям и так далее.

Если у контакта указан год рождения — то пишется, сколько ему будет лет, также день недели и число, всё то, что мне самому нужно. И кстати, если вы думаете, что склонять «лет» и «год» — это автоматика, то нет, это всё нужно писать вручную. Готовое решение для Swift я не нашёл, зато нашёл решение для таблиц Excel и переписал его, так как не было ничего сложного.

Аватарки кликабельны благодаря подам (готовым сторонним библиотекам, которыми опытные разрабы делятся бесплатно на GitHub). Именно с помощью пода я сделал синхронизацию с «ВКонтакте», называется SwifyVK, рекомендую.

Автор простой, не зазнавшийся (редко бывает) и крутой прогер, отвечал мне в Telegram на мои тупые вопросы. За его крутой под задонатил ему немного. Вообще не понимаю, почему GitHub не введёт донаты, очень крутая тема, и качество возрастёт. Сейчас авторам подов, которые мне нравятся, я доначу вручную, часто на странице пода есть кнопка доната через PayPal.

Перейдём к экрану контакта

Если у человека указан номер телефона во «ВКонтакте» или он из контактов, то кнопки «Позвонить», SMS, Telegram, WhatsApp будут активны.

Кстати, совсем недавно Telegram прикрыл возможность написать человеку по номеру телефона, раньше было можно, в WhatsApp работает и сейчас, поэтому кнопка Telegram просто открывает приложение. Чтобы перейти в конкретный диалог, нужно знать имя пользователя, видимо, для безопасности и антиспама.

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

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

Ещё «забавная» вещь со Swift: язык относительно молодой, и часто меняется синтаксис от версии к версии. Например, ты нашёл крутой под или кусок кода, а он был написан под Swift 2 или 3, сейчас уже 4.2. Если код небольшой, то конечно, его можно переписать, но если при билде проекта у тебя вылетает более 99 ошибок в поде, то проще его удалить, так бывает довольно часто.

Крутые и большие поды обновляются еженедельно, и с ними проблем нет, кстати, даже Instagram использует множество сторонних библиотек, потому что нет смысла изобретать велосипед (можете посмотреть весь список в настройках «Библиотеки с открытым кодом»).

Что касается «Сделать смешное видео», это просто редирект в Safari на сайт, который делает видео. «Цветы» — то же самое, «Идеи подарков» — это коллекция, заполненная мной вручную (берёт данные с моего сервера в JSON).

Но рассказать я хотел про другое, если нажать на три точки сверху справа.

«Объединить»

Суть: если вы импортировали контакты из телефонной книги или «ВКонтакте» и Facebook, то вы можете объединить его с контактом в телефоне. Проще говоря, у вас есть контакт Саша О в телефоне, вы синхронизировали контакты из «ВКонтакте» или Facebook, там у вас в друзьях есть Саша Орлов (он же Саша О).

Нажимаете «Объединить» — и в контакты iPhone улетает информация из соцсети, дата рождения, фотка и имя (также улетает и ссылка на «ВКонтакте» или Facebook), за дизайн этого экрана немного стыдно (хоть в целом и норм), делал его вначале, к концу приложения я немного прокачался и вообще уже писал всё кодом, без сториборда.

Сделать было не просто, нюансов очень много, и залезть в записную книжку iPhone тоже нелегко, если ты никогда этого не делал.

Что-то я очень растянул статью, расскажу буквально ещё про парочку фич и подведу итог.

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

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

Подведу итоги

Чтобы изучить Swift на минимальном уровне (кстати, уже можно идти на работу за более чем 40 тысяч), нужно только большое желание, интерес и получать удовольствие от того, что ты делаешь. Я каждый день по сто раз тыркал своё приложение и показывал всем: «Вот, я сам сделал, смотрите, как круто».

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

Очень важно и круто иметь друга, знакомого или фрилансера, который специалист по теме, чтобы когда возник вопрос, ты не тратил много времени на его изучение, а спросил, что погуглить, или созвонился. Например: я потратил часы на изучение CoreData (БД от Apple), а мог бы потратить 20 минут на изучение и базовое использование Realm.

99% всего можно загуглить, например, хочешь скачать картинку из интернета — просто пишешь «download image from url swift».

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

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

Теперь я ещё больше знаю и понимаю, как работают приложения, сервера и прочее, что сделать сложно, а что легко. И могу пойти работать менеджером проекта или спустить с небес на землю оценку какого-то проекта.

Идей приложений очень много, а времени и скила не очень, но главное — хочу переписать сам мою напоминалку (именно с неё семь лет назад всё началось, про неё даже была статья на vc.ru).

Разработчик отличается от программиста тем, что разработчик не тупо пишет код по тз или скетчу, а ещё думает, как было бы лучше и удобнее юзеру. Я скорее разработчик, так как изначально был пользователем. Теперь делаю так, как мне кажется удобно и функционально. Практически во всех приложениях мне хочется что-то сделать лучше.

Мне написало и пишет много людей на почту и в Telegram по поводу приложения, из них несколько, что им понравилось, как я делаю, и они хотели бы научиться так же. Сейчас я по Skype бесплатно обучаю несколько человек азам и тому, что умею, сразу предупредив, что я сам мало знаю, не понимаю в архитектуре и в Clean Beautiful code ;)

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

В большинстве своём сообщество разрабов очень токсичное. Но когда попросишь их показать своё приложение в сторе, 99% скажут, что его удалили или в компании NDA. Лучше бы помогли и поддержали.

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

Чуть не забыл ссылку на само приложение ;)

Иконка Автор: крутой дизайнер Антон, который делает дизайн очень недорого, но крайне достойно
0
155 комментариев
Написать комментарий...
Mr. Burns

Вот из-за подобного контента отчаявшиеся люди в ебенях нашей страны бросают свои нищенские, но стабильные 20-30 тысяч в месяц, берут кредиты чтобы пережить пару-тройку месяцев и подучиться и «уходят» в это ваше ойти. В итоге оставшись с непогашенным кредитом, с хорошо если каким-то стартовым минимумом знаний (а зачастую и в полном ахуе от непонимания происходящего), они остаются сидеться в своих мухонсрансках полностью выжатые и в полном ахуе от того чо они натворили. Им кредитку тинькова/сбера уже не погасить в этой жизни… у меня таких историй — вагон.

Каждый пидорас который пишет что можно «Научиться X за Y дней» и начать зарабатывать «в инторнете» должен нести ответственность.

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

Что угодно лучше, чем нищенская стабильность.

Ответить
Развернуть ветку
Mr. Burns

ничего не лучше минуса банку. Тут и коллекторы приезжают постреливать.

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

Ну вот постреляются с коллекторами, хоть какой-то экшн посреди серой безысходности.
Ваши знакомые выбрали всё-таки не самый худший вариант "выбиться в люди", другие в таком же положении вербуются наёмниками на войну в пустыне/Африке.

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