iOS-разработчиком становятся после одного законченного приложения на Swift, которое ставится на устройство и объясняется без «так в туториале». Симулятор помогает, но рекрутер спокойнее, когда видно, что вы ловили разрешения, клавиатуру, плохую сеть и жизненный цикл. Магазин — плюс, не единственный билет, если GitHub честный и сборка воспроизводится.
Ниже — какой минимум Swift и платформы, как показать код без NDA, куда смотреть junior-вакансии. Зарплат «в среднем» здесь нет: коридор собирайте фильтрами на вакансиях iOS.
Коротко:
- Одно приложение со списком, деталью, сетью и пустым/ошибочным состоянием сильнее портфолио из десяти Playgrounds.
- Стек входа: Swift, SwiftUI или UIKit — по вакансиям, сеть, локальные данные, Git. Objective-C читайте потом, если легаси в слотах.
- Нужен Mac. Без него вход в нативный iOS почти закрыт; облачные Mac — костыль, не стратегия на год.
- Код с работы под NDA не выкладывайте. Учебный клон сценария и описание роли — да.
- Junior+remote узкий. Intern, гибрид, «iOS developer» без middle в заголовке.
Чем iOS-разработчик занят в первый месяц
Первый месяц: экран по макету, навигация, список, запрос, ошибка, не забыть Safe Area и тёмную тему, если её просят. Редко — свой движок и App Store-оптимизация как основная работа. Если вам интересны только анимации SwiftUI и неинтересны ревью Apple и крэши — роль всё равно упрётся в магазин и устройства.
В продукте часто одно приложение долго. В аутсорсе — чужие модули и дедлайны. На входе покупают аккуратность к жизненному циклу и умение читать чужой UIKit, даже если вы учили SwiftUI.
Соседние пути: Android и общий выбор платформы мобильная разработка. Frontend похож состояниями UI, не совпадает рантаймом и ревью.
Барьеры входа: Mac, аккаунт, язык
Mac с актуальным Xcode — практический барьер. Хакинтош и облачные CI без ежедневной практики на устройстве замедляют. iPhone для проверки жестов и сети полезнее второго курса. Аккаунт разработчика нужен для стора и части возможностей; для первой работы достаточно TestFlight позже или Ad Hoc, учебный проект может жить в симуляторе плюс видео, но устройство сильнее.
Swift — рабочий язык. SwiftUI в junior-вакансиях 2026 встречается всё чаще, UIKit никуда не делся в легаси. Смотрите ваши слоты, не Twitter. Английский помогает: документация Apple и часть команд. Русскоязычные вакансии тоже есть — читайте язык объявления.
С нуля без смежного кода горизонт длиннее рекламы буткемпов. Из Android/Kotlin вход быстрее по голове про мобильный UI, не по API Apple. Нужен iOS-артефакт, не «я уже мобильный».
Стек и что не класть в резюме
Повторяющееся в junior:
- Swift: опционалы, протоколы, конкурентность на уровне async/await или хотя бы понимание, зачем не блокировать UI;
- SwiftUI и/или UIKit — как в слотах;
- списки, навигация, формы;
- URLSession / тонкая обёртка, JSON, ошибки;
- UserDefaults / SwiftData / Core Data — одно, не все сразу;
- Git, SPM или CocoaPods — что реально использовали;
- базовые Auto Layout, если UIKit.
Можно отложить: Combine «весь», свой подмодуль SPM на 15 пакетов, ARKit, Watch, «микросервисы на Vapor», чтобы казаться fullstack. Rx — только если легаси вакансии. Не пишите SwiftUI+UIKit+Rx+TCA+Clean, если в репозитории два экрана туториала.
90 дней: одно приложение до «можно поставить»
- Дни 1–25. Swift + два экрана. Список и деталь. Если опционалы и списки путаете — не прыгайте в архитектуру из конференций.
- Дни 26–55. Сеть, пустые состояния, ошибка, простое кэширование. README: как открыть в Xcode, какая версия, чего нет.
- Дни 56–75. Устройство: клавиатура, фон/возврат в приложение, плохая сеть. Тесты на маппинг — плюс. Скриншоты или TestFlight, если есть аккаунт.
- Дни 76–90. Резюме, точечные отклики, подготовка к живому коду списка и к рассказу про приложение.
Критерий: собираете на симуляторе и на телефоне, проходите сценарий, объясняете поток данных. Стор не обязателен. Если публикуете — не копируйте чужой бренд и не кладите секреты в репозиторий.
Пример 1. Учебное приложение привычек
Вакансия: junior iOS, Swift, SwiftUI, REST как плюс.
Приложение привычек. Список, деталь, отметка за день, фильтр, экран ошибки сети. Стек: Swift, SwiftUI, async/await, URLSession, локальное кэширование. Учебный API. Нет подписок, нет виджетов, нет Watch. README: Xcode version, что сделано мной, что не сделано. Видео прохода сценария 60 секунд — если нет TestFlight.
Архитектура простая. Не выдаю за прод-банк. Ключи API учебные, в репозитории не секреты работодателя.
Это можно открыть. «Социальная сеть как Instagram» без запуска — нельзя.
Пример 2. Как показать опыт, если прод под NDA
Было:
iOS-разработчик в финтехе. Делал суперприложение. Код показать не могу. Стек: всё из вакансии.
Стало:
Junior iOS (Swift). В коммерции: экраны списка и детали в приложении с NDA — без скринов и без названия внутренних модулей. Публично: учебное приложение привычек, код и видео [ссылки]. На созвоне разберу учебный репозиторий целиком и коммерческий опыт словами: навигация, сеть, что ломалось на слабой сети.
NDA уважается, доказательство есть. Не воруйте продовые репозитории. Если коммерции нет — только учебный артефакт, это честнее пустого «конфиденциально». Письмо: без опыта. Резюме проектов: как описывать проекты.
Поиск вакансий, тестовое, интервью
Ищите junior iOS, intern, trainee, Swift iOS. Читайте SwiftUI vs UIKit. Слоты «5 лет, свой SDK, дежурства» — не вход. Каталог: вакансии iOS, junior, mobile.
Тестовое: экран + сеть + список в оговорённое время. Клон прода за выходные — отказ. Тестовое, отказ от тестового.
Интервью: опционалы, память на уровне «retain cycle», жизненный цикл, чем отличается список в SwiftUI, как кэшировали, как ловили крэш. Рассказ о приложении: как рассказать о проекте. HR: скрининг. Подготовка: вопросы.
Вилка — фильтры каталога. Удалёнка junior iOS редкая. Ожидания по зарплате. Мошенники с «оплатите лицензию Apple за нас»: проверка.
Mac, устройство и как не сорвать демо на созвоне
За день до интервью соберите проект на той версии Xcode, которую укажете в README. Запустите на симуляторе и на телефоне. Проверьте, что не висит на «localhost» с вашей машины, если API учебный — пусть будет доступный хост или чёткий mock. Закройте лишние симуляторы. Откройте нужный схему. На созвоне просят «покажи приложение»: два тапа до списка, не десять минут на подпись provisioning. Если provisioning ломается — держите видео прохода как запас. Это не стыдно, стыдно не открыться совсем.
Рассказ держите пользовательским. «Человек отмечает привычку, данные идут в API, при ошибке сети показываем повтор, кэш читаем с прошлого успешного ответа». Потом стек. Вопросы про ARC и retain cycle готовьте на своём коде: где замыкание, где weak. Если в учебном проекте цикла нет — скажите, где он появился бы, если бы подписались на notification без отписки. Не зубрите чужой пример из интервью-галка.
Тестовое: список + деталь + сеть. Сделайте работающий список. Красивые анимации SwiftUI не спасают, если JSON не парсится. В комментарии к сдаче: версия Xcode, что не успели, как запустить. Не прикладывайте сертификаты и профили. Если просят клон App Store за выходные — откажитесь по объёму.
Публичный репозиторий без секретов. Коммерческий код не сливайте. В резюме явно: что публично, что под NDA словами. Разбор CV. Если нет Mac на постоянной основе — сначала решите железо, не покупайте курс. Иначе 90 дней рассыплются на ожидание облачной машины. Тишина в воронке: сначала ссылка и сборка, потом количество откликов. Почему не отвечают.
Частые вопросы
Обязателен ли App Store?
Нет. Плюс, если приложение не стыдно и вы прошли ревью. Минус, если ради галочки выложили падающий туториал.
SwiftUI или UIKit?
По целевым вакансиям. UIKit читать полезно почти всем: легаси не исчез. Второе портфолио не обязательно.
Можно ли учить iOS на Windows?
Нативно — практически нет. Облачный Mac годится как временный доступ, не как единственная среда на месяцы учёбы.
Нужен ли платный аккаунт сразу?
Нет. Сначала приложение на симуляторе и устройстве по бесплатному аккаунту с ограничениями. Платный — когда целитесь в TestFlight/стор или в вакансии, где это явно плюс.
Стоит ли Flutter вместо Swift?
Только под Flutter-вакансии. Для iOS-слотов Swift-артефакт нужнее. Выбор платформы.
Что делать, если все вакансии хотят коммерческий опыт?
Intern, стажировка, усиление публичного приложения, гибрид. Не писать middle. Стажировка, junior remote.
Чек-лист перед откликом на iOS
- Проект собирается на указанной версии Xcode. Симулятор и желательно устройство.
- Сценарий списка, детали и ошибки сети проходит без «у меня вчера работало».
- README: версия Xcode, что сделано, чего нет. Нет секретов и профилей.
- Публичный репозиторий есть, даже если коммерция под NDA описана словами.
- В skills нет Rx, TCA, Watch и Vapor без следа в коде.
- Заголовок junior iOS / intern, не middle.
- Письмо с ролью, ссылкой, готовностью к тестовому в оговорённое время.
- На созвоне вы открываете нужную схему за минуту или держите видео прохода.
Если нет Mac — сначала железо, не курс. Если приложение не ставится — сначала сборка, не рассылка. Если ставится — откликайтесь на junior Swift, intern, читайте SwiftUI vs UIKit в тексте. Не смешивайте в одном файле iOS, Android и Flutter без артефактов. Неделя — одна корзина. Собеседование готовьте на своём коде: опционалы, async, список. Вопросы, рассказ о приложении: как рассказать о проекте.
Стор не закрывает чек-лист, если приложение падает. Стор не обязателен, если GitHub и устройство честные. Не копируйте чужой бренд ради публикации. Вакансии на неделю: каталог iOS. Файл резюме прогоните в разборе CV до десятого одинакового отклика. Если демо на созвоне срывается из-за provisioning, заранее запишите 60 секунд прохода сценария — это запасной артефакт, не стыд.
Что сделать сейчас
Откройте пять iOS-вакансий junior. Выпишите SwiftUI/UIKit и первую задачу. Сегодня поднимите в Xcode список на одном экране. Не новый курс «iOS с нуля за месяц» вместо этого экрана. Если нет Mac — решите доступ к машине до покупки следующего интенсива: без ежедневной сборки план из 90 дней пустой.
Когда приложение ставится и README честный, соберите резюме вокруг него, разбор CV, точечные отклики. Не выкладывайте код под NDA. Второй фреймворк не начинайте, пока сценарий «список → деталь → ошибка сети» не объясняется без шпаргалки. На созвоне держите открытой нужную схему или видео прохода на случай provisioning.
Если воронка молчит, сначала проверьте сборку чужими руками, затем заголовок junior и соответствие SwiftUI/UIKit слотам. Вилку собирайте фильтрами каталога, не «средней зарплатой iOS из телеграма». Стор не обязателен. Стажировка и гибрид — нормальные двери, пока remote junior узкий. Соседний натив, если рассматриваете обе платформы: как стать Android-разработчиком.