Machi iOS 是一个城市本地生活与同城社交客户端,功能覆盖信息流、发布、评论、点赞、收藏、关注、私信、通知、城市频道和话题。
技术结构
- SwiftUI 负责声明式界面和 NavigationStack 路由。
- SwiftData 负责本地持久化、版本化 Schema 和迁移恢复。
- Repository 层封装本地数据读写。
- Service 层处理认证、网络、同步、媒体缓存和地区目录。
- Keychain 保存登录 Token,避免凭据落入明文存储。
离线优先
App 可以离线浏览和起草内容,联网并登录后再由 RemoteSyncService 与统一后端对齐。这个设计让 iOS 不是一个单纯 Web API 壳,而是拥有本地韧性的原生客户端。
关键判断
我选择无第三方依赖,是为了让系统边界更清楚。SwiftUI、SwiftData、Foundation、Security 和 Network 已经足够支撑一个可运行、可维护的第一版。
为什么这个架构值得记录
Machi iOS 的复杂度来自真实产品场景:城市、语言、Feed、发布、互动、私信、通知、会员和设置都在同一个客户端里。离线优先不是简单缓存,而是让用户在不稳定网络下仍能继续动作。
我最在意的点
SwiftData 模型要能迁移,Repository 要隔离本地读写,Service 要让认证、网络、媒体和同步各自有边界,Keychain 要保护凭据。这样 App 才不是临时 Demo,而是能继续扩展。
产品层面的收获
原生客户端的价值不只是性能,而是本地韧性和系统级体验。