Как я изучил 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, конечно, есть такие приложения, но все они мне не нравились, и пользоваться ими было неудобно. Расскажу про него подробнее.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Иконка Автор: крутой дизайнер Антон, который делает дизайн очень недорого, но крайне достойно
Иконка Автор: крутой дизайнер Антон, который делает дизайн очень недорого, но крайне достойно
7575
154 комментария

показал мне, что такое xCode, что такое функции, переменные, как сделать таблицу, кнопки. Как сделать, чтобы они нажимались, и прочую базовую информацию.

Дальше я сделал довольно популярное приложение

72
Автор

да на самом деле правда ничего сложного)

2

Тоже изучаю Свифт, с перерывами года так с 15-го, и могу порекомендовать следующее:
– самого начала учитесь работать с доками, видео, статьи – самое то для погружения и понимания сложных вещей, но для более серьёзного разраба их зачастую недостаточно.
– Чтобы погрузиться в атмосферу русского комьюнити, могу порекомендовать
1) Подкаст «Подлодка»: https://soundcloud.com/podlodka
2) Подкаст «RunLoop”: http://bit.ly/runloopsc
3) Телеграмм-каналы:
@iosgr
@fiveze
@ios_heads
Для новичков: @swiftbook_chat
4) Канал «CocoaHeads» на ютубе: https://www.youtube.com/channel/UCPZtkJkHv_3pPC0veurLQ6Q
5) Из недавнего: был создан общий твиттер-аккаунт «Мобильный разработчик», где каждую неделю меняется автор и рассуждает на темы, так или иначе затрагивающее мобильную разработку: https://twitter.com/mobileunderhood
– Уровни мобильных разработчиков, с описанием скилсов: https://github.com/BohdanOrlov/ios-skills-matrix
– Из порталов:
Www.medium.com/ – почитать
Www.swiftbook.ru/ – перевод статей, курсы и прочее
Www.hackingwithswift.com
Www.nshipster.com
www.raywenderlich.com

Написал бы ещё, но нужно готовиться к ЕГЭ(

47

Этот комментарий лучше соответствует теме статьи, чем сама статья

7

В большинстве своём сообщество разрабов очень токсичное

Русскоязычное — да, англоязычное получше. Недавно пришёл с вопросом (подробным и вежливым) в ру чат по питону, там какой-то хуесос решил, что нужно назвать мой код говном, а на вопрос отвечать не нужно. Код с точки зрения того, как "принято" и правда, возможно, не очень, т.к. я не питонист. После того, как я _вежливо_ указал, что желательно помочь решить проблему, а не тыкать в кодстайл — и мне ещё раз указали, что код хуйня.
Таких пидоров не слишком много, но в целом замечаю, что на ру-ресурсах народ сильно токсичнее, чем в en. Приходишь с вопросом, как помыть кота, а тебе говорят, что не надо мыть кота, помой лучше собаку, или что ты вообще долбоёб, если кого-то решил мыть.

приложение, которое даже приносит какие-то деньги

Статой-то поделитесь, интересно же :)

Я примерно так же изучал iOS — пилил pet-проект, собирал вопросы и раз в несколько дней созванивался с человеком за денежку. Правда, у меня на тот момент уже был достаточно серьёзный опыт разработки под Android (5+ лет фуллтайм), так что мне это далось относительно легко — платформы, конечно, разные, но логика примерно одинаковая.

32

#анекдот[программистский]
Спрашиваешь что-то на американском форуме - получаешь ответ.
Спрашиваешь на израильском - в ответ: "а зачем таки вам это нужно?".
Спрашиваешь на русском - и тебе на 5-ти страницах объясняют, какой ты мудак.
;)

16

Приходите в чат MoscowPython и группу на ФБ — мы хорошие. И если что токсичных охолоняем. ;)
Буквально в прошлую пятницу на митапе джуниор делал доклад, как его мотивировало заниматься Питоном участие в одном из предыдущих митапов. Скоро выложим видел на Ютуб. ;)

10