Kotlin Multiplatform / Удобное взаимодействие с Kotlin из Swift. Часть первая: обзор проблем и решений

Удобное взаимодействие с Kotlin из Swift. Часть первая: обзор проблем и решений

В июле этого года наш технический директор Алексей Михайлов выступил на конференции мобильных разработчиков Mobius. Мы преобразовали это выступление в статью и опубликовали первую часть.

Если вы iOS-разработчик и работали с KMM, вы могли столкнуться с ограничениями в разработке. В статье Алексей подробно разбирает все причины этих ограничений и предлагает решения.

✅ В чем основная проблема взаимодействия Kotlin и Swift?

После компиляции мы получаем не Swift API, а Objective-C API. После чего уже сам Swift взаимодействует с фреймворками Objective-C. Из-за этого получается, что мы ограничены тем синтаксисом, который поддерживает Objective-C.

✅ Из этого вытекают следующие ограничения:

  • в Swift нет sealed-классов и интерфейсов;
  • Kotlin/Native не умеет объявлять Objective C extension;
  • синтаксис Objective C не поддерживает generic-протоколы и -функции;
  • в Swift нет вариантности у generic;
  • в Swift, как и в Objective C, нет абстрактных классов;
  • в Objective C нет дефолтных аргументов.

✅ Но, несмотря на эти ограничения, есть несколько вариантов, как улучшить взаимодействие. Вот что нашел Алексей:

  • Sourcery — Swift-инструмент, который, на первый взгляд, никак с мультиплатформой напрямую не связан;
  • компиляторные плагины Kotlin — самый частый ответ на вопросы кодогенерации в последнее время;
  • Gradle-плагины — решение, которым мы пользуемся, хоть и оно не идеально.

В полной версии статьи мы подробно рассмотрели ограничения и решения проблемы.

Читать на Хабре.

А через некоторое время мы выложим вторую часть статьи, где расскажем о преимуществах и недостатках использования Gradle-плагинов. Это отдельная большая тема.

Делитесь этой статьей с iOS-разработчиками, которые хотят разобраться в КММ.

И подписывайтесь на наш телеграм-канал, чтобы не пропустить вторую часть статьи.