这个应用的代码库 100% 使用 Kotlin 编写,这是一种与 Swift 颇为相似的现代编程语言。与 Swift 一样,Kotlin 代码既可以被转译为 JavaScript,也可以被编译为机器码。此外,如今本应用的许多依赖都已经是纯 Kotlin 库。
因此,本应用的 iOS 版本可以借助 Kotlin Multiplatform 来实现。
UI 代码可以通过 Compose Multiplatform 共享,其 iOS 支持目前处于 alpha beta 阶段。它是 Jetpack Compose 的一个分支/扩展,API 大体相同。Jetpack Compose 是一个响应式 UI 框架,开发者完全通过代码来定义 UI(与 SwiftUI、Flutter 等的思路类似)。不过,我们需要用 Compose(渐进式地)重建整个 UI。
这将使依赖特定平台(Android / iOS)的代码量保持在最低水平。
与其他方案相比,这种做法的一大优势在于:本项目后续的维护成本不会显著增加,因为始终只有一个代码库。与使用 Flutter 框架做多平台(如 Every Door 所采用的方式)相比,它让我们基本上无需改动 Kotlin 代码库;而如果用 Flutter,就得用 Dart 把全部代码重写一遍。
将所有平台相关代码与应用逻辑分离。用 Kotlin multiplatform 依赖替换应用逻辑中对 Android/Java 的依赖。
将 UI 代码逐步迁移到 Compose Multiplatform:
将数据访问与 UI 状态代码从纯 UI 代码中分离出来(使用 view models:Use ViewModels #5070)

将目前使用 Android XML 布局的 UI 代码迁移到 Android Jetpack Compose。只要自底向上进行,这一步可以渐进完成(参见迁移策略指南)
然后,再从 Jetpack Compose 迁移到 Compose Multiplatform。与第一步相比,这只是很小的一步。
*本节将 ……
具体所需的步骤已在看板式的 Project Board 中详细列出。(有些任务尚未创建,因为它们 100% 依赖其他任务先完成,以及一些调研工作)。除非另有说明,这些任务明确欢迎阅读本文并(我希望 😊)愿意为 iOS 移植开发做出贡献的人认领。如果你想实现其中描述的某个任务,请在相应的工单下留言评论。