Перейти к содержанию

Установка

Все модули опубликованы в Maven Central в группе ru.sulgik.mapkit.

Собрано против Yandex MapKit SDK 4.42.0-lite

Обёртка нацелена на сборку lite. Сам MapKit подключает ваш проект, поэтому используйте там ту же версию.

Модуль Зависимость Gradle Описание
Обёртка ru.sulgik.mapkit:yandex-mapkit-kmp:1.0.0-beta01 API MapKit в общем коде
Compose ru.sulgik.mapkit:yandex-mapkit-kmp-compose:1.0.0-beta01 Отрисовка карты через Compose Multiplatform и compose-resources как изображения карты
Moko ru.sulgik.mapkit:yandex-mapkit-kmp-moko:1.0.0-beta01 moko-resources как ImageProvider. Требует инициализации на платформе
Moko Compose ru.sulgik.mapkit:yandex-mapkit-kmp-moko-compose:1.0.0-beta01 То же в composable-контексте, без инициализации на платформе

Требования

  • Android — минимальный SDK 26.
  • iOSiosArm64 и iosSimulatorArm64. iosX64 убран, потому что Compose Multiplatform больше под него не публикуется.
  • Kotlin 2.4.10, Compose Multiplatform 1.11.1 для Compose-модулей.
  • API-ключ от Яндекса.

Подключение самого MapKit

MapKit не приходит транзитивно вместе с этими модулями — его подключаете вы, версией из таблицы выше.

Достаточно Gradle-зависимости; добавьте её в Android-исходники модуля, который линкует приложение.

kotlin {
    sourceSets {
        androidMain.dependencies {
            implementation("com.yandex.android:maps.mobile:4.42.0-lite")
        }
    }
}
kotlin {
    cocoapods {
        pod("YandexMapsMobile") {
            version = "4.42.0-lite"
        }
    }
}

Добавьте YandexMapsMobile в проект Xcode обычным способом и откройте его для Kotlin через interop с SPM.

На iOS линковка на вашей стороне

Klib не может нести в себе нативный фреймворк, поэтому проект, который сам не линкует Yandex MapKit SDK, падает на линковке, а не на компиляции.

Основной модуль

yandex-mapkit-kmp — это обёртка: собственный API MapKit, доступный из commonMain. Сам он ничего не рисует — как платформенный MapView попадает в общий код, описано в Обзоре обёртки.

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("ru.sulgik.mapkit:yandex-mapkit-kmp:1.0.0-beta01")
        }
    }
}

Compose Multiplatform

yandex-mapkit-kmp-compose рисует карту как composable и управляет объектами карты через отдельную композицию: YandexMap, Placemark, Polyline, Polygon, Circle, Clustering, MapObjectCollection, TileLayer, MapObjectLayer, TrafficLayer, MapListeners, CameraPositionState и MapEffect.

Обёртка уже внутри

Модуль зависит от yandex-mapkit-kmp как от api-зависимости, поэтому отдельное объявление нужно только чтобы явно зафиксировать версию.

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("ru.sulgik.mapkit:yandex-mapkit-kmp-compose:1.0.0-beta01")
        }
    }
}

moko-resources

yandex-mapkit-kmp-moko превращает изображения, сгенерированные moko-resources, в ImageProvider. Модуль добавляет MOKOImageLoader с платформенными реализациями AndroidMOKOImageLoader (нужен Context) и IOSMOKOImageLoader — их вы создаёте на стороне платформы и передаёте в общий код.

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("ru.sulgik.mapkit:yandex-mapkit-kmp-moko:1.0.0-beta01")
        }
    }
}

moko-resources в Compose

yandex-mapkit-kmp-moko-compose добавляет rememberMOKOImageLoader(), который сам собирает платформенную реализацию, так что передавать ничего не нужно.

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("ru.sulgik.mapkit:yandex-mapkit-kmp-moko-compose:1.0.0-beta01")
        }
    }
}

Оба moko-модуля описаны на странице Изображения.