多年来,跨平台开发的技术方案层出不穷。早在很久以前,Java 就曾承诺“一次编写,到处运行”。但这个承诺至今仍未真正实现。
别误会,在移动开发领域确实有不少优秀技术在一定程度上兑现了这一承诺。
以 Flutter 为例。在我看来,这个框架比其他任何方案都更接近跨平台的理想状态。从技术层面说,Flutter 团队要为生态新增一个平台支持,本质上只需实现画布绘制能力——这确实让他们实现了“一次编写,到处运行”。但即便如此,这种方案也有明显缺陷:在不同平台运行的应用程序外观完全一致,导致在每个平台上都带有“异域感”。
而像 React Native 这类方案,则选择调用原生 UI 组件来营造“原生感”。遗憾的是,这同样存在问题:框架复杂度呈指数级增长,开发团队必须持续追赶原生平台的更新节奏——每当平台方调整原生 UI 组件,就可能破坏跨平台框架的兼容性。
现在业界迎来了新玩家。Kotlin 多平台(KMM)与 Compose 多平台(CM)的组合,试图在跨平台领域开辟前所未有的新路径(或许历史上曾有过类似尝试)。在此之前,使用跨平台框架只能做出“足够好”的应用程序;若想获得真正的“原生感”,就必须采用原生开发。而 KMM 的承诺是:你可以在主流平台(Android)获得原生应用体验,同时在另一主流平台(iOS)获得足够优秀的体验。
更重要的是,采用 KMM+CM 的风险远低于其他跨平台技术。如果 Flutter、ReactNative、Xamarin 等框架的维护者某天停止开发,你将陷入两难境地:要么重写两个原生应用,要么选择另一个存在不同缺陷的跨平台框架。而使用 KMM+CM 时,即使 JetBrains 决定终止这项跨平台实验,你的 Android 应用仍可持续维护(毕竟 Kotlin 是 Android 官方开发语言,Compose 是官方 UI 框架)。
你可以用 Kotlin 为 Android 应用编写界面和业务逻辑,轻松移植到 iOS 平台快速启动项目。当应用规模足够大时(如果你选择这样做),可以编写原生 iOS 界面,同时继续保持两个应用间的业务逻辑共享。
🚀 Compose Multiplatform for iOS 现状
自2025年5月发布的1.8.0版本起,Compose Multiplatform 对iOS的支持已达到稳定(Stable)状态。这意味着:
- API已稳定:核心API具有兼容性保证,适合用于正式项目。
- 生产就绪:许多团队已将其用于大型应用的生产环境。
- 性能达标:应用的启动时间、滚动性能已与原生应用相当,应用体积的增加也很小。
- 生态成熟:大量Jetpack库已支持多平台,并有丰富的社区库支持。
💡 技术特点与开发体验
- 统一的代码与知识:你可以将绝大部分Jetpack Compose的知识(如
@Composable、Modifier、状态管理)直接复用到iOS和其他平台。 - 原生体验:框架注重还原iOS的细节,如滚动物理效果、文本编辑、手势导航等,让应用在iOS上感觉更原生。
- 强大的互操作性:支持将Compose界面无缝嵌入现有的SwiftUI或UIKit应用中,也支持在Compose中使用原生iOS视图,便于渐进式采用。
- 高效的工具:支持在Android Studio/IntelliJ IDEA中进行Compose预览,并且提供了热重载(Hot Reload) 功能,可以即时查看UI改动效果。
📝 如何开始与项目选择建议
如果你已经熟悉Jetpack Compose,学习曲线会非常平缓。官方提供了便捷的项目创建向导(Kotlin Multiplatform Wizard)。
对于是否在项目中使用,你可以参考以下建议:
| 场景 | 推荐技术 | 说明 |
|---|---|---|
| 开发纯Android应用 | Jetpack Compose | 官方首选,生态最完善。 |
| 从零开发新应用,且需要覆盖Android和iOS | Compose Multiplatform | 可用一套UI代码覆盖双平台,尤其适合已有Compose经验的团队。 |
| 在现有iOS应用中尝试新功能 | Compose Multiplatform | 利用其互操作性,在部分模块或新功能中试点使用。 |
总而言之,如果你希望用Kotlin和声明式语法为iOS开发应用,Compose Multiplatform是目前一个成熟、可靠的选择。
如果你想进一步了解具体如何创建一个支持iOS的Compose Multiplatform项目,或者想了解它与Flutter、React Native等其他跨平台方案的主要区别,我可以为你详细解释。