Compose Multiplatform vs Flutter
Jetpack Compose Multiplatform (disponible en GA sur iOS depuis 2024) face à Flutter — comparaison de frameworks UI multiplateformes. Kotlin vs Dart, écosystème, parité iOS.
Une seule base de code UI en Kotlin pour Android + iOS + Desktop + Web
Le framework UI natif et déclaratif d'Apple — le langage commun de toute la famille de plateformes
Si vous avez une solide équipe Android/Kotlin et voulez vous ouvrir à iOS au coût le plus bas, Compose Multiplatform est logique : la cible iOS est Stable depuis mai 2025. Mais dans un produit où iOS est la vitrine et où vous devez utiliser dès le jour zéro des nouveautés comme Liquid Glass (iOS 26+), difficile de surpasser SwiftUI — même la documentation officielle recommande une coquille SwiftUI native pour ce langage visuel. Côté taille, contre les ~9 Mo officiels, un cas indépendant unique a rapporté un écart allant jusqu'à 12 fois ; mesurez votre prototype sur un appareil réel.
| Catégorie | Compose Multiplatform | SwiftUI |
|---|---|---|
| Performance | 7/10 | 9/10 |
| Facilité d'apprentissage | 6/10 | 7/10 |
| Écosystème | 6/10 | 9/10 |
| Communauté | 6/10 | 9/10 |
| Marché de l'emploi | 5/10 | 9/10 |
| Pérennité | 7/10 | 9/10 |
// Compose Multiplatform - commonMain : carte de profil partagée
// (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) "Ne plus suivre" else "Suivre")
}
}
}
// iosMain : exposer la vue CMP comme UIViewController
fun MainViewController() = ComposeUIViewController { ProfileCard(user = sampleUser) }// SwiftUI - carte de profil
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 ? "Ne plus suivre" : "Suivre") {
withAnimation(.spring(response: 0.3)) {
isFollowing.toggle()
}
}
.buttonStyle(.bordered)
}
.padding()
}
}
#Preview {
ProfileCard(user: .sample)
}Si vous avez une solide équipe Android/Kotlin et voulez vous ouvrir à iOS au coût le plus bas, Compose Multiplatform est logique : la cible iOS est Stable depuis mai 2025. Mais dans un produit où iOS est la vitrine et où vous devez utiliser dès le jour zéro des nouveautés comme Liquid Glass (iOS 26+), difficile de surpasser SwiftUI — même la documentation officielle recommande une coquille SwiftUI native pour ce langage visuel. Côté taille, contre les ~9 Mo officiels, un cas indépendant unique a rapporté un écart allant jusqu'à 12 fois ; mesurez votre prototype sur un appareil réel.
Obtenir une consultation gratuiteOui — JetBrains a officiellement déclaré la cible iOS Stable et production-ready en mai 2025 avec CMP 1.8.0 ; la navigation type-safe, le support VoiceOver de premier ordre et l'interopérabilité SwiftUI/UIKit ont été achevés. Mais « prêt » ne signifie pas le bon choix pour chaque projet : un cas indépendant publié le 2 août 2026 rapporte des compromis sérieux sur la taille et la sensation native dans une application CMP en production (expérience d'un seul développeur). Ne décidez pas sans faire votre propre mesure.