Привет! На связи IceRock Development, команда из Новосибирска.


Хотим поделиться полезным опытом. Вот уже 2 года мы занимаемся разработкой на Kotlin Multiplatform. В 2018 году начали реализовывать свои проекты и сразу сделали несколько открытий. В том числе выяснили, что мультиплатформенная технология значительно экономит силы и время.




Мы еще раз убедились в ее эффективности на KotlinConf 2019, которая проходила в Копенгагене. Это самое масштабное событие в мире программистов на Kotlin. Они собираются, чтобы провести воркшопы, обменяться опытом и просто приятно провести время в кругу единомышленников.



Да, многолюдненько. Потому что и сообщество программистов объединяет несколько десятков стран. Фото с официального сайта JetBrains


JetBrains, организаторы конференции и создатели языка Kotlin, предложили нам проект. На конференции представляли новую версию языка. Она позволяет писать код в том числе под смарт-часы Apple. Чтобы продемонстрировать эту возможность, мы должны были создать приложение под три платформы: iOS, Android и WatchOS.


Квест во имя Kotlin: что получилось сделать для конференции


Во время подготовки к KotlinConf мы вместе с JetBrains работали над Kotlin Locator/Finder. Это игра-квест, где нужно было побегать по Bella Center. К слову, это второй по величине конференц-центр в Скандинавии, который специально арендовали для KotlinConf 2019 в Копенгагене! Здесь собрались 1700 разработчиков со всего мира.


Суть такая: скачиваешь приложение и с помощью подсказок начинаешь искать «волшебные точки», которые помечены iBeacon-метками. В этих точках можно узнать интересные подробности про Kotlin: историю языка, новые инструменты. Точку обнаружить не так-то просто: она появляется, только если приближаешься к ней на определенное расстояние.


Чтобы пройти игру, нужно найти 6 маячков в разных местах.



Таким получился интерфейс Kotlin Locator/Finder на iOS для смартфона


JetBrains создали сервер-приложение с несколькими запросами на базе Kotlin Spinner Game. Нам позвонили, рассказали про идею. Арт-лид стал колдовать над дизайном, а технический директор со специалистом занялись «начинкой» приложения.


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



Так выглядит интерфейс Kotlin Locator/Finder приложения для смарт-часов


Все протестировали. В самом конце подключился Android-программист, реализовал только UI для Android. И — вуаля! — приложение готово.


Делимся наработками:



В процессе у нас получилось:


  • первый раз использовать Kotlin/Native на WatchOS с версией компилятора 1.3.60 — всё прошло отлично!
  • отладить взаимодействие из общего kotlin кода с iBeacon-метками. Мы работали с библиотекой Reedyuk/blue-falcon. Библиотеку в итоге форкнули себе и доработали.

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


Итог: можно сказать, удалось все, что запланировали. Заодно потестили новую версию Kotlin Multiplatform и убедились, что на ней действительно можно писать приложение под часы.

Само приложение скачали несколько сотен раз в Play Market и в App Store. Для локального мероприятия очень даже себе показатель. До финала квеста дошли 20 человек. Победителей JetBrains отметили призами.



Только посмотрите на эти лица! Да, слегка смущенно выглядят ребята



Еще бы! Потому что на них смотрят самые крутые Kotlin-разработчики мира!

Сэкономили время и затраты на команду: что нам дала мультиплатформенная технология


Над приложением фулл-тайм работал — барабанная дробь! — только iOS-разработчик. Остальные: дизайнер, Android-программист и тестировщик — трудились на неполную ставку. И сделали полностью нативное приложение!


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


С Kotlin и скорость разработки стала значительно выше. Мы использовали moko-network и по openapi-спецификации сгенерировали весь код по работе сервером для двух платформ. Также весь код логики: логику самой игры, работу с данными, локальное хранение и пр. — написали один раз на Kotlin. Ничего не пришлось дублировать.


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


Код Kotlin Multiplatform очень похож на Swift. У приложения Kotlin Locator/Finder на iOS и Android общая бизнес-логика: за поведение на обеих платформах отвечает один кусок кода. Это дает одинаковую детализацию и стабильность работы. Соответственно, и комфорт для пользователя.



Приложение на iOS



Приложение на Android


При работе на Kotlin Multiplatform мы сэкономили ресурсы, значит, в конечном итоге смогли бы сделать приложение дешевле для клиентов. И гораздо быстрее вывести его на рынок.


Что может дать Kotlin Multiplatform любому бизнесу


Совместное с JetBrains приложение мы делали скорее как имиджевый проект. Но разработка — тоже бизнес. Мы побывали в роли своих же клиентов: точно так же тратили ресурсы и ждали результата, как обычно делают при заказе приложения для коммерческих целей. Поэтому в том, как эффективно Kotlin Multiplatform помогает решить бизнес-задачи, убедились на личном опыте.


Резюмируем кратко:


Быстрый выход на рынок. Все этапы разработки, проверки и тестирования проходят почти в 1,5 раза быстрее, чем при создании нативных приложений отдельно на iOS и Android. Хотя все зависит от сложности UI. Так что ускорить разработку в среднем можно на 20–50%.


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


Если проект сложнее, одному спецу нужно написать общий код и бизнес-логику. Разработчику другой платформы не придется делать двойную работу. Останется подключить приложение к общей библиотеке и добавить UI.


Полностью нативное приложение. То есть адаптированное под конкретную платформу. Удобное как для разработчика, так и для пользователя.


Совместимость с другими языками программирования. Если у вас есть приложение, в которое вы хотите интегрировать Kotlin Multiplatform, его не придется полностью переписывать. Язык похож на Swift и совместим с Java.


Сейчас мы в IceRock Development ведем большинство проектов с помощью этой технологии. 2019 год мы в компании объявили годом Kotlin Multiplatform.


Стараемся внести свой вклад и в развитие международного Kotlin-сообщества. Подскажем пару полезностей:



Если есть вопросы, напишите нам на mpp@icerock.dev. Рады любой обратной связи!