🔥

Тред (Алексей Гладков)


Предновогодняя суета не оставила в стороне и меня, поэтому пишу вечером (у нас в Томске уже 18:19). Итак, про Kotlin Multiplatform. Вначале, немножко о том, что это вообще такое (вдруг, кто не в курсе).

Kotlin Multiplatform - это фреймворк, позволяющий создавать артефакты под разные платформы, используя один только язык Kotlin. На данный момент таких платформ три - Kotlin/JVM, Kotlin/Native и Kotlin/JS. Для нас это означает возможность писать код под Android и iOS.

Что как бы очень круто, потому что как я говорил в предыдущем треде - очень много общего в том, что не касается UI. У нас в компании используем КММ уже полтора года, начиная с лета 20 года. И сейчас немного расскажу об ощущениях как Team Lead вначале, а потом и как тех архитектор

Очень важно, чтобы в команде тебя хоть кто-то поддерживал. И меня поддерживал наш старший андроид разработчик - Слава Корниенко, за что я очень сильно хочу его поблагодарить. Так же в этом деле очень важна поддержка со стороны бизнеса и за это я хочу поблагодарить нашего продакта

Костя, если ты это читаешь, спасибо тебе огромное ) Мне была дана полная свобода действий. Но почему я так заинтересовался в КММ, ведь я уже довольно долго искал кроссплатформенное решение. Почти все решения отпали по производительности. Остался лишь Flutter, но он не подходил

На то было много причин. Первая и самая важная - это то, что нам нужно было бы переписать все приложение с нуля, а у нас уже была довольно мощная кодовая база и вот на это я точно не уговорил бы никого. Дальше, у нас был ряд разработчиков под Android и iOS. Что с ними делать?

Они, конечно, могли бы переучиться и на дарт, но не все бы захотели, да и это занимает довольно много времени. Вторая причина - это то, что Flutter имеет не нативный UI. Он лишь имитирует нативный, а мы хотели делать разный UI для Android и iOS. Вернее учитывать гайды платформ

Там еще были нюансы с тем что дарт сам по себе не очень приятный язык, да и за пределами флаттера не особо распространен, а зная Котлин ты можешь уйти в бэк, например. Поэтому я сразу же остановился на КММ и на полу конфы мобиус написал первые две апишки

Цель была выяснить фризится UI во время загрузки апи или нет. Как я выяснил не фризится, а остальное дело техники. Мы начали с создания именно библиотеки, потому что мы двигались очень медленно и осторожно. После двух апих мы очень долго ничего не делали. И на то были причины

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

Первым этапом. наши iOS разработчики собирали прям на компе эту библиотеку и подключали ее к проекту, короче это было довольно муторно, поэтому мы довольно быстро настроили CI/CD и теперь либа поставлялась в наш кокоа подс и оттуда уже забиралась iOS проектом.

Но тут начались другие проблемы ) Оказывается команда вообще была не готова к флоу работы с библиотекой. Все вот эти меры предосторожности типа deprecated, отсутствие breaking changes, корректное версионирование, snapshot версии - всего этого не было. Всему этому пришлось учиться

Следующим переломным моментом стала авторизация. Примерно 40-50% апих приложения требуют токен. Соответственно, нам пришлось работать с токеном и из платформы и из кмм, что тоже приводило к проблемам c очищающимся токеном или невалидным токеном (но мы их все отловили на тесте)

Дальше все пошло сильно проще, но тут сказалось, что kotlin не родной язык для iOS разработчиков и еще какое-то время мы потратили на устранение этого гэпа (и до сих пор тратим). Сейчас приложение уже на 90% работает с помощью кмм и до конца года я думаю оно станет уже 99%.

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

Блин твиттер поощряет не использовать пунктуацию Основной проблемой стало, что теперь мы должны объединить еще и бэклоги иначе это все просто не работает. И теперь фичу нужно делать целиком сразу же на андроид и на iOS. В остальном, переезд обошелся без проблем

Итоги. Плюсы: релизимся в один день, пишем в 2 раза меньше, меньше проблем с тестами, меньше проблем с изменениями, меньше проблем с разночтением ТЗ. Развитие инженерного подхода в команде тоже позитивно влияет на качество работ, а ну и краш рейт не поднялся. Тоже отлично

Минусы. Все было довольно сырое. Сейчас гораздо лучше. iOS разработчикам реально тяжело. Не бросайте их и все проговаривайте. Часто тяжело понять в чем ошибка, градл прям взрывает мозг. А со старой мемори моделью пришлось объяснять иосникам почему все на мейн треде и в классах

Но эт все мелочи жизни и мы с ними довольно быстро справились. И сейчас мы имеем вот такие красивые пул реквесты Пишите, если у вас есть вопросы или какие-то свои впечатления от КММ ) буду рад пообщаться
notion image

Алексей ГладковАлексей Гладков