![](https://habrastorage.org/getpro/habr/upload_files/5c8/3f0/334/5c83f03344371a9abc2151958695f45e.jpg)
Конференция по мобильной разработке Mobius в этот раз пройдёт в хитром формате. Два дня будут полностью онлайновыми, а в отдельный третий день можно будет хоть лично прийти на мероприятие в Москве, хоть поучаствовать удалённо.
А вот общая идея конференции остаётся прежней: здесь будут доклады и по Android-разработке, и по iOS, и «универсальные». В этом хабрапосте пометили всё значками ?, ? и ♾️ соответственно.
Какие именно будут доклады в этот раз? Собрали в этом хабрапосте описания всех и разделили их на тематические блоки, чтобы удобнее было разобраться.
Оглавление
Под капотом
♾️ Телефон, NFC и пластиковые карты — романтика!
![](https://habrastorage.org/getpro/habr/upload_files/d2b/aab/4cf/d2baab4cf45e16cd70ccb57d10171a66.jpeg)
Владислав Кожушко
VK Звонки
Двадцать лет назад никто и подумать не мог, что мобильный телефон, который помещается в карман, сможет совмещать в себе более 20 функций (фото и видеокамера, диктофон, браузер, плеер, навигатор, ТВ, календарь, ежедневник, часы, будильник, таймер, секундомер, фонарик, игровая приставка, визитница, хранилище мультимедиа, фото и видео редактор, распознавалка музыки, голосовой ассистент и прочее). А особенно, что там будет функция NFC-кардридера.
Рассмотрим:
стандарты NFC-меток,
чем отличается пропуск в офис от банковской и транспортной карты,
как хранятся данные на NFC-носителях и что умеют современные смартфоны,
какими скрытыми возможностями обладают китайские NFC-метки.
♾️ Работа с картой в каршеринге
![](https://habrastorage.org/getpro/habr/upload_files/a83/eb2/79b/a83eb279be209eeafe13926b1089ec18.jpeg)
Евгений Петриёв
Делимобиль
Спикер расскажет про специфику приложения каршеринга в контексте взаимодействия с картой и затронет следующие вопросы:
Работа с разными провайдерами картографии в мобильных приложениях (подводные камни, кейсы из реальных интеграций).
Построение универсального интерфейса для работы с картами.
Подходы к оптимизации и улучшению производительности карты.
? Gradle: Incremental compilation 101
![](https://habrastorage.org/getpro/habr/upload_files/3c7/f94/103/3c7f94103edd3424b11dea07665ff119.jpeg)
Сергей Опивалов
Gradle
Исследование механизмов инкрементальной компиляции, которые есть в современном Android toolchain. Спикер расскажет, что такое ABI, обсудит «степени» инкрементальности и расскажет, как развивать эффективно собирающуюся кодовую базу.
Доклад ориентирован для Android-разработчиков, но будет полезен и JVM-бэкендерам, использующим Gradle. А если вы из мира iOS, возможно, вам захочется расширить кругозор или вы вдохновитесь на собственное исследование.
? Оптимизация UI с использованием Texture
![](https://habrastorage.org/getpro/habr/upload_files/eda/d1c/7c7/edad1c7c7ed35fdc78bd184a874adde9.jpeg)
Максуд Даудов
VK
Здесь будет воркшоп: не просто доклад-монолог со статичными слайдами, а практический разбор.
Спикер рассмотрит основные проблемы оптимизации и подробно разберется в них: вы узнаете, как они могут снизить FPS, и научитесь исправлять их. Сначала без Texture, а затем и с ним, рассмотрим решение подобных проблем и сравним результаты.
? Как Яндекс Go самокаты BLE внедряли
![](https://habrastorage.org/getpro/habr/upload_files/bdd/566/319/bdd566319ca8ac46e6281d614454294d.png)
Влад Кривозубов
Яндекс Go
В докладе поговорим об имплементации Bluetooth-взаимодействия командой самокатов Яндекс Go.
Затронем такие темы:
в каком случае вообще может понадобиться Bluetooth;
проектирование взаимодействия IoT — App — Backend;
CoreBluetooth в общих чертах;
протокол для общения App <-> IoT;
трудности в разработке и их преодоление;
результат и дальнейшее развитие.
? И ещё чуть-чуть про изображения
![](https://habrastorage.org/getpro/habr/upload_files/719/b6e/533/719b6e533ef66d152af91bfc99040748.jpeg)
Роман Волков
Linearity GmbH
Спикер расскажет, что собой представляют изображения в памяти компьютера, затронет отличия между UIImage, CGImage и CIImage, поговорит о Core Graphics и Core Image, а закончит запуском обученной с нуля CoreML-модели для простой классификации без использования CreateML.
Тренды в мобильной разработке
♾️ Почему KMM — не кроссплатформа?
![](https://habrastorage.org/getpro/habr/upload_files/dcf/fe9/390/dcffe9390de30823df4122c815e85b04.jpeg)
Александр Соколинский
IceRock Development
Александр уже полтора года делает приложения с использованием технологии KMM в продакшене. В докладе он рассмотрит концепцию KMM и ее принципиальные отличия от остальных кроссплатформенных решений.
Доклад будет ориентирован на разработчиков, не знакомых с KMM или не погружавшихся в устройство этой технологии. Сначала спикер затронет известные недостатки кроссплатформы, а затем покажет, как их решает Kotlin Multiplatform. Затем будет конкретика: что можно сделать общим между платформами, а что нет, и сколько в итоге можно выиграть от использования KMM.
![](https://habrastorage.org/getpro/habr/upload_files/20a/85b/dfe/20a85bdfe90dae227ea779662fcae07e.jpeg)
Ольга Ким
Яндекс.Технологии
Сейчас в любом крупном приложении есть что-то, что меняется от конфига сервера. Доклады про Server Driven UI появляются уже несколько лет. В команде Ольги шли примерно таким же путем, как и все — писали свой конструктор-компонент. Но 4 года назад его стало не хватать, и написали «свой HTML». Ольга расскажет про разработку и детали работы DivKit, open source-фреймворка от Яндекса.
♾️ ОС «Аврора» глазами Android- и iOS-разработчика
![](https://habrastorage.org/getpro/habr/upload_files/1c7/21c/766/1c721c766bf91ce30627722cf0db89b0.jpeg)
Алексей Гладков
YouTube channel Mobile Developer
В современном мире нельзя быть до конца уверенным, что завтра у нас будут работать Android или iOS. Поэтому спикер решил взглянуть на альтернативные мобильные ОС из России и начать с самой перспективной — ОС «Аврора». В докладе будут разобраны технологии, на которых пишутся приложения, подходы в ОС, best practices, построение архитектуры, навигация, UI/UX, DI и т. д.
![](https://habrastorage.org/getpro/habr/upload_files/709/2e7/435/7092e74350e2db69025dad053a740f4e.jpeg)
Денис Глазков
Открытая Мобильная Платформа
![](https://habrastorage.org/getpro/habr/upload_files/0e4/533/a01/0e4533a01c4aa42cfb23c432ba72f7a5.jpeg)
Роман Аляутдин
Открытая Мобильная Платформа
Разработка своей операционной системы вызывает много вопросов. Один из главных — как предоставить инструменты для создателей приложений.
Спикеры рассмотрят ОС «Аврора», расскажут о средствах и трендах кроссплатформенной разработки и поговорят о том, как ОС «Аврора» должна развиваться в этом направлении.
? GraphQL: как уговорить сервер подстроиться под приложение
![](https://habrastorage.org/getpro/habr/upload_files/181/7c5/769/1817c57693130701d532ab1cea63a409.jpeg)
Александр Газаров
Райффайзенбанк
Когда серверная часть подрастает, со временем она может трансформироваться в микросервисную архитектуру. Работать в таком формате клиенту мобильного приложения довольно трудно, потому что появляется куча запросов, которые ещё к тому же возвращают ненужные мобильному клиенту данные, да и вообще лучше бы точка входа была одна.
В идеале нужно было бы иметь сервер, который подстраивается под мобильный клиент и возвращает по особому протоколу именно то, что клиенту нужно. И такая технология, к счастью, существует: GraphQL, а именно язык, с помощью которого мы можем объяснить серверу, что нужно клиенту, и получить в ответ только необходимое в одном ответе.
В этом докладе пойдет речь о том, как в команде спикера внедряли GraphQL у себя, с какими трудностями столкнулись и как их преодолели.
? Навигируемся в Jetpack Compose
![](https://habrastorage.org/getpro/habr/upload_files/efa/5db/ab1/efa5dbab189c6cad2de9e6997a8c02f9.jpeg)
Игорь Кареньков
hh.ru
Есть несколько библиотек для реализации навигации в Jetpack Compose: google navigation, voyager, modo, appyx, но что выбрать и как понять, что лучше?
Спикер сравнит различные библиотеки, выделит их сильные и слабые стороны, сравнит их в реальных кейсах. Рассмотрим большинство реальных кейсов, в том числе интеграцию навигации в реальное приложение c Fragment. Вы узнаете больше про Modo, про то, почему у неё нет аналогов и почему нужно выбрать именно её (спойлер, потому что UDF).
? Distributed actors и где они обитают
![](https://habrastorage.org/getpro/habr/upload_files/d0c/95e/ce7/d0c95ece7d8c9fae5d2ccc2e0a3cef75.png)
Евгений Антропов
Райффайзенбанк
Посмотрим на идею дальнейшего развития модели actor, да и вообще вспомним, что это такое. Попробуем написать свою систему actor для работы с REST API. Изучим, а что же сделали в Apple в distributed actor system, и реализуем свою mesh P2P-сеть на Multipeer Connectivity. Будет много кода, и будем вникать, а как же это работает под капотом, и самое главное, как сделать свой протокол для взаимодействия с другими пользователями или другими устройствами. Конечно, это не серебряная пуля, поэтому подумаем, куда лучше не стоит затягивать distributed actors, а делать по старинке. А в конце вас ждет маленький сюрприз.
♾️ С какими особенностями мы столкнулись при создании альтернативного магазина приложений в России
![](https://habrastorage.org/getpro/habr/upload_files/ade/fb1/a72/adefb1a72cc2afe1f339e9539011a6db.jpeg)
Артем Анин
VK
Спикер расскажет, как совместно с крупнейшими ИТ-компаниями за 1,5 месяца создали и запустили бета-версию российского магазина мобильных приложений для Android. Поделится процессом создания стора в условиях отсутствия локальной операционной системы и других технических и когнитивных сложностей и ограничений. Раскроет перечень технологий, которые применяются при разработке стора и реализации функций веб-витрины, консоли разработчика, платежей, пуш-уведомлений и других.
Доклад прежде всего ориентирован на разработчиков, но будет полезен всем, кто интересуется темой импортозамещения.
Качество продукта
♾️ Перестройка: как провести рефакторинг с пользой
![](https://habrastorage.org/getpro/habr/upload_files/f7f/abb/4d7/f7fabb4d70e191efca6729e15cd20c91.png)
Дмитрий Мовчан
Дзен
Представьте задачу, которая не приносит никакой новой функциональности вашему продукту, отнимает огромное количество драгоценного времени ваших разработчиков, но тем не менее время от времени встает перед командой. Такая задача именуется рефакторингом. В чем причина этой задачи? Как с ней справляться и возможно ли не допустить ее появления в своем продукте? Обо всем этом пойдет речь в докладе.
? TDD + BDD = TBD (Tests, Business, Development). Триада инженерной культуры
![](https://habrastorage.org/getpro/habr/upload_files/dc9/1c9/b8a/dc91c9b8a1253da89dbe175af79214f8.jpeg)
Максим Абакумов
Delivery Club Tech
![](https://habrastorage.org/getpro/habr/upload_files/5b1/1f6/66d/5b11f666d9f4209cfbba091d06e8c410.jpeg)
Ярослав Магин
Delivery Club Tech
Было сказано много слов о том, как писать тестируемый код, и о важности управления зависимостями. Но мало кто говорит о том, как писать сами тесты. Почему в одних проектах тесты служат документацией, а в других — только усложняют поддержку? Что делать, если тесты пишутся, а процент покрытия кода практически не растет? Как превратить рутинное описание тест-кейсов в творческий процесс, понятный всей команде? Цель доклада — ответить на эти и многие другие вопросы, показать слушателю, как писать читабельные и простые в поддержке тесты, формирующие инженерную культуру.
? Keyboard avoiding in SwiftUI
![](https://habrastorage.org/getpro/habr/upload_files/158/ac4/ee5/158ac4ee58befd93f0782d2265c79a06.jpeg)
Валерий Скворцов
СберМаркет
Рано или поздно в процессе разработки появляются кейсы, когда клавиатура затрудняет взаимодействие пользователя с UI или же блокирует его совсем. Для решения этой проблемы в команде спикера пришлось полностью переосмыслить классический механизм избегания клавиатуры. Стек проекта позволил немного поэкспериментировать и разработать собственное решение, которое объединило в себе мощь UIKit и удобство SwiftUI. Кстати, получилось лучше, чем у Apple.
Архитектура
♾️ Мультиплатформенный Redux и SwiftUI / Jetpack Compose
![](https://habrastorage.org/getpro/habr/upload_files/279/fdc/94c/279fdc94c0b902e5b31714c35d961280.jpeg)
Юрий Потапов
Яндекс
Команды, разрабатывающие идентичные приложения для iOS / Android часто вынуждены писать похожий код для обеих платформ. Отсюда вытекают следующие проблемы:
Непредсказуемые различия в логике / UI.
Больше багов и необходимости тестирования.
Вдвое больше ресурсов на разработку фичей.
Уменьшить эти проблемы помогает вынесение кода в мультиплатформенные модули.
На примере приложения «Народный Картограф» будет продемонстрирована архитектура, позволяющая стандартизовать описание UI приложений, минимизировать количество платформенного кода, состоящего из экранов SwiftUI / Jetpack Compose, и выносить всю логику в мультиплатформенный Redux, написанный на Kotlin Multiplatform.
? Как пройти архитектурную секцию собеседования
![](https://habrastorage.org/getpro/habr/upload_files/a10/a31/cd6/a10a31cd6ab626810d380ed81a15fa10.jpeg)
Кирилл Розов
Тинькофф
За свою карьеру Кирилл провел много собеседований: редко какой кандидат может грамотно реализовать архитектуру Android-приложения с учетом всех требований, а еще сделать это наглядно в ограниченное время.
На своем примере Кирилл покажет, как пройти архитектурную секцию собеседования и как задавать правильные вопросы, чтобы у интервьюера вопросов не оставалось.
Вы узнаете:
Что такое архитектурная секция.
Как к ней подготовиться.
Ожидания от кандидатов разного уровня.
Какие вопросы надо задавать.
Что от вас ожидают увидеть.
Какие моменты важно подсветить.
? The Elm Architecture in Prod
![](https://habrastorage.org/getpro/habr/upload_files/bc8/995/4bc/bc89954bc28610d6831d08939806de3e.jpeg)
Артур Бадретдинов
Squire
UDF-архитектуры, в частности MVI, приковывают к себе все больше и больше внимания. Развитие Compose способствует тренду. Но стоит понимать, что и у MVI есть свои проблемы. В большинстве имплементаций приходится по-прежнему создавать и тестировать взаимодействие на моках, полагаться на подмену потоков и пулов при тестировании асинхронных задач.
В команде спикера на протяжении последних четырёх лет прошли путь от MVP к MVI и от MVI к MVU. Этот доклад — об этом тернистом пути. Вы узнаете, почему в команде решили уйти от детища Badoo — связки Ribs и MVICore.
Кстати, на Droidcon 2022 ребята из Badoo рассказали, что и они уходят от Ribs! Похоже, выводы подтвердились. После доклада спикер покажет пример того, как создаётся и тестируется стандартный Loading — Content — Error экран на MVU буквально за 20 минут. Это демо заставит вас присмотреться к подходу и потыкать его палочкой. Может, он хорошо подойдёт и вашему проекту?
![](https://habrastorage.org/getpro/habr/upload_files/c1f/f06/6f5/c1ff066f505789d134ec895ee3f5a7a0.png)
Александр Митропольский
Сбер
![](https://habrastorage.org/getpro/habr/upload_files/a93/892/e88/a93892e883be46b1904eb8f3cf77ae1c.jpeg)
Александр Макушев
Сбер
Александры рассмотрят проблемы, которые возникают при использовании Jetpack Navigation в многомодульном проекте, даст собственное расширяемое решение и обсудит его плюсы и минусы.
Часть доклада посвящена проблемам и интересным решениям, возникшим в процессе реализации поддержки диплинков.
Доклад будет интересен и тем, кто только начинает работать с Jetpack Navigation и тем, кто ищет альтернативные решения. А также всем, кто хочет посмотреть, как же применять алгоритмы на примере модуля для поддержки диплинков.
? Как избежать хаоса: навигация как отдельный логический уровень
![](https://habrastorage.org/getpro/habr/upload_files/3be/cbe/657/3becbe657fe2aa039a6086f232b7bf00.png)
Сергей Шардыко
Skyeng
В Android есть библиотеки для работы с навигацией, но часто они представляют собой базовый инструмент без строгих правил по его применению. Это зачастую приводит к распространению логики навигации за пределы ее ответственности, сращиванию с presentation уровнем, росту связности с другими компонентами. Возникает хаос, которого стоит избегать.
В проекте LANG (один из международных продуктов Skyeng для изучения иностранных языков) мы взяли за основу популярный подход и доработали его. Наша структура позволяет максимально отделить навигацию от presentation-слоя, гибко использовать и масштабировать ее в рамках разных модулей.
Такой подход к навигации не зависит от роста количества уровней вложенности, что позволяет держать трудозатраты на разработку ближе к прямой зависимости времени разработки от масштаба требований бизнеса.
? Как выстроить DI в многомодульном iOS-приложении при помощи Needle
![](https://habrastorage.org/getpro/habr/upload_files/54c/f47/d74/54cf47d74ef4b69f1690858bee3b5e5f.png)
Кирилл Володин
Тинькофф
Кратко вспомним, что такое модуляризация, зачем она нужна, и причем здесь Dependency Injection. Подумаем, как этот принцип, а точнее фреймворк, который его реализует, поможет при модуляризации.
Далее обсудим, почему Needle — это лучший выбор из существующих open source DI-фреймворков. Поговорим и про сам Needle — как он устроен и какие есть нюансы использования.
В итоге вернемся к тому, как применять его в условиях многомодульного приложения и как обходить проблемы, которые он порождает. Не обойдем стороной и тему тестирования — поговорим, как писать тесты на код, в котором используется Needle.
? Как и зачем дробить iOS-приложение на микрофичи
![](https://habrastorage.org/getpro/habr/upload_files/e73/6d3/9a0/e736d39a0490ab80a15421e4107450f1.jpeg)
Илья Харламов
RetailCRM / Simla.com
Илья расскажет об опыте дробления iOS-монолита на микрофичи (uFeatures). Вы узнаете, зачем это вообще нужно, с какими сложностями столкнулись в команде Ильи и как их решали, какие профиты получили в итоге. Подробно рассмотрим инструменты, которые очень помогли в этом нелегком деле.
Доклад будет интересен и тем, кто только планирует начинать большой проект и продумывает архитектуру, так и тем, кто хотел бы поделить свое большое приложение на отдельные компоненты, но не знает с чего начать и боится потенциальной сложности этой задачи.
UI/UX
? Android Insets и анимация клавиатуры
![](https://habrastorage.org/getpro/habr/upload_files/ad2/15b/ca1/ad215bca1ce3b86d7ff877128d42cbdc.jpeg)
Михаил Гуревич
GetSquire
Спикер рассмотрит разные виды Insets, поговорит о том, как достичь Edge-to-Edge-вида приложения и подробно остановится на клавиатуре. Вы научитесь одновременно анимировать контент приложения и открытие клавиатуры. Научитесь думать об анимации так, чтобы упросить себе жизнь, и поймете, почему всё не так просто.
![](https://habrastorage.org/getpro/habr/upload_files/18d/3f9/d84/18d3f9d84b6a684cf2d853506274af09.png)
Никита Майданов
Adapty, CocoaHeads
Никита расскажет про нюансы работы in-app подписок на iOS и покажет редкие инструменты, которые мало кто использует. Будет погружение в монетизацию приложений, советы из личного опыта и бенчмарки на основе данных Adapty.
? Выжимаем максимум из SwiftUI Preview
![](https://habrastorage.org/getpro/habr/upload_files/274/387/950/2743879503a59740c597c7267721f040.jpeg)
Максим Гришутин
OZON
Рассмотрим, что можно сделать на основе SwiftUI Preview. Поговорим об автоматической генерации на основе Previews:
Демо приложения.
Snapshot-тестов.
Performance-анализ views.
Accessibility-тесты.
Все это попробуем генерировать полностью автоматически. Максим расскажет о своём готовом решении и выжмет максимум из SwiftUI Preview.
Инфраструктура
? Impact Analysis. Как мы ускоряли юнит-тесты
![](https://habrastorage.org/getpro/habr/upload_files/cc4/bdd/862/cc4bdd8625f47e3f1fd22f04cc09aa9a.jpeg)
Алёна Половкова
Сбер
Доклад будет полезен Android-коммьюнити. Спикер расскажет, как существенно сократить время на прогон юнит-тестов на вашем проекте и какие инструменты помогут в этом. Вы узнаете, какие результаты команда спикера получила на проекте Сбербанк Онлайн и какие подводные камни при этом встретила.
? Какие параметры компьютера влияют на скорость Gradle-сборки
![](https://habrastorage.org/getpro/habr/upload_files/fc9/1f2/4e7/fc91f24e7fce25fb1b4206552b49f22f.jpeg)
Данил Перевалов
ЦИАН
Как вы думаете, какие характеристики сильнее влияют на скорость сборки вашего проекта — частота CPU или частота оперативной памяти? Количество ядер CPU или количество оперативной памяти? Влияет ли скорость постоянной памяти на скорость сборки? Однажды в голове у Данила возникли такие вопросы, и он решил найти на них ответы.
Другое
![](https://habrastorage.org/getpro/habr/upload_files/5a6/f45/c37/5a6f45c3715d09aa3230efb36b5e5f4d.jpeg)
Вероника Макаровская
Сбер
Как трансформировать бот из небольшого средства коммуникации и приема заявок о проблемах в полноценный продукт с собственным образом?
Спикер расскажет о том, как небольшой бот на Python стал сердцем всех процессов iOS-community в Сбербанк Онлайн. Доклад будет полезен активным участникам своих коммьюнити и разработчикам, которые хотят автоматизировать рутинную работу.
? Векторные иконки в Android: анатомия, патофизиология, диагностика и хирургия
![](https://habrastorage.org/getpro/habr/upload_files/602/70e/dd9/60270edd96488750f65660f8d51bcaf2.jpeg)
Михаил Горюнов
Все мы используем векторные иконки — Vector Drawable. Как они устроены, каким образом парсятся и отрисовываются на канве — всё это можно загуглить.
Спикер расскажет про более сложные моменты: как их оптимизировать, найти бессмысленные группы и бесполезные клипы, невидимые контуры и излишнюю детализацию. А ещё вы узнаете, что делать с ворнингами про слишком длинную pathData, с которыми все сталкивались.
В заключение
Это ещё не всё, что будет на конференции. Будут и доклады от партнёров — например, «Как сделать аналог Firebase App Distribution и замахнуться на корпоративный магазин приложений» от SM Lab. Интервью «Нужен ли Bazel в Android-разработке?». Диалоги о вечном: «Быть или не быть senior'ом», «Круглый стол про дизайн-систему».
Но главное дополнение даже не в этом. Мы рекомендуем для максимального эффекта не просто сидеть и смотреть видеопоток, а участвовать: подключаться к дискуссионным зонам после докладов, где порой возникают жаркие обсуждения, задавать вопросы спикерам в чатах докладов. Про офлайн и говорить нечего: те, кто соберётся в Москве и смогут пообщаться вживую, наверняка этой возможностью воспользуются.
А нам остаётся напоследок напомнить, что все остальные подробности (вроде расписания) и билеты — на сайте конференции.