Котлин имеет конструкцию expect/actual, в экспекте пишешь ожидаемый интерфейс, в actual - платформенную реализацию. Из-за того что компилятор гарантирует что actual на момент компиляции один среди платформенных модулей - из общего кода он выглядит как обычный класс.
Либо делаешь по старинке, интерфейс-реализация средствами платформы-прокидывание вовнутрь.
Сам котлин не имеет обширной абстракции над андройд/йос, все нужно либо самому писать либо из сторонних либ подключать. Недавно дали общий тип для времени, уже хорошо :)
На стороне андройда понятно как платформа подключается, а на стороне йос весело. Котлин мм умеет брать С и обжц интерфейсы и прокидывать их в себя. То есть на самом Котлине можно спокойно ходить в Foundation ios, да хоть в uikit. Это очень прикольная штука, но у нее есть местами проблемы - способы определения функций у котлина и обжц очень сильно отличаются, из-за чего иногда случается клэшинг имен. Это решаемая проблема, в целом, но может добавить боли.