Чтобы увидеть наш репозиторий с примером приложения, написанного с помощью KMM, перейдите по ссылке https://github.com/itmaginationdemos/KMM-Sample-App

Прежде чем мы перейдем к основной части статьи, мы хотели бы сначала объяснить нашу исходную позицию. Мы пришли к этому совершенно вслепую с минимальными предыдущими знаниями о KMM (Kotlin Multiplatform Mobile), и некоторые из проблем, которые мы получили, связаны с отсутствием опыта работы с фреймворком, поскольку он все еще свежий. Всего через некоторое время вы быстро освоитесь с инструментом.

Кстати, крупные компании уже осознали преимущества новой платформы, в том числе Philipps, Netflix и VMWare. Несмотря на некоторые трудности, KMM — феноменальный инструмент для кроссплатформенной мобильной разработки в крупных организациях.

Настраивать

  • MacOS Монтерей 12.5.1
  • Android Studio Electric Eel Canary 10 (но мы также пробовали Dolphin и Chipmunk)
  • XCode 14.0
  • Грейдл 7.2.2
  • Котлин 1.7.20-RC

Добро

Результаты поиска Google, когда вы вводите фразу учебник KMM, были официальными документами, и они очень полезны. Было бы полезно указать читателю, в какой файл Gradle мы должны поместить необходимый код, так как это не очевидно (все файлы называются одинаково). Это похоже на то, когда вы впервые начинаете изучать программирование для Android и Android Studio.

Отличный инструмент, упомянутый в руководстве на официальном сайте, — это KDoctor, который оказал огромную помощь в поиске любых возникающих проблем. Например, было много головной боли, когда плагин KMM был удален (по-видимому, без причины), который был диагностирован KDoctor за несколько секунд (хотя нам потребовалось несколько часов, чтобы обратиться за помощью к хорошему доктору).

Базовая установка Коина была потрясающей. Это было ясно и лаконично. Все встало на свои места за считанные минуты после открытия документов. Если вам нужно какое-либо дополнительное объяснение, есть пример кода для Android и iOS. Возникла небольшая проблема, но об этом в следующем разделе.

Плохо

Начинать новый проект очень тяжело. Вы должны усвоить много новых концепций. Нас также засыпают множеством ненужных папок/подмножеств. Возможно, первые минуты могут отпугнуть новичков.

Вернемся к Коину. Как мы уже упоминали, базовая настройка была мечтой, но с одной небольшой проблемой — общий код между Android и iOS на случай, если конструкторы по какой-либо причине различаются. Чтобы быть более точным, при создании экземпляра базы данных SQLDelight нам приходилось вручную создавать каждый из экземпляров (не большая проблема, но ее можно добавить в документы).

Чтобы создать приложение для iOS, вам понадобится XCode. По какой-то причине в 2022 году у нас была ограниченная пропускная способность на стороне Apple, из-за чего загрузка занимала 5 часов (для справки, загрузка Android Studio занимает от 1 до 2 минут). В любом случае, как и в 90-х, начинайте загрузку перед сном.

Уродливый

Мы поговорили с некоторыми людьми, которые также пробовали KMM, и у некоторых были эти проблемы, у некоторых были другие, а у некоторых их не было. Наш опыт, описанный ниже, может не совпадать с вашим.

К сожалению, у нас было довольно много проблем с Gradle, Android Studio, Kotlin и самим плагином KMM, и трудно точно определить, в чем проблема. С момента первого запуска туториала и до момента написания этой статьи у нас были изменены версии всех из них (они меняются регулярно).

Мы даже пробовали Android Studio Chipmunk, Dolphin и Electric Eel, из которых последний оказался наиболее стабильным (что странно).

Кроме того, как мы уже упоминали, в какой-то момент плагин KMM просто удалили, чего мы сначала даже не заметили, пока не позвонили в KDoctor. Оглядываясь назад, это могло быть самой большой проблемой здесь. Без него выскакивало много странных ошибок и ложных срабатываний. Например, у нас была куча ошибок в общем коде iOS и Android, но код скомпилировался корректно.

Также были некоторые досадные проблемы с пустыми наборами исходников, когда они интерпретировались как модули. Это вызывало проблемы при использовании ключевого слова expect (подробнее об этом здесь), когда IDE (Integrated Development Editors) была уверена, что у нас отсутствуют реализации.

Не уверен, что это связано с KMM как таковым, но с навигацией Compose также были некоторые проблемы. Несмотря на то, что мы правильно следовали инструкциям, нам не удалось импортировать NavHostController. После некоторого поиска мы нашли несколько советов по очистке кешей Gradle и сбросу путей классов Java. С помощью Invalidating caches и перезагрузки через 40 минут импорт заработал. Это было не весело.

Почетные упоминания

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

Мы начали с ошибки новичка, доверившись документации Google. Проблема, с которой мы столкнулись, заключалась в записи на внешнее хранилище. Сделать это стало очень сложно в последних версиях Android, и документация была не слишком полезной. Авторы документации нацелены на Android API 28, в котором большинство этих проблем исключено.

Кроме того, нам нужно было получить разрешение пользователей на запись голосовых сообщений, и мы начали делать это по-старому (до Compose). Решение можно было бы значительно улучшить, но оно было грязным, и нам это не нравилось. Итак, мы погуглили что-то получше. Введите Accompanist, набор инструментов, которые будут использоваться с Compose. Здесь нам очень помогает Google. Там есть куча полезных функций, но мы просто использовали часть разрешения, которая имеет дело с голосовым разрешением в трех строках кода.

Что мы узнали

Разработчики

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

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

Менеджеры

Возможно, у нас было более предвзятое отношение к небольшим командам или даже к отдельным лицам, поскольку некоторые из перечисленных проблем не возникают в больших командах. Когда у вас есть команда из 10 или более разработчиков, потратить несколько дней на настройку всего не так уж и сложно. Кроме того, основное преимущество повторного использования кода хорошо проявляется в больших командах и больших кодовых базах (больше кода в общем модуле означает, что меньше кода дублируется на разных платформах).

Недавно мы писали на тему повторного использования кода в больших приложениях, которые вы можете проверить здесь. Суть в том, что если у вас сложный продукт, у вас, вероятно, много сложного кода и доменных правил. Эти вещи должны быть написаны два раза (Android и iOS), что означает в два раза больше ошибок, в два раза больше стоимости и, вероятно, не на 100% совпадение по функциональности.

Наконец, в отличие от других мультиплатформенных решений, с KMM по своей конструкции вы никоим образом не затрагиваете часть пользовательского интерфейса вашего приложения. Пользовательский интерфейс на 100% зависит от платформы, и поэтому он будет иметь подлинное ощущение нативного приложения. С другой стороны, вам нужно будет нанять дополнительных разработчиков, имеющих опыт написания нативных интерфейсов iOS.

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

Первоначально опубликовано на https://www.itmagination.com.