Проходил 21 мая в 20:00

День открытых дверей
Всё о курсе «Middle iOS Developer»

День открытых дверей онлайн

День Открытых Дверей — отличная возможность узнать подробнее о программе курса, особенностях онлайн-формата, навыках, компетенциях и перспективах, которые ждут выпускников после обучения. Также преподаватель расскажет о своём профессиональном опыте и ответит на вопросы участников. Поэтому если есть вопрос, запишитесь на онлайн-трансляцию и задайте его в прямом эфире!
Преподаватель
Ексей Пантелеев

Запись

О курсе

iOS Разработчик
50 000 ₽
5 месяцев
Начало 27 августа
Этот курс подойдет для разработчиков, которые: – имеют опыт программирования на другой платформе и желают полноценно освоить iOS; – уже являются iOS-разработчиками и хотят подтянуть свой технический скилл, получить грамотное и целостное понимание iOS-платформы и языка Swift, стать «пуленепробиваемыми» на технических собеседованиях; – желают научиться решать сложные и хардкорные задачи с уровнем качества топовых приложений. Особенности курса Всё обучение построено …
Программа курса
Модуль 1
Эффективный UIKit и CoreGraphics
Модуль 2
Foundation без сторонних фреймвоков и Swift 5 Standard Library
Модуль 3
Современная архитектура мобильных приложений
Модуль 4
Многозадачность
Модуль 5
Networking и хранение данных
Модуль 6
Целесообразный Rx
Модуль 7
Организация разработки
Модуль 8
Проектная работа
Эффективный UIKit и CoreGraphics
В этом модуле мы изучим внутренности UIKit, его архитектурные плюсы и недочеты. Научимся отображать комплексные данные. Оптимизировать рендеринг UI компонентов. Попрактикуемся в сборке интерфейсов корректно работающих на всех вариациях SizeClasses и анимации.
Проектируем UI без кода и зачем это нужно, storyboard, xib. Как устроен UIKit изнутри
– Решение организационных вопросов.
– Настройка environment: Xcode, git, scripts
– Возможности UIKit в создании интерфейсов без кода и зачем это нужно
27 августа, 20:00 — 21:30
Лектор: Ексей Пантелеев
Домашние задания: 1
ДЗ
Создание каркаса приложения. Создать флоу экранов в Storyboard без кода
1. Добавить UISplitViewController
1.1 В UISplitViewController добавить как master TabBarViewController
1.1.1 В TabBarViewController добавить 3 таба: Feed, Benchmark, Profile
1.1.2 На каждый таб добавить по NavigationViewController
1.1.3 В каждом NavigationViewController добавить по UIViewController
1.1.4 В каждом UIViewController добавить 1-2 из наследников UIView (UILabel, UIImageView, UISwitch, UIButton)
1.1.5 В UIViewController таба Profile добавить кастомную UIButton c @IBInspectable/@IBDesignable
1.2 В UISplitViewController добавить как detail NavigationViewController
1.2.1 Создать и прилинковать NavigationViewController
1.2.2 В NavigationViewController добавить от UIViewController переход по Storyboard Reference на второй Storyboard
1.2.3 Сделать добавить xib-компонент заглушку
1.2.4 На втором Storyboard во ViewController Scene добавить xib-компонент
2. Протестировать на iPad/iPhone симуляторах, со сменой ориентации девайса
Preservation и Restoration техники, стек UINavigationController, Life cycles
— Life cycle приложения
— UIResponder и UIViewController Life cycles
— ViewControllerLifecycleBehaviour
— Preservation и Restoration состояния
— Модификация стека UINavigationController
3 сентября, 20:00 — 21:30
Лектор: Ексей Пантелеев
Домашние задания: 1
ДЗ
Добавление в прототипа приложения Restoration. 1 В AppDelegate реализовать методы App Life Cycle и расставить в них print c названиями стадий или функций
1.1 Для стадии запуска(Launching) приложения:
1.1.1 application: willFinishLaunchingWithOptions
1.1.2 application: didFinishLaunchingWithOptions
1.1.3 applicationWillEnterForeground
1.1.4 applicationDidBecomeActive
1.2 Для стадии выключения(Terminating) приложения:
1.2.1 applicationWillResignActive
1.2.2 applicationDidEnterBackground
1.2.3 applicationWillTerminate
2 Реализовать View controller lifecycle behaviors для вью контоллера Benchmark
2.1 Добавить поведение afterAppearing c запуском таймера:
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(runTimed), userInfo: nil, repeats: true)
В runTimed сделайте принт, например так print(Date())
2.2 На beforeDisappearing вызвать таймеру invalidate() чтобы на других экранах он не тикал и не принтил
3 На ViewController таба Profile
3.1 написать поведение со сменой цвета статус бара и view.backgroundColor на черный
4 На ViewController(первом) таба Feed сделать кнопку
4.1 По кнопке пушить новый ViewController(второй)
4.2 На новом ViewController добавить еще одну кнопку и по ней показать третий ViewController
4.3 Реализовать переход с третьего ViewController на первый
Изучаем внутренности и хитрости UIScrollView, продвинутое использование компонента
– Устройство UIScollView и что такое контейнеры в UIKit
– Взаимосвязь между contentSize, contentOffset, contentInset
– Static UIScrollView
– Бесконечный скроллинг
– AutoLayout и UIScollView
5 сентября, 20:00 — 21:30
Отоборажение структурированных данных UIColleсtionView, UITableView, UIStackView
– Использование Flow Layout
– Комбинирование UIColleсtionView с PageControl
– UITableView Sections
– Оптимизация рендеринга таблицы
– UIStackView и Autolayout
– Решение проблем использования UIStackView, Compression Resistance и Hugging
10 сентября, 20:00 — 21:30
Лектор: Ексей Пантелеев
Домашние задания: 1
ДЗ
Реализация коллекции таймеров на UICollectionView . 1. На экране Feed:
1.1 Добавить UIViewTable
1.2 Настроить dataProvider на тестовые данные (около 20 ячеек, например ["Item 1", "Item 2", "Item 3", ...]
1.3 Создать новый вьюконтроллер, назвать SessionSummaryViewController или типа того (Это может быть ваш Второй контроллер из домашки 1-3 про Life Cycle)
1.4 При tableView: didSelectRowAt программрно инстансировать SessionSummaryViewController и переходить на него
2. На экране Benchmark
2.1 Добавить UICollectionView
2.2 Добавить UIStackView в ячейку UICollectionViewCell
2.3 Также в ячейку компонент бегущего таймера
2.4 Сделать UI для бегущего таймера
2.4 При тапе на ячейку паузить или запускать таймер
2.5 При выходе с таба Benchmark все таймеры должны инвалидироваться
2.6 Состояние таймеров должно сохранятся пока мы на табе Benchmark, при переходе все их сбрасывать и их UI

*3. (невлияющее на оценку) сделать переключение лейаутов на лету(как было показано на вебинаре) 2 или больше
SizeClasses, Anchors и анимирование Auto Layout
– SizeClasses, использование UITraitCollection
– Продвинутая адаптивность на iOS без костылей
– Safe Area
– Layout Anchors
– Анимирование Constraints
12 сентября, 20:00 — 21:30
Создание сверхсложных интерфейсов с помощью CoreGraphis и CoreAnimation
– Работа с CALayer, различия с UIKit
– CGContext
– Программное рисование с помощью UIBezierPath
– CAAnimation и CAAnimationGroup
17 сентября, 20:00 — 21:30
Лектор: Ексей Пантелеев
Домашние задания: 1
ДЗ
Создание анимированный диаграммы на CoreGraphics. 1. Сделать компонент диаграммы типа PieChart
1.1 Создать интерфейс компонента для возможности установления:
1.1.1 Размера диаграммы
1.1.2 Количества секторов на диаграмме
1.1.3 Цвета секторов
1.1.4 Значений текста в секторах
1.2 В сектора сделать возможность добавлять текст с также с помощью CoreGraphics
2. Использовать компонент в ячейках CollectionView на экране Benchmark
2.1 Отображать на PieChart пропорцию времени когда таймер был включен, а когда запаузен
2.2 Обновлять пайчарты можно по кнопке в навбаре или в ячейке
3. *(продвинутый пункт) Добавить анимацию в сектора во время обновления пайчарта - каждый сектор стартует на 1% и растет до своего значения — получается типа расхлопывания веера
Foundation без сторонних фреймвоков и Swift 5 Standard Library
Загрузим в мозг стройную модель Statements, Expressions и Declaration языка Swift, и попрактикуемся в их использовании. Научимся использовать все возможности String. Научимся управлять "сахарностью" Swift и поймем, что многие библиотеки в проекте вам просто не нужны.
Необычная система типов Swift, структуры данных, Generics
— Теория типов и Compound и Named типы
— Метатип и вложенные типы
— Protocol Composition
— Generics
— Создание кастомных структур данных
19 сентября, 20:00 — 21:30
Sequences и коллекции, асимптотический анализ: O(1), O(N), O(N*log(N)), O(n^2)
— Sequence и IteratorProtocol
— Type-erased типы: AnySequence, AnyIterator, AnyCollection
— Lazy Wrappers
— Wrappers for Algorithms
— Асимпотический анализ встроенных и кастомных структур данных
24 сентября, 20:00 — 21:30
Лектор: Ексей Пантелеев
Домашние задания: 1
ДЗ
Реализация механизма тестирования алгоритмов на производительность и отображения результатов.
Использование всей мощи String, Literals vs. UnicodeScalar, UTF-16
— Сравнение суффиксов и префиксов и другие способы сравнения строк
— Работа с utf8 и utf16 представлениями
— Ипользование подстрок и Ranges, StringProtocol
— Regex
26 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Продвинутая локализация приложения на несколько языков.
Региональные форматы и локализация iOS приложения
— Парсинг и представление телефонных номеров
— Форматирование дат согласно региону и локали, POSIX спецификация
— Работа с единицами измерения и валютами
— Корректная локализация приложения на несколько языков и регионов
1 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Создание ячейки с поддержкой региональной локализации.
Ассоциативные типы, Type Erasure, «сахарные» типы данных, диспетчеризация вызовов в Swift 5
— 3 типа диспатчеризации в Swift: direct, dynamic, message
— Associated Types
— PATs и динамическая диспатчеризация
— Другие способы реализации паттерна Type Erasure
— Как работают типы в SIL (Swift Intermediate Language)
3 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Создание 3х реализаций расчета и отображения и вывод результатов на диаграмму .
Компилятор LLVM, AST, создание собственных операторов
— Как работает LLVM: SIL, IR
— Как некоторые типы представлены в SIL и для чего это нужно знать
— Особенности и хитрости компиляции
— Перезагрузка и создание операторов
8 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проектирование и реализация своей собственной структуры данных и оценка ее эффективности.
Современная архитектура мобильных приложений
MVC, MVP, MVI, MVVM, VIPER, RIBs, MOVVER, YARCH и что дальше? Архитектуры множатся, проблемы остаются те же. Научимся целевому выбору архитектурных паттернов и попрактикуемся в проектировании.
Современные паттерны проектирования, принцип SOLID и его целесообразное применение
— SOLID и как получить от него пользу
— Другие принципы: KISS, DRY/DIE, YAGNI, BDUF, SOC
— Необходимые паттерны для сегодняшней мобильной разработки: Adapter, Memento, Observer, Strategy, Factory, Command, Composite, Iterator, Mediator, Proxy, Template Method, Singleton и где они приненимы на iOS
10 октября, 20:00 — 21:30
MVP, MVCS, MVVM, архитектурные паттерны, модуляризация, Clean Architecture
— MV(X) архитектурные паттерны
— Модуляризация приложения, способы: Frameworks, Cocoapods, JSCore, SPM
— Clean Architecture
15 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Создания каркаса для модуляризированного приложения.
Protocol Oriented Programming (POP)
— Про Наследовании и ООП
— Миксины/трейты: Protocol Extensions
— Type Constraints
— Плюсы и минусы подхода
17 октября, 20:00 — 21:30
Dependency Injection, SOA, слоистая архитектура
— Inversion of Control паттерн
— ServiceLocator и инжектинг
— Разделение архитектуры на слои и что это дает
22 октября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация Service Locator и Dependency Injection и изолированности слоев в приложении.
Связывание разных частей приложения Observing, Signals, Callbacks
— Observing и broadcasting, нужен ли нам KVO
— Плюсы и минусы Delegation, виды делегатов
— Callbacks
— Signals ans Slots и причем здесь Rx
24 октября, 20:00 — 21:30
Многозадачность
Попрактикуемся в использовании последовательных (serial) и параллельных (concurrent) очередей, в создании управлении DispatchGroup. Использовании мьютексов и семафоров и других Locks. Будем знать как решать проблемы параллельной многозадачности типа Priority inversion и другие.
Проблемы многозадачности и способы их решения, GCD
— Антипаттерны и проблемы: Priority Inversion, Race condition, Deadlock, Resource contention, Starvation, Non-deterministic and Fairness
— Использование GCD: QoS, Queues, Main Queue и Main Thread
5 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация асинхронного выполнения задач и оценка эффективности подхода.
Внутренности GCD(libdispatch), OperationQueue
— Плюсы и минусы OperationQueue
— Внутренности libdispatch: пул тредов, continuation, QoS и как зная это лучше использовать очереди
7 ноября, 20:00 — 21:30
RunLoop & POSIX Threads, Инструменты синхронизации, Lock, Mutex
— RunLoop и чем сегодня он может нам быть полезен
— pthreads
— Виды локов: NSLock, NSRecursiveLock, Spinlock, Mutex, Semaphore
— Dispatch Barriers
— Trampoline техника
12 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация общей конкурентной очереди на приложение, создание внутренней системы тасков.
Networking и хранение данных
Познакомимся со свежим фреймвоком Network для iOS. Будем использовать Codable для легкой серилизации и десириализации данных. Изучим подходы к хранению данных в приложении. Потренируемся использовать Core Data и Realm, и будем понимать когда какое хранилище использовать.
Новый Network-фреймвок, URLSession, Codable
— Network феймвок, HTTP, REST, Sockets, GraphQL
— URLSession
— Сериализация и десериализация c помощью Codable
14 ноября, 20:00 — 21:30
Когда использовать Files, чистый SQLite, способы кеширования
— Виды кеширования
— SQLite и другие DB* альтернативы
— NoSQL
— Files и File System
19 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Имплементация сериализации и сохранения данных на backend .
CoreData — основные стратегии использования
— NSManagedObject, NSPersistentStoreCoordinator, NSManagedObjectContext
— NSPersistentContainer
— Модель данных
— CRUD на Core Data
21 ноября, 20:00 — 21:30
Realm
— Плюсы и минусы Realm
— Модель данных на Realm
— Realm Browser
— CRUD на Realm
26 ноября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация поддержки оффлайн режима в приложении.
Целесообразный Rx
Узнаем где нужно, а где не нужно использовать реактивный подход. Научимся программировать на нем, и поймем почему c Rx можно разрабатывать в разы быстрее.
Отличие императивного и реактивного подхода, концепция Observable
— Чем реактивный подход может быть лучше
— Observable Sequences
— RxSwift 4.x
— Marble Diagrams
28 ноября, 20:00 — 21:30
Promises, Signals и как это в Rx. Функциональное программирование
— Rx подход без RxSwift: PromiseKit, Signals
— Идея распространение изменений
— RxSwift Transformations: Map, FlatMap, Scan, Buffer
3 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Реализация каркаса приложения используя декларативный подход и Rx.
Основные паттерны: Composition, Aggregation, Cancellatiion
— Rx паттерны
— Фильтрация: Filter, DistinctUntilChanged
— Комбинирование: StartWith, Merge, Zip
5 декабря, 20:00 — 21:30
UI Patterns: Driver & Action, быстрое создание полноценного UI на Rx
— MVVM и RxSwift
— RxCocoa
— Создание UI на Rx
10 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Создание UI слоя приложения на Rx.
Организация разработки
Немного познакомимся с теорией тестирования, напишем XCTest и UITest, узнаем как правильно проектировать тестируемый код. Изучим как настраивать Continuous Integration (CI) и причем здесь git и git-flow. Также научимся писать работающие резюме и то, что не говорят на собеседованиях, но используют.
Тестирование кода XCTest, UITest, fastlane и CI
— Test-Driven Development (TDD)
— Теория тестирования
— Использование XCTest
— Зачем нужен UITest
— Сборка CI (Continuous Integration) на fastlane
12 декабря, 20:00 — 21:30
Git-flow, автоматизизация workflow
— Продвинутое использование git
— Фича, хотфикс, релизный цикл, master ветка
— Использование комманд git-flow
17 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Покрытие приложения юнит-тестами.
Как правильно написать резюме и развивать hard-skills
— Почему важно корректно писать резюме
— Как выбирать работодателя чтобы развивать свой hard-skills
— Какие бывают работодатели
— Какие скрытые критерии отбора используются
19 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Написание работающего резюме.
Проектная работа
На основе умений и знаний полученных в курсе студент выбирает какой проект будет реализовывать. С нашей стороны будет помощь и наставничество в реализации проекта. Также нами будет предложен экспертный список «Чего не хватает в AppStore» из небольших и средних программ, где вы бы могли себя проявить.

Проект может помочь в трудоустройстве.

Написание приложения с нуля
— Выбор темы для приложения
— Как генерировать идеи для простых приложений на основе известных «­болей» пользователй
— Как использовать iOS платформу для генерации идей для приложений
— Подбор инструментов, помощь с стартом написания приложения
24 декабря, 20:00 — 21:30
Домашние задания: 1
ДЗ
Написание приложения с нуля.
Консультация по проекту
9 января, 20:00 — 21:30
Защита проекта
16 января, 20:00 — 21:30
Домашние задания: 1
ДЗ
Сдать ссылку на репозиторий курсового проекта. В репозитории обязательно должен быть заполнен файл Readme.md с описание проекта..

Преподаватель

Ексей Пантелеев
Работает программистом с 2002 года, суммарный опыт программирования — 17 лет. Имеет большой опыт разработки на С/С++, C#, Java, JS, Swift.

Принял участие более чем в десяти крупных и сложных проектах в ведущих IT-компаниях страны (игры, мессенджеры, финтех и офисные приложения), таких как "Тинькофф Банк", Мail.ru, "Новые Облачные Технологии".

Преподает iOS/Swift 4 года. Выступает на iOS-митапах. Знает, что программирование развивает мозг, поэтому планирует заниматься разработкой всю жизнь.

Свободное время посвящает geek-арт-фотографии и майнингу криптовалют.
Преподаватель курсов:
iOS Разработчик

F.A.Q.: Наиболее часто задаваемые вопросы:

Нужно ли оплачивать обучение до Дня открытых дверей, если я хочу гарантированно попасть в группу?
Да, мы рекомендуем заранее оплатить обучение, чтобы гарантированно попасть в группу. В период проведения Дня открытых дверей резко возрастает количество желающих обучаться, поэтому может случиться так, что к окончанию Дня открытых дверей мест в группе не останется
Кто будет проводить День открытых дверей?
Проводить День открытых дверей будет преподаватель курса.
Как принять участие в Дне открытых дверей?
Для того, чтобы принять участие в Дне открытых дверей, оставьте свой e-mail в поле регистрации на мероприятие. Перед началом Дня открытых дверей мы пришлем вам ссылку, пройдя по которой, вы сможете присоединиться к вебинару.
Какие вопросы будем обсуждать на Дне открытых дверей?
На дне открытых дверей мы поговорим о проекте OTUS (о программе курса, почему мы не принимаем в группы новичков, почему учиться у нас интересно, но сложно), карьерных перспективах выпускников (почему вероятность карьерного роста у лучших студентов стремится к 100%), учебном процессе (оплатах, оценке знаний, сертификатах и прочих аспектах). Также ведущий мероприятия с радостью ответит на все ваши вопросы.