Einrichtung und Projekt
Kotlin Multiplatform
- Kotlin Multiplatform (KMP): Kotlin-Code für mehrere Plattformen, z. B. Android und iOS
- Compose Multiplatform (CMP): Compose-UI für alle Plattformen, basiert auf Jetpack Compose
- von JetBrains, offiziell von Google unterstützt
Ursprünglich war KMP dafür gedacht, Geschäftslogik zwischen Plattformen zu teilen. Mit Compose Multiplatform lässt sich auch die UI teilen, also eine komplette App. Fast alles aus dem Android-Teil gilt hier weiter. Damit ist KMP eine Alternative zu Flutter und React Native: eine Codebasis für Android und iOS, aber in Kotlin und mit den Werkzeugen der Android-Entwicklung.
Setup in Android Studio
- Willkommensbildschirm → Plugins → „Kotlin Multiplatform“ installieren
- Nur macOS: Xcode installieren und einmal starten
Stand Oktober 2026 (Android Studio Rabbit, 2026.2.1). Die Schritte ändern sich regelmäßig, im Zweifel gilt die offizielle Anleitung .
Xcode muss auch nach jedem Update einmal gestartet werden, sonst klappt der iOS-Build nicht. Bei Problemen mit der Umgebung hilft das Fenster Preflight Checks (zweimal Shift drücken, „preflight“ suchen).
Das Plugin läuft auch unter Windows und Linux. iOS-Apps lassen sich aber nur auf macOS bauen und starten.
Projekt erstellen
New Project → links Generic → Kotlin Multiplatform:
- Name:
WeatherKMPTIF24(ergibt das Paketcom.example.weatherkmptif24) - Build system: Gradle
- Android und iOS, UI: Share UI (Compose Multiplatform)
- Desktop, Web, Server und Tests abwählen
„Server“ meint ein eigenes Backend mit Ktor. Das brauchen wir nicht, die Wetterdaten kommen von Open-Meteo.
Projektstruktur
| Ordner | Inhalt |
|---|---|
shared/src/commonMain | gemeinsamer Code: UI, ViewModel, Daten (App.kt) |
shared/src/androidMain, iosMain | Code nur für eine Plattform |
androidApp | nur MainActivity, zeigt App() |
iosApp | Xcode-Projekt, zeigt App() über MainViewController() |
Fast der ganze Code liegt in shared/src/commonMain. Die beiden
App-Module sind nur Einstiegspunkte: MainActivity ruft App() auf,
unter iOS ruft ContentView.swift die Funktion MainViewController()
aus iosMain auf, die ebenfalls App() anzeigt.
Wie in der Android-App stehen Versionen und Bibliotheken in
gradle/libs.versions.toml. ViewModel und Lifecycle sind schon
eingebunden (org.jetbrains.androidx.lifecycle). Ein eigenes Theme
gibt es nicht, App() verwendet direkt MaterialTheme.
App starten
- Im Run-Widget die Konfiguration für Android bzw. iOS wählen und starten
- Für iOS einen Simulator wählen, kein echtes iPhone
Ein echtes iPhone braucht zusätzlich eine Apple-ID zum Signieren der App.
Der erste iOS-Build lädt einmalig die Werkzeuge für Kotlin/Native herunter und dauert entsprechend lange. Am besten vor der Vorlesung einmal bauen.
Ohne Mac lässt sich nur die Android-App starten. Der gemeinsame Code
in commonMain ist trotzdem derselbe.