MappaVita
一个 SwiftUI 旅行日记应用,把你去过的地方变成一张能翻的地图——自动定位记录、照片 GPS 导入、回忆与成就。
- 类型
- 其他
- 角色
- 独立开发
- Status
- 已归档
- Tech
- Swift SwiftUI MapKit Core Location PhotoKit Core Data Firebase Auth Cloud Firestore Firebase Storage MVVM
- Started
- 2025年4月
- Ended
- 2025年5月
概览
旅行很容易累积,却很难留住。一年之后那些地方就糊成一片,而本该唤起记忆的照片,埋在一个按日期而不是按地点排序的相册里。MappaVita 是一个 iOS 旅行日记,建立在相反的索引上:地图是主视图,照片、笔记、统计——所有东西都挂在”地点”下面。
主要功能
- 自动定位记录 —— 后台 Core Location 更新配合距离过滤,只有当你真的移动了才写入新的点。
- 照片 GPS 导入 —— 扫描相册中照片的 EXIF 位置信息,把这些地点落到地图上,同时妥善处理相当一部分根本没有 GPS 标签的图片。
- 手动添加地点 —— 自己补一个地方,配照片、日期和一段笔记;反向地理编码会根据坐标自动填好地名。
- 地图优先 —— 每个地点都是一个标注,并做了聚合,避免密集城市变成一堆互相遮挡的图钉。
- 回忆 —— 照片和日记挂在地点上,可以按时间线浏览。
- 统计与成就 —— 去过的国家数、最远距离、最常去的地方、连续旅行天数,以及由这些里程碑解锁的徽章。
- 分享与导出 —— 单个地点,或者整张世界地图的渲染快照,通过 iOS 分享面板发出去。
技术栈
- SwiftUI + MVVM —— 45 个 Swift 文件,分为视图、视图模型、数据模型,以及一小组核心管理器(定位、照片位置、认证、持久化)。
- MapKit —— 标注、自定义照片标注视图,以及处理密度的
MKClusterAnnotation。 - Core Data —— 地点、照片和回忆的本地存储,完全离线可用。
- Firebase —— Auth 负责账号,Firestore 和 Storage 负责同步与照片托管。
为什么归档
MappaVita 是一个课程项目,交付时附带书面报告和演示,学期结束它也就停在那里了。它能跑,核心循环——记录、回访、回忆——是通的;只是从没经历过上架前那一轮打磨:权限文案、同步的健壮性、边界情况。这个想法比这份代码活得更久一些——我现在依然觉得,按地点索引的日记比按日期索引的好。