Kotlin Multiplatform Mobile — шта је то, кључни појмови и архитектура KMM

Аутор: IT Sectr Објављено: 2026-05-02 Време читања: 9 мин

Kotlin Multiplatform Mobile (KMM) — технологија од JetBrains-а за коришћење заједничког кода у Kotlin-у у апликацијама за iOS и Android уз очување изворног корисничког интерфејса на свакој платформи. За разлику од хибридних оквира, KMM не користи WebView и не рендерује интерфејс кроз апстракције — пословна логика се пише једном, а кориснички интерфејс остаје потпуно изворан. Према подацима JetBrains, 2025, KMM користи преко 40 хиљада тимова широм света. expect/actual — кључни механизам Kotlin-а који омогућава декларисање платформски зависних API-ја у заједничком коду.

Главно

  • KMM — технологија JetBrains-а за дељење пословне логике између iOS и Android у Kotlin-у
  • expect/actual — механизам декларисања платформских API-ја у заједничком модулу са имплементацијом за сваку платформу
  • Изворни UI — интерфејс се пише одвојено у SwiftUI и Jetpack Compose, без WebView-а
  • Shared модул — садржи моделе података, мрежне захтеве, валидацију и пословна правила
  • Ktor и Kotlinx — библиотеке JetBrains-а за мрежну комуникацију и серијализацију у заједничком коду

Шта је Kotlin Multiplatform Mobile?

Kotlin Multiplatform Mobile (KMM) — технологија која омогућава писање заједничке пословне логике мобилне апликације у Kotlin-у и њено коришћење на iOS и Android без дуплирања кода. За разлику од Ionic или Cordova, KMM не рендерује интерфејс у WebView-у — UI остаје потпуно изворан и пише се у SwiftUI (iOS) и Jetpack Compose (Android).

KMM је најавио JetBrains 2019. године као део стратегије Kotlin Multiplatform. Кључна разлика у односу на друга вишеплатформска решења — оквир не покушава да унификује UI, већ се фокусира на дељење управо оног кода који је заиста исти за обе платформе: мрежних захтева, модела података, валидације форми, пословних правила и рада са базама података.

Према JetBrains Developer Survey (2025), KMM користи 14% мобилних програмера, а овај показатељ расте за 5% годишње. Технологију бирају компаније са високим захтевима за перформансама и изворним корисничким искуством, за које хибридна решења нису прихватљива.

Архитектура KMM: shared модул и платформске имплементације

Архитектура KMM се састоји од три модула: shared (заједнички код у Kotlin-у), iosApp (изворна iOS апликација у Swift-у) и androidApp (изворна Android апликација у Kotlin-у). Shared модул се компајлира у JAR за Android и у универзални оквир (Apple Framework) за iOS.

Shared модул: шта се износи у заједнички код

У shared модул улазе сви слојеви независни од платформе: мрежни слој на Ktor Client-у, модели података са серијализацијом кроз kotlinx.serialization, репозиторијуми за управљање подацима, валидација форми и пословна правила (на пример, израчунавање цене доставе или провера права приступа).

Shared модул користи Gradle Multiplatform Plugin и садржи три скупа изворног кода: commonMain (заједнички код), androidMain (имплементације специфичне за Android) и iosMain (имплементације специфичне за iOS). Компајлер Kotlin/Native претвара заједнички код у изворну библиотеку за iOS, која се повезује са Swift пројектом путем XCFramework-а.

Платформски модули

Android модул — стандардна Android апликација у Kotlin-у са Jetpack Compose или ViewBinding-ом. Shared модул се повезује као обична Gradle зависност, а све класе из commonMain-а су директно доступне.

iOS модул — Xcode пројекат у Swift-у или Objective-C-у. Shared модул се повезује путем CocoaPods-а, Swift Package Manager-а или XCFramework-а. Kotlin/Native генерише Objective-C заглавља за извоз Kotlin типова, чинећи их доступним из Swift-а.

Механизам expect/actual у KMM

expect/actual — механизам Kotlin Multiplatform-а који омогућава декларисање API-ја у заједничком коду (expect declaration) и пружање његове имплементације одвојено за сваку платформу (actual declaration). Компајлер надгледа да actual постоји за сваку циљну платформу.

Типични сценарији коришћења expect/actual: добијање тренутног времена са уважавањем временске зоне, рад са SharedPreferences (Android) / UserDefaults (iOS), криптографске функције и генерисање UUID-а. На свакој платформи се користи сопствени системски API.

Без expect/actual било би немогуће имати јединствени код пословне логике, јер се API-ји за рад са датотечним системом, мрежом и складиштем разликују између iOS и Android на нивоу системских позива. Механизам гарантује да програмер неће заборавити да имплементира платформски део.

За платформске позиве, попут рада са камером или биометријом, KMM нуди библиотеку expect/actual у комбинацији са додацима сличним Cordova-и, али у Kotlin/Native-у. JetBrains је такође објавио библиотеку kotlinx-datetime, која апстрахује рад са датумима.

Примери кода у KMM

Размотримо основну структуру KMM пројекта са декларацијом expect функције за генерисање UUID-а и њеном имплементацијом за iOS и Android.

kotlin
// commonMain — заједничка декларација
expect fun generateUUID(): String

// androidMain — имплементација за Android
actual fun generateUUID(): String {
    return java.util.UUID.randomUUID().toString()
}

// iosMain — имплементација за iOS
actual fun generateUUID(): String {
    return platform.Foundation.NSUUID().UUIDString
}

У заједничком коду се декларише expect fun generateUUID(). За Android се користи java.util.UUID, за iOS — NSUUID из Foundation оквира. У осталом коду shared модула ова функција се позива без обзира на платформу.

Пример мрежног захтева коришћењем Ktor Client-а у заједничком коду:

kotlin
import io.ktor.client.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class User(
    val id: Int,
    val name: String
)

class UserRepository {
    private val client = HttpClient()

    suspend fun getUser(id: Int): User {
        val response: HttpStatement =
            client.get("https://api.example.com/users/$id")
        return Json.decodeFromString(response.bodyAsText())
    }
}

Овај код ради на обе платформе без измена. Ktor Client користи OkHttp под Android-ом и NSURLSession под iOS-ом аутоматски, без додатне конфигурације. JSON серијализација кроз kotlinx.serialization је такође вишеплатформска.

Поређење KMM са Flutter и React Native

KMM заузима јединствену позицију међу вишеплатформским технологијама, јер не покушава да замени изворни UI за разлику од Flutter-а и React Native-а. KMM — решење за дељење логике, а не за унификацију интерфејса.

КритеријумKMMFlutterReact Native
UIИзворан (SwiftUI / Jetpack Compose)Сопствени погон (Skia)JavaScript → изворне компоненте
ЈезикKotlin (shared) + Swift / Kotlin (UI)DartJavaScript / TypeScript
ПерформансеМаксималне (изворни UI)Високе (сопствени рендеринг)Средње (мост JS-Native)
Дељење кодаПословна логика (40–70%)UI + логика (80–95%)UI + логика (70–90%)
Праг уласкаВисок (два језика)Средњи (један језик)Низак (веб програмери)

Главна предност KMM-а — потпуна контрола над UI-јем. Ако апликација треба да изгледа и понаша се изворно на свакој платформи (на пример, да користи iOS TabBar и Android BottomNavigation са платформским анимацијама), KMM је једино вишеплатформско решење које то обезбеђује без заобилазних решења.

Недостатак — тим мора да зна Kotlin, Swift, Jetpack Compose и SwiftUI истовремено, што отежава запошљавање. Flutter и React Native захтевају знање једног језика и једног оквира.

Предности и изазови увођења KMM

Kotlin Multiplatform Mobile — моћна технологија, али њено увођење захтева уравнотежен приступ. Размотримо кључне предности и типичне изазове са којима се суочавају тимови.

Предности KMM

Прва и главна предност — смањење дуплирања кода. Према JetBrains Case Studies (2024), тимови који су увели KMM смањују обим дуплираног кода за 60–80% за мрежни слој и за 40–50% за пословну логику у целини. То директно утиче на брзину развоја и број грешака.

Друга предност — перформансе на нивоу изворних апликација. За разлику од хибридних оквира, KMM не додаје слојеве апстракције између UI-ја и система. Код пословне логике се извршава једнако брзо као да је написан у Swift-у или Kotlin-у за сваку платформу посебно.

Изазови увођења

Главни изазов — квалификација тима. Програмери морају да знају Kotlin (за shared модул), као и Swift и Jetpack Compose (за UI). Проналажење универзалног стручњака је тешко, па се обично формира тим од Android и iOS програмера који заједно воде shared модул.

Други изазов — алати. KMM захтева подешавање Gradle-а, CocoaPods-а или Swift Package Manager-а, као и интеграцију са Xcode-ом. У раним фазама пројекта чести су проблеми са конфигурацијом компајлирања, посебно при раду са C библиотекама.

Трећи изазов — отклањање грешака. Када се грешка појави на споју Kotlin/Native-а и Swift-а, одређивање њеног узрока је теже него у монолитној апликацији. JetBrains стално побољшава алате за отклањање грешака, али у пракси тимови морају да издвајају до 20% времена на инфраструктурне задатке.

Често постављана питања

Може ли се KMM користити за iOS без Android-а?

Да, KMM подржава iOS као једину циљну платформу. Shared модул се компајлира у iOS оквир који се повезује са Swift пројектом путем XCFramework-а. Android модул се не мора креирати. Ово је корисно за тимове који желе да користе Kotlin за пословну логику iOS апликације.

По чему се KMM разликује од Kotlin/Native?

Kotlin/Native — компајлер који преводи Kotlin код у изворни бинарни фајл без виртуелне машине. KMM користи Kotlin/Native за компајлирање shared модула за iOS. За Android KMM користи стандардни Kotlin/JVM компајлер. Kotlin/Native — технолошки темељ KMM-а.

Како KMM ради са базама података?

За рад са локалним базама података у KMM-у се користи SQLDelight — вишеплатформска библиотека која генерише Kotlin код из SQL упита. Под Android-ом ради преко Android SQLite API-ја, под iOS-ом преко Native SQLite (CFNetwork). Алтернатива — Realm Kotlin SDK од MongoDB-а.

Да ли KMM подржава UI компоненте?

KMM подразумевано не укључује UI компоненте — UI се пише одвојено у SwiftUI и Jetpack Compose. Међутим, постоје библиотеке попут Compose Multiplatform (од JetBrains-а) које омогућавају рендеровање UI-ја у Kotlin-у директно на iOS и Android без изворних оквира.

Које компаније користе KMM у продукцији?

KMM користе велике компаније: Netflix (дељење логике препорука), McDonald's (мобилна апликација), VMWare (корпоративне апликације) и Leroy Merlin (апликација за грађевински материјал). Листа расте, јер JetBrains активно инвестира у развој екосистема.

Резиме

  • KMM — технологија JetBrains-а за дељење пословне логике између iOS и Android у Kotlin-у са изворним UI
  • Архитектура укључује shared модул и платформске имплементације кроз expect/actual
  • Shared модул садржи мрежну комуникацију (Ktor), моделе (kotlinx.serialization) и пословна правила
  • expect/actual — кључни механизам за платформски зависне имплементације у заједничком коду
  • Перформансе на нивоу изворних апликација, јер UI не користи апстракције
  • Изазови укључују високе захтеве за квалификацијом тима и подешавање инфраструктуре компајлирања
  • Избор KMM-а је оправдан за пројекте где су изворно UX и висок проценат дељења логике критични

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође