Cashback Counter 是一款基于 SwiftUI 和 SwiftData 构建的现代 iOS 记账应用。它不仅能记录日常消费,最核心的功能是智能计算信用卡返现。通过集成 Apple Intelligence 和 Vision 框架,它实现了"拍一拍"自动识别小票、自动选卡、自动计算最优返现金额,帮助用户最大化利用信用卡权益。
当前 App Store 版本 2.4.1。下方标注「🚧 开发中」的功能已完成开发,将随下一个版本发布。
- 📸 智能拍一笔 (AI-Powered Entry)
- 自定义相机:集成 AVFoundation 实现无缝拍照体验。
- AI 识别:利用 Apple Foundation Models (端侧大模型) 深度分析收据,自动提取商户、金额、日期。
- 智能分类:根据商户名自动推断消费类别(餐饮、出行、数码等)。
- 自动选卡:通过识别收据上的卡号后四位,自动匹配并选中对应的信用卡。
- 云端增强:可选启用 Apple Private Cloud Compute 提升识别准确率,数据端到端加密,Apple 与开发者均无法读取;云端不可用时自动回退端侧模型。
- 💳 卡片管理 (Card Management)
- 支持添加自定义信用卡,设置复杂的返现规则(如:餐饮 5%,超市 3%,境外 3%)。
- 模版库:内置常见香港银行(信银国际,汇丰香港/美国,工银亚洲等)模版,一键添加。
- 多维规则:支持基于消费类别 (Category)、消费地区 (Region) 和消费方式的混合计算逻辑。
- 返现上限:支持按月/按年的上限统计,双币卡可选「并入本币上限」或「独立外币上限」两种模式。
- 🏦 银行自动同步 (Bank Sync) 🚧 开发中
- 通过 Plaid 绑定美国的信用卡与活期/储蓄账户,交易自动导入并交给现有费率引擎计算返现与积分。
- 自动匹配卡片:按账户尾号匹配卡包里的卡;同尾号多张时由用户确认。
- 智能去重:按「卡+日期+金额」做数量对齐,同一天同店的两笔相同金额不会被误判为重复。
- 退款自动抵销:退款会冲掉对应的原始消费,返现与上限用量跟着回冲;还款和转账不会被误判成退款。
- 新交易通知:银行有新交易时推送提醒(银行级,不含金额与商户)。
- 🌍 多币种支持 (Multi-Currency)
- 支持全球主流货币(CNY, USD, HKD, JPY 等)。
- 实时汇率:集成 Frankfurter API,自动将外币消费换算为本币(CNY)进行统计。
- 入账金额:支持记录消费原币金额与实际入账金额(解决银行汇率差问题)。
- 📊 统计与导出
- 账单分析、支出趋势、按卡的消费与返现汇总。
- 收入单:匹配部分支出以计算实际利润。
- 支持导出每月/每年消费为 CSV。
- 🌐 多语言:简体中文、繁體中文、English。
手动记账的数据完全不离开你的设备 —— 仅保存在本地或你自己的 iCloud(基于 SwiftData),不上传、不收集。
启用「银行自动同步」后会引入一个自建后端,这部分需要说清楚:
- 交易数据不在服务器留存。 后端每次向 Plaid 现取现回,响应发出后即不存在;服务器上没有任何交易流水的副本。
- 拿不到完整卡号。 Plaid 的任何产品都不提供卡号(属于 PCI DSS 管辖范围),App 能看到的最详细信息是账户尾号。
- 银行凭据加密存储。 Plaid 的 access_token 以 AES-256-GCM 加密入库,密钥不在数据库、也不在代码里。
- 可随时退出。 解绑银行会先在 Plaid 侧撤销授权再删除本地记录;删除账号会一并解绑所有银行并撤销 Apple 登录授权。已导入的交易记录会保留在你的设备上。
不启用银行同步的话,App 不会与任何自建服务器通信。
| 客户端 | SwiftUI · SwiftData(+CloudKit) · Foundation Models · Vision · StoreKit 2 · AuthenticationServices |
| 银行数据 | Plaid(仅美国) |
| 后端 🚧 | Spring Boot · PostgreSQL · 部署于 Azure App Service |
| 账号 | Sign in with Apple |
已完成
- ☑️ 导出每月/年消费量为 csv
- ☑️ 生成针对每张卡的消费和返现表格
- ☑️ 类原生 Apple Pay 界面
- ☑️ 允许生成收入单,匹配部分支出,计算利润
- ☑️ 货币类型支持更多国家
- ☑️ 完善多币种信用卡的返现规则
- ☑️ 统计信用卡返现上限
- ☑️ 上架 TestFlight / App Store
- ☑️ 多语言(简中/繁中/英文)
进行中 / 计划中
- 🚧 银行账户自动同步(Plaid,仅美国)
- ⬜️ 支持更多国家和地区的银行
- ⬜️ 区分卡组织(Visa / Mastercard / AmEx 等)
- 没有区分卡组织
- 不确定在大量数据下系统稳定性如何
- 银行同步仅支持美国的金融机构(Plaid 不覆盖中国大陆、香港等地)
- 同步进来的交易固定按「美国」计算消费地费率
- 通过第三方钱包(如 AlipayHK、PayPal)的支付会被归类为「其他消费」,因为银行数据无法反映真实的消费品类
- 本人是第一次用 swift 开发,vibe coding 都使用的是 Gemini 和 Claude,如果有 bug 欢迎提 pr
- App 已上架 App Store,可放心使用;但仍建议在大版本更新前,先在设置页导出一份数据备份