---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.5
alternate:
  - https://divkit.tech/docs/en/quickstart/KMP.md
  - https://divkit.tech/docs/ru/quickstart/KMP.md
  - href: ru/quickstart/KMP.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://divkit.tech/docs/ru/llms.txt

# Kotlin Multiplatform (KMP)

DivKit предоставляет библиотеку для использования в приложениях Kotlin Multiplatform для платформ iOS и Android. Библиотека опубликована в Maven Central в группе `com.yandex.divkit.multiplatform` и версионируется в соответствии с версиями основной библиотеки DivKit.

## Использование

### 1) Зависимость Gradle

Добавьте библиотеку как зависимость вашего общего модуля:

```kotlin
kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("com.yandex.divkit.multiplatform:divkit-multiplatform:<divkit-version>")
        }
    }
}
```

### 2) iOS: добавьте CocoaPod `DivKitKMP`

Реализация для iOS использует небольшой связующий модуль `DivKitKMP` для корректной линковки Obj-C символов. Модуль предоставляет класс `DivKitKMPView`, который автоматически обрабатывает размеры view и обновляет layout. Добавьте его в `Podfile` вашего iOS проекта и выполните `pod install` из папки iOS проекта:

```ruby
platform :ios, '13.0'
use_frameworks!

target 'YourApp' do
  pod 'DivKitKMP'

  # Other pods if needed
end
```

### 3) Рендеринг дивной карточки в мультиплатформенном Kotlin

Вы можете создать область видимости DivKit, используя функцию `DivKit`, и передать в нее общие `DivKitDependencies` из общего кода. Внутри этой области видимости вы можете вызвать функцию `DivView` для рендеринга JSON и вызвать `setVariables` для установки переменных в глобальное хранилище.

В общем коде:

```kotlin
DivKit(dependencies) {
    var greeting by variable(name = "greeting", value = "Hello, Username")
    Column(
        modifier = Modifier.padding(WindowInsets.safeDrawing.asPaddingValues()),
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        DivView(
            cardId = "Sample",
            jsonData = jsonString,
            modifier = Modifier.wrapContentSize()
        )
        Button(
            onClick = {
                greeting = "Hello, DivKit User"
            },
            content = {
                Text("Say \"Hello\"")
            }
        )
    }
}
```

Также вы можете настроить некоторые платформо-специфичные зависимости в платформо-специфичном коде. Например:

В Android-части:

```kotlin
val environment = DivKitEnvironment.Builder(baseContext = this)
    .imageLoaderFactory { ctx -> PicassoDivImageLoader(ctx) }
    .lifecycleOwner(this)
    .build()

setContent {
    inject(environment) {
        MainScreen()
    }
}
```

В iOS-части метод `makeDivView` возвращает `DivKitKMPView`, который автоматически обрабатывает:
- `intrinsicContentSize` и `sizeThatFits` для корректного определения размеров
- Обновление layout при изменении bounds
- Вызов `onVisibleBoundsChanged` при изменении видимой области

<!-- source: ru/_includes/index/troubleshooting.md -->
## Узнать больше {#troubleshooting}

Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: [https://t.me/divkit_community_ru](https://t.me/divkit_community_ru).



[Репозиторий DivKit](https://github.com/divkit/divkit)




<!-- endsource: ru/_includes/index/troubleshooting.md -->
