Compose Multiplatform vs Flutter
Jetpack Compose Multiplatform (iOS-GA seit 2024) vs Flutter — plattformübergreifende UI-Frameworks. Kotlin vs Dart, Ökosystem, iOS-Parität.
Eine einzige UI-Codebasis in Kotlin für Android + iOS + Desktop + Web
Apples natives, deklaratives UI-Framework — die gemeinsame Sprache der gesamten Plattformfamilie
Wenn du ein starkes Android/Kotlin-Team hast und mit möglichst geringem Zusatzaufwand auf iOS expandieren willst, ist Compose Multiplatform sinnvoll: Das iOS-Target ist seit Mai 2025 Stable. Aber in einem Produkt, bei dem iOS das Schaufenster ist und Neuerungen wie Liquid Glass (iOS 26+) ab Tag 0 genutzt werden müssen, ist SwiftUI kaum zu schlagen — sogar die offizielle Dokumentation empfiehlt dafür eine native SwiftUI-Hülle. Bei der Größe stehen offizielle ~9 MB einem in einem unabhängigen Einzelfall gemeldeten 12-fachen Unterschied gegenüber; miss dein eigenes Prototyp auf einem echten Gerät.
| Kategorie | Compose Multiplatform | SwiftUI |
|---|---|---|
| Performance | 7/10 | 9/10 |
| Erlernbarkeit | 6/10 | 7/10 |
| Ökosystem | 6/10 | 9/10 |
| Community | 6/10 | 9/10 |
| Arbeitsmarkt | 5/10 | 9/10 |
| Zukunftssicherheit | 7/10 | 9/10 |
// Compose Multiplatform - commonMain: geteilte Profilkarte
// (build.gradle.kts: kotlin { androidTarget(); iosArm64(); iosSimulatorArm64() })
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.*
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
@Composable
fun ProfileCard(user: User, modifier: Modifier = Modifier) {
var isFollowing by remember { mutableStateOf(false) }
Row(
modifier = modifier.fillMaxWidth().padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
AsyncImage(
model = user.avatarUrl,
contentDescription = user.name,
modifier = Modifier.size(64.dp).clip(CircleShape)
)
Spacer(Modifier.width(12.dp))
Column(modifier = Modifier.weight(1f)) {
Text(user.name, style = MaterialTheme.typography.titleMedium)
Text(user.title, style = MaterialTheme.typography.bodySmall)
}
OutlinedButton(onClick = { isFollowing = !isFollowing }) {
Text(if (isFollowing) "Nicht mehr folgen" else "Folgen")
}
}
}
// iosMain: CMP-View als UIViewController exportieren
fun MainViewController() = ComposeUIViewController { ProfileCard(user = sampleUser) }// SwiftUI - Profilkarte
import SwiftUI
struct ProfileCard: View {
let user: User
@State private var isFollowing = false
var body: some View {
HStack(spacing: 12) {
AsyncImage(url: user.avatarURL) { image in
image.resizable().scaledToFill()
} placeholder: {
ProgressView()
}
.frame(width: 64, height: 64)
.clipShape(Circle())
VStack(alignment: .leading) {
Text(user.name)
.font(.headline)
Text(user.title)
.font(.subheadline)
.foregroundStyle(.secondary)
}
Spacer()
Button(isFollowing ? "Nicht mehr folgen" : "Folgen") {
withAnimation(.spring(response: 0.3)) {
isFollowing.toggle()
}
}
.buttonStyle(.bordered)
}
.padding()
}
}
#Preview {
ProfileCard(user: .sample)
}Wenn du ein starkes Android/Kotlin-Team hast und mit möglichst geringem Zusatzaufwand auf iOS expandieren willst, ist Compose Multiplatform sinnvoll: Das iOS-Target ist seit Mai 2025 Stable. Aber in einem Produkt, bei dem iOS das Schaufenster ist und Neuerungen wie Liquid Glass (iOS 26+) ab Tag 0 genutzt werden müssen, ist SwiftUI kaum zu schlagen — sogar die offizielle Dokumentation empfiehlt dafür eine native SwiftUI-Hülle. Bei der Größe stehen offizielle ~9 MB einem in einem unabhängigen Einzelfall gemeldeten 12-fachen Unterschied gegenüber; miss dein eigenes Prototyp auf einem echten Gerät.
Kostenlose Beratung erhaltenJa — JetBrains hat im Mai 2025 mit CMP 1.8.0 das iOS-Target offiziell als Stable und produktionsreif erklärt; typsichere Navigation, erstklassige VoiceOver-Unterstützung und SwiftUI/UIKit-Interop wurden abgeschlossen. Aber „bereit“ bedeutet nicht für jedes Projekt die richtige Wahl: Ein am 2. August 2026 veröffentlichter, unabhängiger Erfahrungsbericht eines Entwicklers berichtet bei einer produktiven CMP-App von erheblichen Kompromissen bei Größe und nativem Gefühl (Erfahrung eines einzelnen Entwicklers). Triff die Entscheidung nicht ohne eigene Messung.