Открытый вебинар «Создание собственного экрана загрузки (splash screen)» 17.05.2018 в 20:00 | OTUS >
+7 499 938-92-02
Проходил 17 мая 2018 года в 20:00

Открытый вебинар IOS
Создание собственного экрана загрузки (splash screen)

Открытый вебинар онлайн

Мы создадим splash screen для вашего приложения, от самых простых до сложных экранов с анимациями и отображением прогресса загрузки.

После моего мастер-класса вы сможете использовать системные методы для решения этой задачи и самостоятельно создавать свои собственные экраны загрузки.
Преподаватель
Геннадий Евстратов

Запись

О курсе

iOS Developer. Professional
95 000 ₽
5 месяцев
Начало 16 августа

Перейдите на новый уровень разработки

  1. Изучите актуальный стек технологий для современного iOS-разработчика: SwiftUI, Protocol Oriented Programming, Actor и async/await, CoreML, ARKit и RealityKit и др.
  2. Создадите свой аналог Pinterest, TikTok, Room Planner, VSCO, Strava или Canva в рамках разработки индивидуальной проектной работы, которая пополнит ваше портфолио
  3. Общение напрямую с преподавателями на лекциях и в Telegram-чате, обсуждение кейсов, задач, которые …
Программа курса
Модуль 1
SwiftUI и основы Combine
Модуль 2
Современная архитектура мобильных приложений
Модуль 3
Foundation без сторонних фреймвоков и Swift 6 Standard Library
Модуль 4
Многозадачность
Модуль 5
CoreML и Vision, нейронные сети и машинное обучение
Модуль 6
Networking и хранение данных
Модуль 7
Создание приложений для Apple Watch, TV, Mac
Модуль 8
Мультиплатформенная разработка: перенос на Android, Vulkan/Metal
Модуль 9
Организация разработки
Модуль 10
Проектная работа
SwiftUI и основы Combine
В этом модуле мы изучим внутренности UIKit, его архитектурные плюсы и недочеты. Научимся отображать комплексные данные. Оптимизировать рендеринг UI компонентов. Попрактикуемся в сборке интерфейсов корректно работающих на всех вариациях Size Classes и анимации.
Проектируем UI декларативно с SwiftUI. В чем отличия UIKit и SwiftUI
настроить окружение для работы на курсе и выполнения домашних заданий;
использовать Xcode;
создавать базовые интерфейсы на SwiftUI/Combine.
Домашние задания: 1
ДЗ
Создание каркаса приложения на SwiftUI. Создать флоу экранов на SwiftUI
1. Добавить TabView.
2. На втором табе создать List, обернутый в NavigationView.
- Из списка должны быть переходы с использованием NavigationLink.
3. На третьем табе разместить кнопку, открывающую модальное окно.
4. На первом табе разместить кнопку, открывающую второй таб и один из пунктов в нем.
5. Протестировать приложение на симуляторах iPad/iPhone с проверкой смены ориентации устройства.

*6. Добавить один компонент UIKit через UIViewRepresentable.
SwiftUI List, List с кастомным лейаутом, Hosting ViewControllers
понимать, в каком состоянии приложение;
добавлять логику на изменение состояния приложения;
знать как устроен UIKit и его иерархия классов;
делать навигацию в SwiftUI разными способами.
Создание кастомных Shape, SwiftUI Drawing and Animation API
работать с CALayer и понимать систему координат, используемую в CoreGraphics;
программно рисовать Shapes в SwiftUI;
использовать анимацию в SwiftUI.
Использование NavigationView, TabView. Нативная навигация, бекпорты и фреймворки для поддержки всех функций
использовать NavigationView и TabView в SwiftUI;
использовать back ports и сторонних решений;
организация deeplinks и тестирования навигации.
Отображение структурированных данных, List, пейджинг, кастомные компоненты на UIViewRepresentable, принципы HIG
реализовывать пейджинг на SwiftUI;
кодогенерить Network слой в ДЗ;
привязывать List к реальному API с помощью кодогенерации.
Домашние задания: 1
ДЗ
Реализация пейджинга на реальном API. 1. Используйте открытое API: https://github.com/public-apis/public-apis
2. Добавить несколько рубрик по разным запросам (например, новости или города для отображения погоды). Переключение между рубриками реализовать через горизонтальный ScrollView или SegmentedControl.
3. При переключении рубрик содержимое List должно обновляться, а пейджинг работать корректно.
4. Реализовать навигацию в глубину до 3 экранов с использованием кастомного навигационного стека.
5. При выборе ячейки на каждом экране (разделе SegmentedControl) добавить анимацию, имитирующую улет ячейки по кривой вниз (например, как анимация сохранения в избранное).
Современная архитектура мобильных приложений
MVC, MVP, MVI, MVVM, VIPER, RIBs, MOVVER, YARCH и что дальше? Архитектуры множатся, проблемы остаются те же. Научимся целевому выбору архитектурных паттернов и попрактикуемся в проектировании.
Необычная система типов Swift, структуры данных, Generics, Связывание разных частей приложения Observing, Signals, Callbacks. PATs (Protocol with Associated Types)
создать кастомные структуры данных.
22 мая, 20:00 — 21:30
Лектор: Владимир Тезин
Protocol Oriented Programming (POP), SOA, модуляризация, архитектурные Rx паттерны: Flux/Redux
применять паттерн Inversion of Control;
использовать ServiceLocator;
объяснить в чем польза слоистой архитектуры.
27 мая, 20:00 — 21:30
Лектор: Александр Федоров
Домашние задания: 1
ДЗ
Реализация Service Locator и Dependency Injection и изолированности слоев в приложении. 1. Создать ServiceLocator (можно использовать дженерики).
2. Перевести существующие сервисы на использование ServiceLocator.
3. Добавить инжекцию зависимостей в переменные класса, чтобы зависимости были видны сразу, без необходимости скроллинга по файлу.
4. Выделить уровень Core-сервисов (сеть, парсинг, хранение данных).
5. Вынести Core-сервисы в отдельный пакет SwiftPM.

MVx, VIP, анализ архитектурных паттернов. SOLID, GRASP, Coupling/Cohesion принципы, DI.
разобраться в семействе MV(x) паттернов;
объяснить, что такое модуляризация и как ей пользоваться;
использовать Clean Architecture подход;
рассказать о паттернах в мобильной разработке.
29 мая, 20:00 — 21:30
Лектор: Анна Жаркова
Домашние задания: 1
ДЗ
Создание модуляризированного приложения с SOA/MVVM/Flux/MV. 1. Выполнить рефакторинг приложения с применением SOA/Flux/MV(x). При реализации на SwiftUI использовать стандартные механизмы: Combine, Signals или EventBus.
2. Модульно организовать приложение, вынеся UI-компоненты в отдельный модуль и импортируя их в местах использования.
3. Создать:
- ServiceLocator (для SOA).
- Вложенные ViewModel (для MVVM).
- Вложенные хранилища (Store) для Flux.
- Перевести существующие сервисы на модульную архитектуру.
- Добавить инжекцию зависимостей в переменные классов для повышения их читабельности.

4. Выделить уровень Core-сервисов (сеть, парсинг, хранение данных).
5. Вынести Core и другие сервисы в отдельный SPM модуль.
Foundation без сторонних фреймвоков и Swift 6 Standard Library
Загрузим в мозг стройную модель Statements, Expressions и Declaration языка Swift, и попрактикуемся в их использовании. Научимся использовать все возможности String. Научимся управлять "сахарностью" Swift и поймем, что многие библиотеки в проекте вам просто не нужны.
Swift Runtime, компилятор LLVM, продвинутая отладка с помощью LLDB, скриптинг
использовать LLVM: AST, SIL, IR;
знать Method Dispatch;
знать особенности компиляции;
использовать LLDB.
3 июня, 20:00 — 21:30
Лектор: Артем Устинов
Sequences и коллекции, асимптотический анализ: O(1), O(N), O(N*log(N)), O(n^2)
использовать Sequence и Collection для реализации собственных структур данных;
объяснить как работают lazy collection, будете понимать концепцию type-erased.
5 июня, 20:00 — 21:30
Лектор: Олег Максименко
String: устройство, конвертация с другими типами, регулярные выражения Swift 6
углубиться в работу строковых данных в Swift;
научиться использовать регулярные выражения для поиска строк или получения подстрок.
10 июня, 20:00 — 21:30
Лектор: Олег Максименко
Поддержка многоязычности: локализация строк, новый формат XCode 15, кодогенерация и сервисы переводов. Региональные отличия: переводы дат, величин, оцифровывание текста»
научиться делать приложения для экспорта, доступные для иностранных пользователей, чтобы присущие привычки для их местности были учтены;
использовать лучшие практики получения качественного кода с использованием кодоргенерации и линтига ресурсных строк.
17 июня, 20:00 — 21:30
Лектор: Станислав Жингель
Домашние задания: 1
ДЗ
Локализация приложения. Реализовать локализацию проекта с помощью инструментов, изученных на лекции, использовать минимум 2 языка - русский и английский.

- Использовать один из интсрументов автоматизации Swiftgen/R.Swift
Многозадачность
Попрактикуемся в использовании последовательных (serial) и параллельных (concurrent) очередей, в создании управлении DispatchGroup, использовании мьютексов и семафоров и других Locks. Будем знать, как решать проблемы параллельной многозадачности типа Priority inversion и другие.
Проблемы многозадачности и способы их решения, GCD
использовать GCD: QoS, Queues, Main Queue и Main Thread.
19 июня, 20:00 — 21:30
Лектор: Игорь Сорокин
Проблемы многозадачности, GCD(libdispatch), OperationQueue
знать антипаттерны и проблемы: Priority Inversion, Race condition, Deadlock, Resource contention, Starvation, Non-deterministic and Fairness;
избегать антипаттерны;
пользоваться средствами GCD.
24 июня, 20:00 — 21:30
Лектор: Игорь Сорокин
Async/Await, Tasks, Groups
ориентироваться в структурированной многопоточности;
уметь работать с тасками и группами;
использовать инструменты для параллельного запуска задач.
26 июня, 20:00 — 21:30
Лектор: Сергей Балалаев
Actor, @MainActor, Global actors, Distributed actor
иметь полное представление о структурированной многопоточности в Swift;
знать как использовать Actors в Swift.
1 июля, 20:00 — 21:30
Лектор: Станислав Жингель
Домашние задания: 1
ДЗ
Реализация асинхронного выполнения задач. Создать приложение на SwiftUI, которое моделирует процесс обработки заказов в ресторане. Использовать Actors для управления очередью заказов, приготовления блюд и доставки.
1. Очередь заказов – заказы поступают в очередь и обрабатываются по очереди.
2. Повар (Actor) – готовит заказ в течение 3-7 секунд.
3. Курьер (Actor) – доставляет заказ в течение 2-5 секунд.
Визуализация в SwiftUI:
• Список заказов с обновляемым статусом (В очереди → Готовится → Доставляется → Доставлено).
• Кнопка для добавления нового заказа в очередь
Круглый стол
получить ответы на вопросы по: архитектуре, Swift Standard Libraty, Многозадочности в Swift и на любые другие вопросы по курсу.
3 июля, 20:00 — 21:30
CoreML и Vision, нейронные сети и машинное обучение
Научимся внедрять в приложение обученные модели на нейронных сетях. Также разберемся как самому получить модель с помощью AutoML Vision.
CoreML, CreateML, использование обученных моделей нейронных сетей
разобраться как устроен CoreML 3+;
использовать готовые обученные модели.
15 июля, 20:00 — 21:30
Лектор: Николай Бакланов
Домашние задания: 1
ДЗ
Обучение Классификатора или обжект идентификатора. 1. Выбрать датасет изображений.
2. Обучить классификатор или детектор с помощью CreateML.
3. Встроить функционал распознавания в приложение: использовать камеру или загрузку изображений.

*4. Реализовать распознавание в ARViewContainer.
Обработка видеопотока с помощью CoreML в режиме реального времени c AVFoundation, CoreImage и Metal
объяснить как создавать сегментацию в реальном времени.
17 июля, 20:00 — 21:30
Лектор: Олег Максименко
ARKit и RealityKit, LiDAR датчик
использовать ARKit, RealityKit, LiDAR.
22 июля, 20:00 — 21:30
Лектор: Артем Устинов
AI инструменты iOS 18: Vision, Neural Engine
разобраться, что дает iOS 18 в нейро-задачах.
24 июля, 20:00 — 21:30
Лектор: Станислав Жингель
Домашние задания: 1
ДЗ
Разработка AI приложения. Реализовать две любые функции фоторедактора:

- Определение типа лица и трансформация овала.
- Трансформация глаз.
- Трансформация носа.
- Трансформация губ.
- Трансформация бровей.
Networking и хранение данных
Познакомимся со свежим фреймвоком Network для iOS. Будем использовать Codable для легкой серилизации и десириализации данных. Изучим подходы к хранению данных в приложении. Потренируемся использовать Core Data и Realm, и будем понимать когда какое хранилище использовать.
Передача данных, Transferable протокол, Bluetooth
работать с UTType и Transferable;
работать с CoreBluetooth;
знать Multipeer Connectivity.
29 июля, 20:00 — 21:30
Лектор: Олег Максименко
gRPC, кодогенерация, отправка и прием сообщений
изучить Protocol Buffers;
начать использовать gRPC.
31 июля, 20:00 — 21:30
Лектор: Олег Максименко
Socket.io, WebSocket и другие сокеты для чатов и мгновенных обновлений, APNs
разбираться в socket.io, WebSocket и других сокетах для чатов и мгновенных обновлений.
5 августа, 20:00 — 21:30
Лектор: Сергей Балалаев
Домашние задания: 1
ДЗ
Использование локальной(mesh) сети для создания приложений. 1. Использовать библиотеку от Apple – Multipeer Connectivity.
2. Реализовать передачу текста между устройствами.
3. Проверить работу на симуляторе, выступающем как одно из устройств.
SwiftData
Познакомиться с SwiftData и миграцией на нее
7 августа, 20:00 — 21:30
Безопасность: AppSecurity, Keychain и обфускация API ключей, SSL Pinning
AppSecurity;
сохранять важные данные в Keychain;
скрывать данные от декомпиляции ipa файла;
защищать приложение от Man-In-The-Middle аттаки.
12 августа, 20:00 — 21:30
Лектор: Олег Максименко
Домашние задания: 1
ДЗ
Реализация поддержки оффлайн режима в приложении. Создать приложение, которое получает данные из сети:

1. Реализовать кэширование данных с использованием одной из технологий: Realm, Files, Firebase, CoreData (предпочтительно использовать новую для вас технологию).
2. Убедиться, что модели данных поддерживают протокол Codable.
- Либо реализовать кэширование другим способом: UserDefaults, NoSQL (CouchDBLite, PinCache), Keychain, SwiftData.
3. Реализовать сохранение данных в файл при выходе с экрана тестирования структуры данных.
4. Загружать сохраненные данные при запуске приложения или повторном входе в экран тестирования.
Должно сохраняться состояние предыдущего тестирования даже после перезапуска приложения.
Создание приложений для Apple Watch, TV, Mac
Потренируемся собирать мультиплтаформу средствами Apple. Разберемся в особенность разработки под watchOS, tvOS, macOS и iPadOS. Будем использовать преимущества SwiftUI для мультиплатформы.
Виджеты
делать свои виджеты;
создавать изменяемые виджеты с своим дизайном;
добавлять виджеты к уже существующему приложению.
14 августа, 20:00 — 21:30
watchOS
создать приложение для Apple Watch.
19 августа, 20:00 — 21:30
Лектор: Николай Бакланов
Shortcuts и Siri интеграция с приложением
использовать App Intents, Siri.
21 августа, 20:00 — 21:30
Лектор: Артем Устинов
tvOS
создать приложение для Apple TV.
26 августа, 20:00 — 21:30
Лектор: Олег Максименко
visionOS
понимать стек разработки под visionOS;
использовать RealityKit для visionOS;
использовать Reality Compose;
знать как собирать базовый UI под visionOS.
28 августа, 20:00 — 21:30
Лектор: Артем Устинов
Домашние задания: 1
ДЗ
Приложение для visionOS. 1. Создать приложение для visionOS.
2. Добавить два WindowGroup.
3. Реализовать Drag and Drop с использованием .dropDestination.
4. Добавить кнопку для добавления объектов usda/usdz.
Мультиплатформенная разработка: перенос на Android, Vulkan/Metal
Разберемся с GPU программированием, как писать общий GPU код под iOS и Android. Познакомимся с аналогом SwiftUI для Android – Jetpack Compose. Научимся собирать мультиплатформенные iOS+Android приложения с помощью Kotlin Multiplatform и Kotlin 1.4
Мультиплатформа для Rich Media: Metal и Vulkan, разработки игр, Video/Image процессинг
писать кроссплатформенный GPU код;
настраивать окружение для этого.
9 сентября, 20:00 — 21:30
Лектор: Николай Бакланов
Jetpack Compose
сравнить SwiftUI и Compose;
переносить логику разработки на SwiftUI в Compose.
11 сентября, 20:00 — 21:30
Лектор: Николай Бакланов
Одновременная реализация фич на iOS + Android. Необходимый tool-set
настраивать окружение;
собирать KMM стек для iOS;
решать проблемы с gradle.
16 сентября, 20:00 — 21:30
Лектор: Анна Жаркова
Домашние задания: 1
ДЗ
Создание мультиплатформенного сетевого слоя с помощью KMM. - Установить Android Studio.
- 
Создать мультиплатформенный проект и пересоздать для SwiftUI iosApp, как было показано на занятии.
- Сбилдить KMM в Android Studio.
- Вывести данные в SwiftUI лист.
Организация разработки
Немного познакомимся с теорией тестирования, напишем XCTest и UITest, узнаем как правильно проектировать тестируемый код. Изучим как настраивать Continuous Integration (CI) и причем здесь git и git-flow. Также научимся писать работающие резюме и то, что не говорят на собеседованиях, но используют.
Тестирование кода XCTest, UITest, fastlane и CI
собрать CI (Continuous Integration) на fastlane;
использовать XCTest.
18 сентября, 20:00 — 21:30
Лектор: Артем Устинов
Как правильно написать резюме и развивать hard-skills
корректно писать резюме;
выбирать работодателя, чтобы развивать свои hard-skills.
23 сентября, 20:00 — 21:30
Лектор: Станислав Жингель
Домашние задания: 1
ДЗ
Написание работающего резюме. 1. Просмотреть запись занятия с разбором резюме.
2. Доработать собственное резюме.
3. Прислать ссылку или файл для проверки.
Проектная работа
На основе умений и знаний полученных в курсе студент выбирает какой проект будет реализовывать. С нашей стороны будет помощь и наставничество в реализации проекта. Также нами будет предложен экспертный список «Чего не хватает в AppStore» из небольших и средних программ, где вы бы могли себя проявить.

Проект может помочь в трудоустройстве.
Написание приложения с нуля
выбрать и обсудить тему проектной работы;
спланировать работу над проектом;
ознакомиться с регламентом работы над проектом;
генерировать идеи для простых приложений на основе известных «­болей» пользователей;
использовать iOS платформу для генерации идей для приложений.
25 сентября, 20:00 — 21:30
Домашние задания: 1
ДЗ
Проектная работа. 1. Предложить одобренную ранее тему проекта через строку в окне сдачи данного домашнего задания.
2. Сдать ссылку на репозиторий курсового проекта.

В репозитории обязательно должен быть заполнен файл `Readme.md` с описанием проекта.

Варианты размещения приложения:
- Выложить на Github
- TestFlight External Testing (10k users)
- Опубликовать App Store
- Продемонстрировать на симуляторе или устройстве.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
30 сентября, 20:00 — 21:30
Лектор: Антон Марунько
Защита проектных работ
защитить проект и получить рекомендации экспертов.
2 октября, 20:00 — 21:30
Лектор: Антон Марунько

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

Геннадий Евстратов
Ведущий разработчик/архитектор Mail.Ru Group (подразделение «Юла») и владелец аутсорсинговой студии. Выпускник мехмата МГУ, 2005 год.

Опыт в сфере iOS-разработки - 9 лет; 20 лет в промышленной разработке. Кроме Objective-C и Swift, пишет на Java, Kotlin, JS, Python, Elixir, Elm, TS и др. За время работы опубликовал более 40 приложений в AppStore: Youla, OK, OK Live, Neon, Stoloto, gazeta.ru и др.

С 2016 года преподаёт курс «Введение в iOS-разработку» в Технопарке МГТУ им. Баумана. С 2013 года проводит регулярные воркшопы для своих коллег и сотрудников.