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

Мы перечислили некоторые полезные материалы для начинающих iOS разработчиков, которые собрали на основе нашего опыта обработки тестовых заданий и проведения технических собеседований.
Книги
Общее
Эти книги будут полезны не столько для iOS разработки, а сколько для общего развития как программиста. В них очень много универсальных знаний, которые применяются во всех сферах разработки программных продуктов
Clean Code / Чистый код
Роберт Мартин
The Clean Coder / Идеальный программист
Роберт Мартин
Code Complete / Совершенный код
Стив Макконел
The Pragmatic Programmer / Программист-прагматик
Энди Хант, Дейв Томас
Introduction to Algorithms / Алгоритмы: построение и анализ
Томас Кормен, Чарльз Эрик Лейзерсон, Рональд Линн Ривест, Клиффорд Штайн
Swift
Swift. Основы разработки приложений под iOS, iPadOS и macOS
Василий Усов
Swift: Language Guide. Официальный гайд по языку
Доступен на официальном сайте swift. Русскоязычный вариант доступен swiftbook.ru
Swift in Depth
Tjeerd in 't Veen
Статьи и другие материалы
Архитектура
MVC/MVP/MVVM/VIPER
Разбор MV(x) архитектур на русском языке можно найтив статье на Хабре от Badoo. На английском языке тоже есть вариант на Medium.

Для более подробного понимания тонкостей той или иной архитектуры стоит переходить на более глубокие статьи по конкретной архитектуре. Большой список статей по описанным выше архитектурам (и не только) можно найти на github.
SOLID
В статьях про архитектуры очень часто упоминаются принципы SOLID (или какие-то конкретные принципы из этой группы). Простое объяснение в контексте iOS разработки можно найти в статье Владислава Митюкляева и в статье Марина Бенцевича, так же будет полезен туториал от портала raywenderlich на эту тему.

Так же есть смысл периодически возвращаться к этим принципам с получением нового опыта, а так же анализировать свой текущий код в контексте SOLID.
KISS, DRY, YAGNI
Для базового понимания что это такое можно прочитать в переводе статьи Хосе Гранья. Так же можно посмотреть это видео от swiftbook. Все эти принципы стоит держать в голове во время разработки. Они помогут не только писать чище код самому - так же очень полезны при работе в команде.
Кодстайл
Придерживаться одного кодстайла очень важно при командной работе: если каждый будет писать по-своему, то у остальных будет уходить слишком много времени для понимания того, что именно написал другой член команды - поддержка кода будет становиться всё сложнее и дороже, а рано или поздно станет слишком "дорого" добавлять новые фичи в проект.

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

Если вы не пользуетесь каким то конкретным кодстайлом - стоит выбрать один из публичных популярных кодстайлов, например от raywenderlich, и стараться писать код именно в этом одном конкретном стиле.

Помочь в придерживаться выбранного стиля может линтер - инструмент, который будет проверять код на соответствие некоторому набору правил. Для swift таким инструмент является swiftlint. Также можно прочитать довольно подробную статью на Хабре от Тинькофф про его использование. Наиболее эффективным с точки зрения обучения вариантом будет использование строгого набора правил с учетом выбранного кодстайла.
Платформа
Локализация
Хранение интерфейсных строк в файлах локализации не только позволяет локализовать ваше приложение на другие языки, но так же позволяет не метаться по всему коду в поисках нужной строки. Вы всегда будете знать, что локальные строки, которые отображаются в интерфейсе пользователю, всегда находятся в .strings файлах и их будет достаточно просто поменять в одном месте при необходимости. При использовании строк в коде, как правило, они дублируются и это приводит к багам и времени на их поиск.

Для понимания, что такое локализация и как ее настроить, можно почитать статью от Alconost на Хабре, материал от Пола Хадсона и подборку информации по локализации в документации от Apple.

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

Для работы с текстами такой инструмент - библиотека R.swift. Для понимания, как использовать эту библиотеку, достаточно прочитать документацию в readme.
Ассеты
Как правило, на начальных этапах становления разработчиком работа с цветами и картинками тоже не отличается строгой типизацией и удобством работы. А также никак не учитывается система изменения тем (светлое и темное оформление) на iOS девайсах.

Apple для удобной работы с такими ресурсами придумали систему ассетов. Для этого используются xcassets - каталог ассетов. Они позволяют удобно работать с цветами и картинками, позволяет их очень гибко настраивать - например, учитывать тему девайса, его размеры или даже настройки accessibility. В этом случае цвета и картинки в приложении будут автоматически изменяться при изменении настроек девайса (например при изменении темы)!

Более подробно почитать про работу с ассетами можно в этой статье от LearnAppMaking, а также в материале от Кевина Р.

Упростить работу с этой системой и сделать ее более строгой поможет библиотека R.swift, которая была описана в блоке про локализацию.
Networking
Работа с сетью - одна из самых распространенных задач, с которой нужно будет встречаться постоянно, практически в каждом приложении. Поэтому полезно понимать не только как реализовать работу с сетью на уровне приложения, но и в целом понимать экосистему и свои возможности в ней. Например, как можно продебажить свой код для работы с сетью, как можно имитировать различные ситуации и т.д.

В этой статье от Мо Бёрни содержится много полезной информации в целом по работе с сетью - от того, как это можно реализовать на iOS; до того, какие сторонние инструменты вам помогут в работе.
Dependency Injection
⚠️ Как показывает практика, Dependency Injection - более сложная тема для понимания, поэтому есть смысл переходить сюда, когда все остальное уже хорошо усвоено.

Для начала стоит понять, что такое DI и для чего оно используется. Для этого можно посмотреть серию статей на Хабре про DI. Узнать подробнее про DI в контексте iOS разработке можно почитать эту статью от Тинькофф.

Стоит понимать, что применение DI возможно без каких либо сторонних библиотек, но сторонние библиотеки, как правило, просто упрощают работу с кодом и позволяют вынести настройку DI в отдельный слой. Самая популярная библиотека на iOS для DI на текущий момент - Swinject, поэтому будет удобно начать знакомство именно с нее.

В этой статье на Хабре пытаются раскрыть то, зачем нужен DI с небольшим примером как раз на Swinject. Еще есть неплохой туториал по DI от raywenderlich на примере Swinject - но он уже обновлен для SwiftUI, поэтому может быть не очень понятен, если вы знаете только UIKit. В приведенной выше статье от Тинькофф есть сравнение различный фреймворков, а так же дополнительные полезные материалы по теме.
Не стесняйтесь делиться этой страничкой с друзьями и коллегами, если считаете это полезным. Если у вас будет какой-то фидбек по этой страничке - напишите нам на почту.