Описание:
Этот курс подойдет для разработчиков, которые:
– имеют опыт программирования на другой платформе и желают полноценно освоить iOS;
– уже являются iOS-разработчиками и хотят подтянуть свой технический скилл, получить грамотное и целостное понимание iOS-платформы и языка Swift, стать «пуленепробиваемыми» на технических собеседованиях;
– желают научиться решать сложные и хардкорные задачи с уровнем качества топовых приложений.
Особенности курса
Всё обучение построено исключительно на задачах из практики разработки приложений в production.
Вы создадите сложный UI, используя знания, которые не найти в статьях в интернете. Изучите вопрос смешения декларативной и императивной парадигм и того, что может дать карринг. Выстроите архитектуру под конкретное приложение: MVVM, MVCS или SOA.
- Улучшите навыки использования GCD и научитесь решать проблемы многозадачности
- Приручите SequenceTypе и научитесь быстро решать задачи с помощью структур данных и Generic Type
- Освоите Associated Types и техники Type Erasure
- Научитесь различным способам хранения данных: Core Data, Realm, Keychain, Cache.
- Сможете применять Dependency injection (DI) и модуляризации приложений для более комфортной командной разработки и покрытия тестами
По окончании курса вы будете:
– уметь проектировать сложные UI-компоненты и оптимизировать их производительность;
– делать эффективную многозадачность в iOS-приложении;
– понимать, как не раздувать проект лишними библиотеками и максимально «выжимать» iOS SDK;
– уметь проектировать клиент-серверное приложение и оффлайн-режим работы;
– проектировать тестируемый unit-тестами код и, конечно, успевать писать тесты;
– на практике прочувствует плюсы и минусы известных методологий, подходов и парадигм, таких как Protocol Oriented Programming (POP), ООП, Reactive Programming (Rx).
Программа курса:
Эффективный UIKit и CoreGraphics
В этом модуле мы изучим внутренности UIKit, его архитектурные плюсы и недочеты. Научимся отображать комплексные данные. Оптимизировать рендеринг UI компонентов. Попрактикуемся в сборке интерфейсов корректно работающих на всех вариациях SizeClasses и анимации.
Foundation без сторонних фреймвоков и Swift 5 Standard Library
Загрузим в мозг стройную модель Statements, Expressions и Declaration языка Swift, и попрактикуемся в их использовании. Научимся использовать все возможности String. Научимся управлять "сахарностью" Swift и поймем, что многие библиотеки в проекте вам просто не нужны.
Современная архитектура мобильных приложений
MVC, MVP, MVI, MVVM, VIPER, RIBs, MOVVER, YARCH и что дальше? Архитектуры множатся, проблемы остаются те же. Научимся целевому выбору архитектурных паттернов и попрактикуемся в проектировании.
Многозадачность
Попрактикуемся в использовании последовательных (serial) и параллельных (concurrent) очередей, в создании управлении DispatchGroup. Использовании мьютексов и семафоров и других Locks. Будем знать как решать проблемы параллельной многозадачности типа Priority inversion и другие.
Networking и хранение данных
Познакомимся со свежим фреймвоком Network для iOS. Будем использовать Codable для легкой серилизации и десириализации данных. Изучим подходы к хранению данных в приложении. Потренируемся использовать Core Data и Realm, и будем понимать когда какое хранилище использовать.
Целесообразный Rx
Узнаем где нужно, а где не нужно использовать реактивный подход. Научимся программировать на нем, и поймем почему c Rx можно разрабатывать в разы быстрее.
Организация разработки
Немного познакомимся с теорией тестирования, напишем XCTest и UITest, узнаем как правильно проектировать тестируемый код. Изучим как настраивать Continuous Integration (CI) и причем здесь git и git-flow. Также научимся писать работающие резюме и то, что не говорят на собеседованиях, но используют.
Проектная работа
На основе умений и знаний полученных в курсе студент выбирает какой проект будет реализовывать. С нашей стороны будет помощь и наставничество в реализации проекта. Также нами будет предложен экспертный список «Чего не хватает в AppStore» из небольших и средних программ, где вы бы могли себя проявить.