2026 年 9 月 30 日,移动地图测绘开源项目 StreetComplete 在 Apple TestFlight 上架了它的首个 iOS 公测试用版本 v64.0.0。对长期依靠 Android 手机在街头修路面、测盲道、填门牌号的制图志愿者来说,这是个等了数年的节点;但更值得探究的,是这个纯用 Kotlin 写出来的老牌项目,如何用一种近乎偏执的方案跨过苹果的生态高墙。
它没有顺从目前移动跨平台开发最省事的路径。团队没有用 Flutter 把底层逻辑用 Dart 语言重写一遍,而是把身家性命押在还在打磨期的 Kotlin Multiplatform 与 Compose Multiplatform 上。换句话说,他们试图用一套代码,同时吃下 Android 和 iOS 的原生渲染。
弃用成熟解法,一场单代码库的豪赌
在开源世界里,把一个成熟的 Android 独占应用搬到 iOS,通常意味着推倒重来。同类应用 Every Door 选择了 Flutter,那意味着所有业务逻辑都要用 Dart 重新编写。
StreetComplete 选择了硬碰硬。它的基础代码库是纯粹的 100% Kotlin,主开发者不愿维护两套逻辑完全分裂的代码分支,最终定下的方案是把数据层和业务状态剥离,底层直接复用 Kotlin Multiplatform,UI 层则从传统的 Android XML 布局,一路迁移到 Jetpack Compose,再平移进 Compose Multiplatform。这个技术决策的诱人之处在于,后续维护成本不会翻倍,任何新功能只需要写一次。
但为这份优雅买单的,是漫长的适配代价与粗糙的边缘体验。官方最初保守估算整个移植工程需要 1 个人年 的工作量,实际日历耗时却横跨了数年。首个公测版本 v64.0.0 对应着 Android 端的 v64.0-alpha2,在工程现实面前露出了不少毛刺:早期构建在 iOS 15 上一度无法渲染地图底图,虽然后续通过修补解决,但受制于 TestFlight 分发机制,目前实测设备门槛依然被拦在 iOS 16 以上。
当前的交互逻辑也带着明显的跨平台移植痕迹。当用户点开一个任务表单时,无法直接通过点击地图空白处来取消输入,必须依赖 iOS 的边缘返回手势;在表单开启状态下,你也无法直接点选下一个要素进行无缝切换。跨平台工具在纸面上承诺的抹平差异,落到手指尖的滑动与回弹时,依然需要极其繁复的手工调校。
从德国教研部到欧盟基金:开源理想的账本
如果只看技术方案,这似乎又是一次纯粹由极客驱动的代码长征。但现实中,没有商业公司赞助的独立开源项目,几乎不可能单靠业余热情跨过这道工期鸿沟。
StreetComplete 能够走出 Android 的温室,核心支撑是一套精巧的公共资金接力机制。项目在 2023 年底立项重构后,于 2024 年 3 月至 8 月拿到了德国联邦教研部旗下 Prototype Fund 第 15 期 的资助。正是这笔资金,让主开发者得以在半年的时间里全职投入,把数据逻辑与 UI 框架拆分,完成了大约 50% 的跨平台迁移和原型验证。
半年补贴用尽之后,单靠社区零星捐赠显然撑不起剩余的研发。到了 2025 年 4 月,接力棒交到了欧盟 NLnet 基金会旗下的 NGI0 Commons Fund 手中。正是这笔公共基金注入,才让团队有预算把 Compose Multiplatform 在 iOS 上的边角料补齐,甚至顺手把兼容 Linux 平台的目标塞进了路线图。
这种由公共财政托底开源基础设施的做法,在欧洲并不罕见。它证明了一件事:当一个工具具有公共数据属性时,它不需要靠广告和订阅制抽成存活,但也同样无法指望商业风投的垂青。它能走多快,完全取决于公共拨款的审批节奏。
游戏化问答,重划苹果端地图贡献边界
在过去很长一段时间里,要在 iOS 设备上给 OpenStreetMap 提交数据,只有两条路可走。
第一条路是 Go Map!!。这款老牌应用在 App Store 上拿下了 4.8 的高分,功能硬核且完整,允许用户直接拖拽节点、修改多边形几何结构、自由添加各种未经标准化的标签。但陡峭的学习曲线把绝大多数普通用户挡在了门外。另一条路是 Every Door,它虽然兼顾了商户信息和部分微测绘,但需要在不同编辑模式之间频繁切换,仍然带有强烈的专业工具属性。
StreetComplete 解决问题的思路完全相反。它不是一个绘图软件,而是一个把数据采集变成答题闯关的微测绘机器。
它坚决不支持绘制任何几何线条,也不允许用户随便输入自定义标签。地图上浮现出来的,永远是一个个极其具象、答案高度受限的闭环卡片:这条路是柏油路还是石子路?这栋楼有几层?人行道有没有轮椅坡道?路口有没有红绿灯盲人过街音响?
限制自由度,才是普通人参与精密协作的前提。
资深测绘者或许会嫌弃它的死板,但对庞大的步行爱好者来说,这种机制把严肃的地理信息录入降维成了散步时的即兴打卡。从上游专业制图到下游数据补全,StreetComplete 与 Go Map!! 从来不是零和竞争,而是把那些原本绝不可能打开专业编辑器的人,拉进了生产现场。
- 结论.Compose Multiplatform 终于拿出了一个经得起工业级复杂度检验的移动案例,但在手势深度融合与老版本兼容性上,非官方技术栈向 iOS 渗透的边际成本依旧高昂。
- 风险.目前公测版尚未确定正式上架 App Store 的时间表,苹果对跨平台引擎以及审核指南中关于交互规范的微小变动,随时可能让非原生项目付出额外的整改周期。
公测包只是第一步,它证明了单一代码库在工程上可行,但距离像原生应用那样丝滑融入 iOS 还有一段路要走。工欲善其事,必先利其器;对苦于没有低门槛工具的 iOS 用户而言,这张散步时的答题卡,总算真正握到了手里。
