примеров из практики: Leroy Merlin | Котлин Мультиплатформенный
Leroy Merlin ↗ помогает людям во всем мире улучшить условия жизни и образ жизни, помогая им проектировать дома их мечты и воплощать их в жизнь.
Мобильное приложение Leroy Merlin помогает покупателям искать товары, совершать покупки в Интернете и находить ближайший магазин.
Решение использовать Kotlin
До 2018 года у Leroy Merlin уже были мобильные приложения для iOS и Android для клиентов. Оба приложения имели нативную реализацию с дублированием доменной логики и очень старый унаследованный код с огромными затратами на управление. Чтобы сделать их более управляемыми, гибкими и экономичными, компания решила их переписать.
Наши приложения были практически идентичны, и ответственность за их переписывание была возложена на мобильную команду, состоящую из 6 инженеров iOS и Android, которые в то время мало делились своим опытом друг с другом, и технического руководителя, который управлял всем фрагментарный процесс. Это был не масштабируемый поток. Более того, у нас было меньше инженеров, чем у типичной команды разработчиков мобильных приложений, а это означало, что нам потребуется больше времени для внесения изменений
У нас было 2 варианта, которые могли помочь нам ускорить процесс: первый — просто нанять больше людей, а второй второй заключался в использовании технологии, которая позволила бы нам обмениваться знаниями и опытом между командами iOS и Android. Мы выбрали второй вариант и начали искать подходящую технологию, помня, что безопасность, качество и стабильность наших приложений имеют первостепенное значение.
Нам потребовалось некоторое время, чтобы найти кроссплатформенное решение с интеграцией пользовательского интерфейса. Это был критический момент, потому что мы хотели использовать полностью общий подход. Мы рассматривали как Flutter, так и React Native. Это был май 2019 года и КММ не был широко известен, поэтому мы его еще не рассматривали.
У нас также есть еще одна команда инженеров, которые разрабатывают внутреннее мобильное приложение для сотрудников компании. Они используют React Native в производстве, так что это была первая технология, на которую мы обратили внимание. Но React Native не оправдал наших ожиданий из-за качества кода. При масштабировании приложения React Native теряет качество, поэтому этот вариант мы не учитывали.
Конечно, мы могли бы создать приложение с помощью Flutter, но когда мы углубились в эту технологию, мы обнаружили, что у этого подхода есть две основные проблемы. Первая проблема была с наймом, потому что мало кто знает Dart. Это означало, что проект не будет масштабируемым, потому что у нас возникнут проблемы, если нам понадобится написать какой-то нативный код.
Вторая проблема, которая в конечном итоге более опасна, заключается в том, что и для Android, и для iOS постоянно появляются новые выпуски, новые версии и новые шаблоны проектирования, и более чем вероятно, что между нативным выпуском и его реализацией во Flutter будет разрыв. . Это нормально для использования во внутренних приложениях, но мы не можем использовать этот подход для флагманского приложения, ориентированного на клиента.
Дальнейшие исследования показали, что было бы лучше не использовать пользовательский интерфейс на разных мобильных платформах. Android и iOS имеют разные рекомендации по пользовательскому интерфейсу, и поддержка этой разницы занимает больше времени, чем просто разработка пользовательских интерфейсов по отдельности.
Мы понимали преимущества кросс-платформенного подхода, и его использование было важно, потому что другие команды уже создавали внутренние приложения с общей кодовой базой, и наша команда намеревалась обменяться с ними идеями. Поэтому мы искали подходящее кроссплатформенное решение.
Когда мы впервые услышали о КММ, мы поняли, что это именно тот подход, который мы искали. Он исключает дублирование бизнес-логики, обеспечивая при этом производительность и безопасность собственного пользовательского интерфейса.
Наконец, у нас появилась технология, которая позволила нам совместно использовать бизнес-логику, создавать пользовательские интерфейсы для конкретных платформ в соответствии с рекомендациями и одновременно обеспечивать скорость и качество нативных форм. И это можно написать на языке Kotlin, родном для платформы Android. Мы поняли, что это именно то, что нам нужно для нашего проекта.
Как KMM использовался в продукте
Учитывая, что KMM была новой технологией, мы начали тестировать ее с теми частями приложения, которые использовались реже, такими как соглашения с клиентами и страницы поддержки, чтобы выявить проблемы, связанные с библиотекой. возник бы. В нашем приложении есть два типа запросов, с авторизацией и без. Запросы, требующие авторизации, — самая сложная часть, поэтому мы начали экспериментировать с запросами, не требующими ни авторизации, ни места в кеше. В процессе перезаписи модулей на KMM мы с самого начала разрабатывали новые пользовательские сценарии с KMM, но существующие сценарии переносились на KMM, когда их нужно было рефакторить.
Прежде чем писать многоплатформенный код, приложения для iOS и Android должны иметь одинаковую архитектуру с модулями или слоями, имеющими одинаковую логику. В наших приложениях было похожее разделение слоев:
- UI (презентация)
- Домен (уровень бизнес-логики)
- Данные (уровень источника данных)
Сначала мы переместили только уровень данных, но затем мы изменили наш процесс и начали перемещать все остальное, включая варианты использования домена. Единственные части KMM, которые мы не используем, — это пользовательский интерфейс и функции, специфичные для платформы, такие как Apple и Google Pay.
Внутри библиотеки мы используем Ktor, Kotlin Serialization и Coroutines. Мы используем оболочку Rx для адаптации платформы, потому что наши платформы используют Rx, но в будущем мы планируем использовать только Coroutines на Android.
Чтобы улучшить работу функционала корзины пользователя, нам необходимо сделать ее полностью независимой без какой-либо синхронизации с сайтом. Это означает, что с кешем предстоит много работы. Поэтому, чтобы хорошо выполнить эту задачу, мы начали использовать библиотеку SQLDelight для кэширования API. Как только мы закончим эту задачу, мы перенесем больше основных функций приложения в KMM.
Плюсы и минусы
Проблемы, которые мы обнаружили при использовании Kotlin Multiplatform Mobile:
- Наши разработчики iOS обнаружили, что необходимо потратить значительное количество времени на ознакомление и приобретение навыков работы с Gradle, средой разработки и функциями языка .
- Тестировать на устройстве сложнее, и процесс контроля качества обычно сложнее.
- iOS Interop, который в настоящее время является Obj-C.
Прибыль:
- До KMM основные функции, такие как корзина пользователя, требовали примерно 40–60 часов работы для каждой платформы (80–120 часов для обеих), не считая тестирования. С KMM мы можем сократить сроки до 50-70 часов для обеих платформ. Таким образом, используя KMM, мы ожидаем значительного сокращения времени разработки.
- Производительность и качество нативных форм. Мы разделяем только бизнес-логику между платформами и используем собственный код для каждого пользовательского интерфейса. Этот подход дает нам наибольшую производительность с минимальным количеством стандартного кода.
Простота найма и поддержки. KMM работает на Kotlin, и найти разработчиков для Kotlin очень легко, потому что почти каждый Android-разработчик уже знает его. А благодаря близости к JVM-языкам почти каждый бэкенд-разработчик может работать и с Kotlin, и с KMM.
Идентичная логика на обеих платформах значительно снижает расхождения. На самом деле у нас изначально была проблема в дополнение к дублированию бизнес-логики. Иногда у нас были разные реализации функции на каждой из двух платформ. Мы выпустили наши версии для iOS раньше версий для Android. Иногда мы решали внести некоторые исправления в логику после выхода iOS, и иногда это приводило к тому, что мы внедряли эти исправления только в Android и забывали об iOS. Конечно, это не было правилом, но время от времени случалось. KMM помогает нам избежать этих проблем, потому что если вы что-то исправляете, вы исправляете это на обеих платформах одновременно. Но будьте осторожны: это также означает, что ошибки появятся на обеих платформах.
Предложения, советы и рекомендации.
Допустим, вы решили использовать КММ (хороший выбор). Но в вашей команде есть iOS-разработчики, которые не знакомы с Kotlin и не умеют им пользоваться. Вам обязательно нужно будет помочь им адаптироваться к новому языку. Мы обнаружили, что создание базы знаний Kotlin и KMM значительно облегчает этот процесс. Каждый раз, когда вы сталкиваетесь с проблемой в чем-то (развертывании, добавлении библиотек и т. д.), создавайте документацию и делитесь ею со всеми разработчиками, тогда они смогут обратиться к ней позже и решить, как что-то делать.
Важный момент — не навязывать КММ командам, особенно команде iOS. Нужно объяснить, что с KMM разработчики iOS не перестанут работать с экосистемой Swift или Apple. У нас есть разработчики, которые работают с KMM, и разработчики, которые этого не делают. Важно объяснить, что Kotlin не означает, что вы предпочитаете Android. Это общее решение. Эти пояснения важны, потому что, если вы не проясните эти моменты для разработчиков iOS, они могут отвергнуть этот подход.
Еще одна проблема с iOS — локальная среда Kotlin. Если вы хотите добавить зависимость от вашего локального модуля KMM в качестве модуля через интеграцию с Cocoapods, это означает, что вам необходимо создать собственный код Kotlin для этого модуля. Это усложняет сборку проектов, влияет на разработчиков iOS, которые не хотят работать с мультиплатформой, и увеличивает время сборки проекта. Мы исправили эту проблему, изменив файл Cocoapods Podspec. Мы изменили источник нашей библиотеки Kotlin с Git на URL-адрес с готовым к работе zip-архивом с Apple Framework. И теперь разработчики iOS работают с KMM так же, как и с любой другой предварительно созданной зависимостью Cocoapods.
Пожалуй, самый важный совет, который мы даем людям, заключается в том, что они не должны бояться быть в числе первых, потому что без риска нет награды. KMM — очень стабильная технология с огромным сообществом, поэтому, если вы хотите сэкономить время и упростить разработку приложений, попробуйте Kotlin. Но помните, что надежность и безопасность являются главными приоритетами, поэтому старайтесь вносить изменения постепенно и начинайте с тех частей вашего приложения, которые не являются критическими.
Контакты
Алексей Гладков, Архитектор мобильных технологий, Leroy Merlin aleksey. [email protected]
Слава Корниенко, Старший разработчик Android в Leroy Merlin [email protected]
Файл с вырезками из Leroy Merlin • NFCW
Перейти к содержимомуШесть новостей.
• Должен ли Leroy Merlin участвовать в выставке NFCW? Это ваша организация? Узнайте, как попасть на витрину NFCW Expo.
Более четверти из 193000 систем самообслуживания, отгруженных продавцам по всему миру в 2022 году, были установлены в непродовольственных магазинах, «поскольку технология проникает в новые сегменты», обнаружила исследовательская компания RBR. … Подробнее
Что нового в платежах
Сара Кларк • • Обновлено • nfcw.com
Samsung Pay продолжает глобальную экспансию с запуском в Италии — Samsung — «С сегодняшнего дня Samsung Pay доступен пользователям в Италии с совместимыми устройствами Samsung, включая такие носимые устройства, как Samsung Gear S3 и Gear Sport, а также новый Galaxy S9.и S9+… Некоторые дополнительные функции будут доступны исключительно для потребителей в Италии. К ним относятся скидки до 20% на популярные бренды, включая Daybreak Hotel, EF Education, Leroy Merlin и Moleskin».
Что нового в платежах
Сара Кларк • • nfcw.com
Groupement des Cartes Bancaires CB, французская ассоциация банковских карт, которая впервые начала использовать карты с чипом для платежей в 1980-х годах, планирует к концу этого года позволить банкам-членам выдавать клиентам брелоки, поддерживающие платежи по отпечаткам пальцев.
NFC World
Сара Кларк • • Обновлено • nfcw.com
Консорциум Ergosum, в который входят ведущие французские ритейлеры, поставщики карт магазинов и операторы мобильной связи, опубликовал подробные спецификации и варианты использования внедрение платежей NFC, погашение купонов и управление баллами лояльности в точках продаж до запланированного крупномасштабного потребительского тестирования. Подробнее
NFC World
Сара Кларк • • Обновлено • nfcw.com
Консорциум французских ритейлеров и операторов Ergosum опубликовал свои спецификации и два варианта использования как для традиционных точек продаж, так и для касс самообслуживания, с опережением запланированных сроков.