Как стать автором
Обновить
151.82
KTS
Создаем цифровые продукты для бизнеса

Как стать iOS-разработчиком?

Уровень сложностиПростой
Время на прочтение19 мин
Количество просмотров18K

Привет! На связи KTS и наш эксперт по направлению iOS-разработки Александр.

Мобильные устройства помогают оставаться на связи с друзьями, работать, развлекаться и повышать продуктивность. iOS, несмотря на введенные санкции и сокращение продаж техники в РФ, остается популярной платформой, пользователи которой ожидают качественные и стабильные приложения для смартфонов, планшетов, умных часов и ТВ‑приставок.

Насколько востребована позиция iOS‑разработчика на рынке РФ, какие риски с выбором этого направления для старта карьеры наиболее актуальны, что именно надо изучать и где искать нужные материалы — в этой статье.

В сегодняшней статье поговорим про:

Мобильные устройства незаменимы для коммуникации и социальной, деловой и культурной сфер жизни. По данным Росстата 78,1% опрошенных используют мобильные устройства. При этом в мире на конец 2022 года зафиксировано более 1,2 миллиарда активных iPhone (источник). По данным Tinkoff Strategy Day уже в 2018 году клиентов мобильных приложений было больше пользователей Web‑версий — и разрыв продолжает расти (источник).

Доля мобильной операционной системы Apple на январь 2023 года составляет почти 28% всего рынка (источник). Тренда на снижение использования нет, и пользователи по‑прежнему хотят «яблочные» гаджеты: компания Apple является четвертым по популярности производителем первого квартала 2023 года в России (источник). Интерес к направлению со стороны работодателей сейчас тоже остается стабильным. Так, крупные отечественные компании (например, Тинькофф или Яндекс) регулярно запускают стажировки и обучающие программы для начинающих специалистов.

Источник

Хотя стоит отметить, что в 2022 году общее число вакансий в России для разработчиков мобильных приложений под iOS и Android снизилось на 20% и 19% соответственно и составило 15,6 тыс. и 17,3 тыс. Эксперты связывают это с ростом числа проектов под отечественные ОС, но, скорее, дело в низкой базе для российских аналогов, общем сокращении рынка найма джуниор‑позиций и оттоке специалистов за рубеж.

Зарплата джуниор iOS‑разработчика в России в 2023 году составляет от 80 000 до 100 000 рублей, при этом медианная зарплата найма с учетом всех уровней сильно выше: около 230 000 рублей. На доход влияют опыт работы (ключевой фактор), расположение, форма занятости. Компании прежде всего ищут специалистов со стажем от трех лет, снижая риск неудачного найма и сокращая за счет опыта кандидатов время их адаптации на проектах.

В целом, индустрия остается многообещающей, поэтому начать свой путь в IT или переключиться с другой специальности на карьеру iOS‑разработчика будет хорошим решением. Но перед тем, как браться за сложное обучение, важно задуматься, зачем это нужно и явно определить цели. Например, это может быть желание найти работу в крутых технологических компаниях РФ или за рубежом, создание своего приложения, улучшение знаний или получение большой зарплаты. Чтобы добиться успеха, нужно заранее понимать, как будешь это делать, какие будут промежуточные итоги и как будешь мотивировать себя на каждом этапе.

Риски

Безусловно, выбор iOS‑направления связан с риском полного запрета продаж техники и блокировки программ разработчика Apple для российского бизнеса. Авторитарный стиль калифорнийской компании много раз подвергался критике. Только в последние пару лет им всерьез занялись регуляторы разных стран, и лед, что называется, тронулся.

Сама компания открыто выражает недовольство требованиями регуляторов, но, скорее всего, ей придется подчиниться. Так что 2023 и 2024 годы покажут, насколько удастся надломить политику Apple под внешним давлением. Как только операционная система станет более открытой, потребность в разработчиках возрастет еще больше.

Hard skills

Итак, что должен знать и уметь человек, чтобы стать iOS разработчиком в 2023?

Знания, которые необходимы в работе, можно разделить на три категории, каждая из которых является основой для следующего уровня.

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

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

  • прикладной уровень: платформа, популярные фреймворки. Нередко подвержены хайпу и могут уйти с радаров так же быстро, как и появились (например, Catalyst).

Чтобы стать senior‑инженером, погружаться стоит во все направления: фундамент даст уверенность в завтрашнем дне, а знакомство с популярными фреймворками — в сегодняшнем.

При этом в индустрии на собеседованиях проверяются все уровни знаний. Чаще всего, вопросы разделены по 4-м традиционным блокам: язык, платформа, архитектура и многопоточность.

Темы для собеседований кандидатов
Темы для собеседований кандидатов

Дальше рассматривается обучение и формирование старта в iOS‑направлении именно через входные испытания при поиске работы (так как цель — это job offer), хотя важно отметить три навыка, которые не попали в таблицу, но их изучение будет не лишним для начала карьеры.

Disclaimer 1: London is the capital of Great Britain

Знание английского языка является необходимым навыком для будущего iOS‑разработчика (да и подавляющего числа IT‑специалистов тоже). Большинство документации, руководств и инструкций написаны на английском языке, значительная часть материалов и уроков на тему программирования и создания приложений для iOS только на английском. Кроме того, знание английского позволит разработчику делиться информацией и опытом на профильных ресурсах и упростит выход на мировой рынок найма.

Стоит обратить внимание на профильные для IT курсы, которые есть у многих школ: Яндекс.Практикум, SkyEng, Udemy.

Disclaimer 2: CS 101

Как было отмечено выше, изучение любой специализации в разработке должно основываться на фундаменте базовых знаний: структурах и алгоритмах данных, работы сетей, понимании устройства компьютера. Если совсем нет опыта, то стоит начать с двух вещей: Гарвардского курса программирования CS50 и книги «Код. Тайный язык информатики».

Также будет полезным погружение в структуры и алгоритмы обработки данных. С практической точки зрения мобильного разработчика, владение ими пригодится при оптимизации производительности приложения. Например, знание алгоритмов поможет отсортировать массив быстрым и эффективным способом (можно отдать это и в руки ChatGPT, но понять, что за код он написал, все равно важно).

Можно приглядеться к классической книге «Алгоритмы. Построение и анализ» (Кормен, Лейзерсон, Ривест). Еще рекомендуется изучить «Data Structures & Algorithms in Swift» от команды Kodeco (ex. Рэй Вендерлих).

Disclaimer 3: Git

Системы контроля версий помогают ориентироваться в коде и отслеживать его изменения. Самой популярной является git (источник) — представить ежедневную работу без него не получится.

Для изучения пригодятся две ссылки.

При этом сам по себе git — это инструмент для командной строки, у него нет графического интерфейса, поэтому для него существует много популярных UI‑клиентов. Их список можно найти на официальном сайте.

В дополнение стоит разобраться с моделями ветвления кода.

После того, как три общих темы будут закрыты хотя бы на минимальном уровне, стоит приступать непосредственно к iOS‑направлению.

Язык

Язык программирования — базовый инструмент ежедневной работы.

Источник

Согласно опросу 2022 года, для старта в iOS‑разработке достаточно одного языка — Swift. Основные ресурсы для его изучения.

  • Во‑первых, очень приличная официальная документация по языку. Времена, когда Apple почти не рассказывала, как пользоваться ее инструментами, прошли.

  • Во‑вторых, потрясающая книга от уже упомянутой команды Kodeco. В ней подробно разобраны основы языка, также есть отсылки к внутреннему устройству компьютеров — необходимый минимум iOS‑разработчика.

  • В третьих, видео на youtube, например Swift Programming Tutorial | FULL COURSE.

Для закрепления знаний важно ежедневно практиковаться. Тут помогут различные тренажеры языка. Например, приложения Unwrap, Свифти‑Квиз, Qwifty! или swiftQwiz. Также полезно «набивать руку» в решении простых задач с LeetCode или CodeRun. Для проверки необязательно покупать подписку — можно всегда попросить помощь и подсказку у, опять же, ChatGPT. Как им пользоваться из РФ, написано множество статей: например, в журнале «Код» или на dtf.ru.

Основными аспектами при изучении Swift будут

  • Типы данных: Числа, Строки, Коллекции и так далее, — а также понимание value и reference семантики. Важно уметь создавать свои классы и структуры и делать между ними осознанный выбор.

  • Функциональное программирование, но только самые основы: функции высшего порядка и их chaining. Про каррирование на старте можно не думать.

  • Generics, PATs, type erasure.

  • Диспетчеризация методов.

  • Обработка ошибок.

  • Memory management: стек и куча, MRR и ARC, copy‑on‑write, capture list, escaping и non‑escaping closures.

Изучаем Xcode

После прекращения поддержки AppCode альтернатив Xcode в списке IDE для платформ macOS, iOS, watchOS и tvOS не осталось.

При знакомстве с Xcode уделить внимание следующим моментам.

  • Учимся работать с playground.

    • глава из учебника по Swift от AppCoda в помощь.

  • Изучаем основные модули программы и знакомимся со списком горячих клавиш.

  • Учимся создавать сниппеты для более быстрой работы с кодогенерацией.

  • Учимся работать с дебаггером, отлаживать приложения, работать с симулятором, memory grap и view debugger.

  • НЕ учимся работать с Interface builder и Storyboard Editor. Я не противник создания UI‑приложения в визуальном редакторе, но большинство вакансий предполагают, что кандидат верстает именно кодом.

Платформа

iOS‑приложения (как и iPadOS, tvOS, watchOS) — это, прежде всего, фронтальные приложения, с которыми взаимодействует пользователь. Основа их разработки — удобный пользовательский интерфейс. Для его создания можно использовать фреймворки UIKit или SwiftUI.

UIKit является более старым, но и более распространенным в iOS‑разработке. SwiftUI появился в 2019 году и предназначен для создания пользовательских интерфейсов с помощью декларативного подхода. Сейчас сложно выделить конкретный подход: что UIKit, что SwiftUI будут жить рядом бок о бок еще долгое время. Так что изучать стоит оба фреймворка.

Источник

Показательно использование SwiftUI внутри самой Apple. Год к году он становится популярнее, хотя и присутствует пока что только в 1/4 всех бинарных файлов iOS. Хотя, что важнее, его проникновение растет быстрее увеличения общего числа бинарей.

Источник

UIKit

При изучении особое внимание нужно уделить вопросам:

  • UIView и UIWindow.

  • UIViewController, его жизненный цикл и событийная модель.

  • frame и bounds, Auto Layout.

  • Обработка нажатий: Touches, Gestures, hit testing.

  • UIApplication, SceneDelegate.

  • Offscreen rendering и render server.

Для старта рекомендую курс «UIKit c нуля». Использовать сторонние фреймворки для верстки вроде SnapKit или PinLayout на старте не советую: anchors выглядят довольно компактно и просты в изучении.

Отдельного внимания достойны анимации. Тут рекомендую книгу опять же от Kodeco — «iOS Animations by Tutorials».

SwiftUI

При изучении особое внимание важно уделить темам:

  • View и его жизненный цикл

  • Widgets, Text, Button, Image и так далее.

  • Container views: HStack, VStack, ZStack, Group и так далее.

  • Layout: padding, divider, spacer, frame и так далее.

  • Навигация: NavigationView и NavigationLink.

  • View modifiers.

  • Property wrappers.

  • Переиспользуемость элементов SwiftUI и UIKit.

Вследствие постоянного изменения API при погружении в SwiftUI, прежде всего, следует обратить пристальное внимание на официальную документацию и туториалы. Альтернативной будет часто обновляемая книга от команды Kodeco «SwiftUI Apprentice».

А уже после, для закрепления базовых знаний по Xcode, SwiftUI и UIKit, можно пробежаться по курсу от Apple «Develop apps for iOS».

Pet-проект

Источник

Для оттачивания навыков важна постоянная практика. Как говорится, код должен быть в руках. Одним из вариантов будет создание pet‑проекта в момент, когда уже есть база языка и среды разработки. Чтобы найти идею, нужно анализировать свою рутину, проблемы, с которыми сталкиваетесь на транспорте, при вождении, питании, обучении и так далее. Не бойтесь что‑то копировать!

Интересные макеты проектов для мобильных приложений есть на Behance или Dribble. При этом важно при их выборе руководствоваться Apple Human Interface Guidelines.

Для погружения вглубь создания макетов приложений можно изучить основы Figma. Иногда в компаниях еще встречаются Sketch, Zeplin, Adobe XD, но скорее как исключение. 

Сервисы для разработки интерфейсов
Сервисы для разработки интерфейсов

Базовый навык, который должен быть у начинающего разработчика, — умение посмотреть отступы, изучить свойства элемента на макете и, конечно, уточнить у дизайнера, что он имел в виду 😊

Deep dive

Безусловно, изучение платформы iOS не ограничивается построением экранов приложения. Стандартный SDK содержит колоссальное количество возможностей для решения самых разных проблем машинного обучения (CoreML, Vision, Speech и другие), взаимодействия с веб‑приложениями (JavaScriptCore), построения дополненной реальности (ARKit), чтения и записи NFC‑меток (CoreNFC), аудио‑ и видеостриминга (ReplayKit) и многого другого. При этом перечисленные технологии являются нишевыми и крайне редко обсуждаются на собеседованиях. Более популярными являются задачи, ставшие обязательными к изучению и использованию при создании любого долгоживущего приложения.

  • Жизненный цикл приложения.
    Текущее состояние жизненного цикла приложения определяет, что оно может делать, а что нет, в конкретный момент времени. При изучении

  • Пуш‑уведомления.
    Пуш‑уведомления — всплывающие сообщения на экране смартфона, которые помогают пользователю оставаться в контексте происходящего. Уведомления могут отображать текстовое сообщение, воспроизводить характерный звук или обновлять значок на иконке приложения. При изучении стоит обратить внимание на описание технологии в руководстве по созданию пользовательского интерфейса и на книгу от команды Kodeco «Push Notifications by Tutorials».

  • Работа с диплинками.
    Deeplinks и universal links — это способы перехватывать некоторые URL и вместо обработки в Safari открывать соответствующий экран приложения. Механизм позволяет после запуска приложения направить пользователя в правильный раздел, повышая конверсию в различных продуктах. Подавляющее число приложений использует такие «прокаченные» ссылки.
    Универсальные и глубинные ссылки работают примерно одинаково, поэтому их изучение можно пройти одновременно.

  • Сеть
    Важно изучить основные протоколы передачи данных в Интернете, такие как HTTP и HTTPS, почитать про REST и GraphQL, познакомиться с форматами JSON и XML. Также будет не лишним разобраться с технологиями Polling, Long Polling и WebSockets. Основа основ — класс URLSession, поверх которого построено много популярных библиотек, например, Alamofire.
    Для погружения в эту тему есть немало литературы и книг, но для старта я посоветую лекцию школы мобильной разработки Яндекса.

  • Хранение данных.
    Приложение, получая данные с сервера, может их сохранить для, например, дальнейшего использования в оффлайн‑режиме. Существуют разные способы хранения данных, между которыми важно уметь делать выбор.

    • UserDefaults
      Чаще используется, когда нужно сохранить небольшой объем данных (менее 100 КБ).

    • Core Data / Realm
      Используется для больших моделей данных, управления каскадными обновлениями, версионирования, работы с графами объектов. Выбор между Core Data и Realm неоднозначный, но для старта рекомендую начать с Core Data: все же это собственное решение Apple, да и переход с Realm на Core Data находится в поиске быстрее. Хорошей литературы мало, но пару ресурсов можно посоветовать: книгу от Kodeco и обзор на YouTube.
      Важно отметить, что CloudKit отлично работает с Core Data, так что данные, сохраненные в Core Data, могут также появиться на всех устройствах пользователя.

    • Keychain
      Представляет собой зашифрованную базу данных, куда сохраняются небольшие объемы конфиденциальной пользовательской информации: пароли, данные платежных карт, токены авторизации и так далее. API достаточно простой, для понимания будет достаточно одной статьи.

    • FileManager
      Когда iOS‑приложение устанавливается на устройство, создается структура папок, с которой можно работать напрямую, читая и записывая файлы с использованием механизмов Codable и, прежде всего, FileManager. Для погружения также будет достаточно хорошей статьи.

Архитектура

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

С оформлением помогут различные стайлгайды. Например,

Уровни архитектурных задач в iOS-разработке
Уровни архитектурных задач в iOS-разработке

Cо структурой кода или, что точнее, архитектурой вопрос сложнее. За 16 лет существования iOS мы видели Apple MVC, боролись с Massive View Controller, прошли эру доминирования VIPER и понизили его до архитектуры презентационного слоя наравне с MVP и MVVM, имплементировали CQR через Flux и Redux, говорили о принципах чистой архитектуры и SOA, решали вопросы навигации через координаторы, выросли до многомодульных приложений, изучали стандарты вроде The Composable Architecture. В этом многообразии терминов легко запутаться и потеряться. Чтобы была определенная системность, архитектурные задач iOS‑разработки можно разделить на 4 уровня проектирования, каждый из которых находится в своей точке абстракции.

  • уровень типов данных
    Чтобы понять границы отдельных типов данных: важно разобраться с принципами ООП, вникнуть в SOLID и другие популярные концепции: DRY, KISS, YAGNI. Все они направлены на улучшение поддерживаемости кода в долгосрочной перспективе. Хорошей литературы по этой теме написано немало, но пару докладов строго рекомендую к просмотру.

  • уровень пользовательской задачи
    Локальные задачи (например, выбор алгоритма сортировки или создание сложного объекта) хорошо решаются паттернами проектирования. Их использование добавляет стандартизацию в процесс командной работы.

  • уровень пользовательского пути
    Когда нужно реализовать экран или группу экранов приложения, связанных одной потребностью пользователя, надо обратить внимание на уровень метафор и рецептов. Это важная концепция, которую часто упускают из виду. Метафоры — это идеи, образ какого‑то идеального решения для структуры кода. Рецепт — это идея, сложенная с конкретными условиями: инструментами, языками, инструкциями, примерами, кодогенерацией и так далее. На этом уровне можно погрузиться в мир аббревиатур MVC, MVVM, MVP, VIPER (доклад коллег), познакомиться с координаторами и роутерами, узнать про сервисы и репозитории. Конкретные рецепты можно подглядеть у Uber или Point‑Free.

  • уровень группы пользовательских сервисов одного бизнес‑домена
    Самый объемный уровень — решение задачи по построению многомодульного приложения. Здесь важно разбираться в фреймворках и библиотеках, типах линковки, уметь выбирать между моно‑ и мультирепозиторием. Тема сложная, но джуниор‑разработчикам будет достаточно понимания самой проблемы. В качестве отправной точки советую эти статьи.

Менеджеры зависимостей

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

Менеджеры зависимостей берут на себя часть работы по управлению сторонними наработками: подключение, обновление, кеширование и так далее. В мире iOS есть три основных менеджера: CocoaPods, Carthage, Swift Package Manager. Подробно про них написано тут.

Автоматизация тестирования

Еще один аспект в создании поддерживаемых и надежных проектов — это понимание принципов и владение техниками автоматизированного тестирования. Еще лет пять назад начинающему iOS‑разработчику было необязательно погружаться в мир контроля качества, но сейчас этот навык стал необходим при устройстве на работу. В качестве отправной точки в изучении советую записи своего интенсива: 1, 2, 3 (или расшифровку).

Многопоточность

Источник

Многопоточность тяжело дается многим начинающих (да и не только) специалистам. Важно владеть этим инструментом практически в совершенстве, чтобы обеспечить плавную и бесперебойную работу приложений. При изучении надо понять разницу между процессом, потоком и очередью, разобраться в технологиях Grand Central Dispatch и Operations, погрузиться в новый дивный мир Swift Concurrency, узнать про примитивы синхронизации вроде локов и семафоров и попрактиковаться в решении проблем синхронизации потоков.

По этой теме, опять же, хорошего материала создано не мало.

Как дойти до конца

Путь, который нужно пройти до первых успешных собеседований, длинный и сложный. Нельзя стать специалистом, готовым к работе над реальными продуктами, за два месяца: пресловутое правило 10 000 часов никто не отменял. За это время можно несколько раз потерять мотивацию и разочароваться в выборе, найти новые силы, когда что‑то начнет получаться, и вновь споткнуться. Можно много говорить про веру в себя и доверие к своим решениям в прошлом, но есть и другие дельные советы.

Научитесь учиться

Во‑первых, систематизируйте свой подход и увеличьте собственную эффективность в обучении. Тренировать новые навыки тоже надо уметь. Есть отличный курс «Учимся учиться» за авторством пары нейробиологов. Курс построен по принципам, которым сам же и учит. Он поможет лучше понять, как работает мозг, узнать о разных методах изучения новой информации и способах хранения полученных знаний.

Соблюдайте системность

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

Найдите ментора

Найдите себе учителя или постоянного наставника. Большинство разработчиков подтвердят, что они многому научились у ментора, будь то опытный коллега или просто знакомый, знающий свою область. Он поможет избежать распространенных ошибок и обойти препятствия, которые могут замедлить обучение. С наставником можно участвовать в сессиях парного программирования, проходить интервью или даже получить рекомендацию на стажировку. Хороший наставник поможет вернуть в мотивацию в момент, когда она почти ушла.

Есть много профильных ресурсов, на которых можно найти ментора в IT. Кто‑то готов работать бесплатно, но это, скорее, исключение. В среднем, часовая ставка ментора с опытом — 2 500 рублей.

Также можно и нужно писать спикерам с докладов на конференциях и с записей на YouTube.

Станьте частью сообщества

Не проходите этот путь в одиночку. Начинающих специалистов много — объединяйтесь в группы и помогайте друг другу. Также обязательно подключайтесь и посещайте конференции и митапы (большинство из них бесплатны). Приведу список (далеко неполный) полезных чатов и сообществ в Telegram.

Сообщества:

  • Coffee&Code — можно посещать по субботам в своем городе. Очень рекомендую.

  • Ждунчики — сообщество Кирилла Дутова.

Митапы и конференции:

Новости:

Тренируйтесь проходить собеседования

У многих есть страх прохождения собеседований. Чтобы его обойти, познакомьтесь с форматом мок‑интервью. Их довольно много на YouTube (1, 2, 3). Как только почувствуете уверенность, начните тренироваться со своими друзьями, другими соискателями или экспертами из компаний, в которых было бы интересно работать, моделируя реальное собеседование.

Ищите стажировки

У обучения есть один недостаток — оно не позволяет увидеть и погрузиться в реальный трудовой процесс. Стажировка является ценным инструментом для развития навыков и построения профессиональных связей. Регулярно отсматривайте профильные сайты на предмет актуальных отборов.

Что еще почитать по теме

Это, конечно, не первая статья про старт карьеры в направлении iOS‑разработки. Если какой‑то аспект был неполным, на ваш взгляд, обязательно посмотрите еще эти материалы.

Заключение

Начать свой путь в iOS‑разработке может быть захватывающим и перспективным шагом для всех, кто мечтает о карьерном росте и творческом развитии. Обучение и саморазвитие являются основой успеха. Постоянно совершенствуйте свои навыки, изучайте новые технологии и следите за трендами в отрасли.

Удачи в вашем пути!


Другие наши статьи по iOS-разработке:

Теги:
Хабы:
+29
Комментарии9

Публикации

Информация

Сайт
kts.tech
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия