Журнал / польза

Лекции по мобильной разработке: iOS, Android и Flutter

Открываем доступ к видеоурокам Летней школы мобильной разработки. В них собрано всё, что вы хотите знать об iOS и Android, а также о кроссплатформенной разработке на Flutter.

Продолжаем рассказывать о Летних школах Академии Яндекса. Проект длился три месяца и включал пять направлений: бэкенд, разработку интерфейсов, мобильную разработку, а также дизайн и менеджмент. Программа каждого курса состояла из лекций с практическими занятиями и проектной работы, а занятия вели сотрудники Яндекса, развивающие сервисы и продукты для миллионов пользователей. 

В сегодняшней подборке сразу три курса из Летней школы мобильной разработки: по iOS, Android и Flutter. Материал рассчитан на слушателей, которые знакомы с основами разработки для мобильных платформ и хотят систематизировать знания. Вы узнаете об особенностях языков Kotlin, Swift и Dart, изучите различные подходы к построению архитектуры и научитесь собирать и тестировать приложения.

Android

1. My first app: вводная лекция

Вспомним историю Android, поговорим о сегодняшних трендах и заглянем в будущее. 

Вы познакомитесь с устройством системы и особенностями платформы, которые важно учитывать при создании Android-приложений.

2. Kotlin

Kotlin – язык программирования для разработки под Android. Есть множество статей и туториалов о том, как научиться на нём писать. Но в нашей лекции речь пойдёт о другом.

Нужно ли знать Java, чтобы лучше понимать Kotlin? Как не нужно писать на Kotlin, и действительно ли он ушёл от своего прародителя – JVM? Вы узнаете об антипаттернах кода и сложностях вариантности дженериков.

3. Базовые компоненты Android

Обзорная лекция о базовых компонентах Android-приложений. 

Разберём механизмы и ограничения Android Framework: классы Activity и Fragment, сохранение состояния, передачу данных внутри приложения и работу в фоне.

4. Views & Layout

Зачем нужны View и ViewGroup, в чём их отличие.

Вы узнаете, что это за сущности и для чего используются, а также познакомитесь с их внутренним устройством и процессами: Layout, Drawing и обработкой тачей. В качестве практического задания напишете собственный Custom ViewGroup.

5. RecyclerView

Лекция посвящена принципам работы UI-компонента RecyclerView, основным классам и интерфейсам, а также различным подходам, применяемым на практике.

6. Background, часть 1: многопоточность

Поговорим о многопоточном взаимодействии, гарантиях Java Memory Model и стандартных механизмах асинхронного программирования в Java и Android.

7. Background, часть 2: корутины в Kotlin

Зачем нужны корутины, из каких компонентов они состоят и какие проблемы решают.

Изучим Structured Concurrency и обсудим, в каких случаях его можно и нужно поломать, а также затронем нюансы, которые могут возникнуть при запуске, отмене и обработке ошибок.

8. Network

Разбираемся с устройством сети в Android.

Вы познакомитесь с протоколами HTTP(s) и WebSocket, форматами данных и популярными библиотеками для работы с сетью на платформе.

9. DI

В этой лекции вы научитесь разбивать Android-приложение на модули и использовать Dagger 2 для организации межмодульного DI (Dependency Injection).

10. DI advanced

Продолжение предыдущей лекции, посвящённое Hilt и его внутреннему устройству.

11. CI/CD

Практика CI/CD (continuous integration, continuous delivery) и её влияние на процесс разработки. Поговорим об особенностях практики в мире iOS- и Android-приложений, принципах, которым нужно следовать, и популярных сервисах для построения CI/CD.

12. Инструменты разработки, отладки и профилирования

Обзорная лекция по Android Studio.

Вы изучите интерфейс и основные возможности Android Studio, научитесь использовать горячие клавиши, а также разберётесь с доступными средствами дебага и профилирования.

13. Автотесты

Зачем нужны автотесты, и в чём отличие unit от Android-зависимых тестов. 

Разберём Java unit-тесты и Android-автотесты с точки зрения кода и напишем собственные. Вы освоите библиотеку Espresso, научитесь применять Matcher и познакомитесь с подходами TDD и BDD.

14. Gradle

Поговорим о системах сборки в Java, в частности о Gradle, а также о практическом применении build-скриптов при разработке Android-приложений.

15. Дизайн, стили, темы, анимации

Зачем в Android нужны стили и темы, чем они отличаются и как устроены.

Обсудим лучшие практики применения стилей и тем, а также стандартные средства для создания анимаций.

iOS

1. Вводная лекция

Познакомимся с минимальным инструментарием для работы в iOS, устройством среды разработки и базовыми принципами, а также напишем небольшой экран.

2. Swift как язык программирования

Вы освоите язык Swift, его базовые и специфические конструкции, а также попробуете разработать приложение для iOS.

3. Слой представления UIView

Подробно остановимся на слое UIView и всём, что с ним связано: вёрстке, отрисовке, иерархии и обработке событий.

4. Сложные представления

Вы узнаете о стандартных представлениях для работы с коллекциями, сценариях их применения и внутренних механизмах, а также научитесь использовать UICollectionView, UITableView и UIScrollView на практике. 

Лекция будет полезна как опытным разработчикам, так и тем, кто только начинает изучать платформу iOS.

5. UIViewController

Разберёмся с классом UIViewController: расскажем о его роли в структуре приложения и задачах, которые можно решать с его помощью.

6. Concurrency

Параллелизм, многопоточность и примитивы в языке Swift. 

Вы познакомитесь с определяющими понятиями iOS-разработки: технологией Grand Central Dispatch, классами NSOperation и NSOperationQueue, а также с перспективными подходами к многозадачности.

7. Networking

Подробная лекция о клиент-серверном взаимодействии в iOS-разработке. 

Рассмотрим HTTP-взаимодействие и REST-архитектуру, основы реализации сетевого слоя на Swift, сериализацию и десериализацию данных, использование формата данных JSON и проблемы безопасности в сетевом взаимодействии.

8. IDE, Toolchain, Cocoapods

Базовые инструменты для iOS-разработчика.

Вы изучите основные составляющие Xcode проекта: Targets, Build Configuration и Schemes. Во второй части узнаете об упаковке приложения, символизации crashes и code signing, а также об инструменте Cocoapods.

9. Архитектура

Три ключевых утверждения об архитектуре: она важна, проста и спорна. Разберёмся с архитектурой iOS-приложений и с тем, как выстраивать структуру при написании кода.

10. Сборка

Рассмотрим устройство iOS-приложений, процесс сборки и различные сборочные системы.

11. Автотесты

Обсудим основные виды тестирования и узнаем, как писать действительно полезные тесты, которые позволяют найти баг до попадания в продакшн и не ломаются при рефакторинге. 

Вы освоите принципы и практики написания тестов (F.I.R.S.T, AAA, TDD и другие), а также научитесь использовать XCTest, XCUITest и изоляционные фреймворки на примере SwiftyMocky.

12. CI/CD

Практика CI/CD (continuous integration, continuous delivery) и её влияние на процесс разработки. Поговорим об особенностях практики в мире iOS- и Android-приложений, принципах, которым нужно следовать, и популярных сервисах для построения CI/CD.

13. И ещё немного про анимации

Углубимся в теорию анимации: вспомним, что такое интерполяция и функции плавности, а также разберёмся с рендерингом в iOS. Пройдёмся по API для анимации и фреймворкам UIKit и CoreAnimation.

14. Наблюдения и выводы о практиках программирования

Что такое продукт и как устроена разработка в большой компании. Обсудим сложности, с которыми сталкиваются разработчики, и подходы к их решению на конкретных примерах.

Flutter

Видеокурс для тех, кто хочет узнать о возможностях кроссплатформенного фреймворка Flutter. Вы познакомитесь с особенностями языка Dart и основными концепциями: построением UI, работой с сетью, анимацией и архитектурными подходами.

1. Dart и Flutter — зачем?!

Разберём главные идеи и концепции языка Dart и фреймворка Flutter на примере готового приложения. Вы узнаете, из чего состоит Flutter-приложение, как формируется его UI и бизнес-логика.

2. Flutter: деревья виджетов и не только. Билдеры: обновление интерфейса по требованию

В первой части лекции рассмотрим рендеринг во Flutter: структуру виджетов, деревья Element и RenderObject, а также их роли и взаимосвязи.

Вторая часть посвящена использованию билдеров: зачем они нужны, как работают и что позволяют сделать.

3. Списки (ListView и другие). Анимации и рисование: от простого к сложному

Сначала поговорим о списках: какими они бывают, как создаются и где используются.

Во второй части рассмотрим работу с анимацией во Flutter: использование виджетов (implict animations), кастомных анимаций (explicit animations) и транзишенов, а также ступенчатые анимации, Canvas и добавление физики.

4. Dart Event Loop

Вы узнаете, что такое синхронные и асинхронные задачи в Dart, EventLoop и очереди, а также научитесь взаимодействовать с платформенным кодом во Flutter: обращаться к нему с помощью Swift/Objective-C/Kotlin/Java, встраивать платформенные View и использовать возможности Dart FFI.

5. Архитектуры и стейт-менеджмент во Flutter. Let the holy war begin

В заключительной лекции поговорим об архитектуре, управлении состоянием и организации зависимостей. Рассмотрим популярные подходы и библиотеки, такие как BLoC, Redux, GetIt и Provider. В качестве практики проведём рефакторинг приложения и применим к нему каждый из подходов.