iOS 净资产快照 App 开发记录:不记流水,只拍快照
背景:记账 App 用了三年,我还是不知道自己有多少钱
上个月发工资那天,我打开某记账 App,翻了半天流水,想搞清楚一个简单的问题——"我现在净资产到底多少?"结果发现:银行卡余额要手动翻银行 App,基金账户在另一个平台,还有一张港卡按什么汇率算?信用卡负债又该怎么扣?
流水记得再细,也回答不了"我这个月比上个月多了还是少了"这个问题。
这就是做「财照」的起点。它不记流水,每月只做一件事:给你的所有账户拍一张净资产快照。像体重秤一样,每月站上去称一次,趋势自然就出来了。
定位和目标用户
财照面向的是手上有 3-8 个账户(储蓄卡、信用卡、证券、公积金、海外账户等)的年轻上班族或自由职业者。这类人不需要精细到每笔咖啡钱的流水,但需要一个月度维度的资产全景。
核心功能三块:
多账户多币种快照 — 支持人民币、美元、港币、日元等主流币种,汇率自动换算到基准币种,录入一次大概 2 分钟。
AI 对话月报 — 内置 LLM,拍完快照后可以用自然语言问:"这个月净资产变化主要靠什么?""我的负债率健康吗?"它会基于你的历史快照数据给出分析。
财务目标热力图 — 设定一个年度目标(比如"年底净资产到 50w"),热力图按月展示进度,贡献度分析会告诉你哪个账户在拖后腿。
一个具体的踩坑:多币种快照的汇率时间点问题
做汇率换算听起来简单,调个 API 就行。但实际跑起来遇到一个问题:用户可能周六录入快照,而外汇市场周末休市,API 返回的是周五收盘价。如果用户下周一再补录另一个账户,汇率又变了,同一张快照里出现两个汇率基准,净资产计算就会有偏差。
最终的处理方式是把汇率锚定到快照创建时刻,而不是每条记录的录入时刻:
struct Snapshot {
let id: UUID
let createdAt: Date
let baseCurrency: Currency
let exchangeRates: [Currency: Decimal] // 快照创建时一次性拉取并冻结
var accounts: [AccountEntry]
var netWorth: Decimal {
accounts.reduce(Decimal.zero) { sum, entry in
let rate = exchangeRates[entry.currency] ?? 1
return sum + entry.balance * rate
}
}
}
快照创建的瞬间,把当时所有币种对基准货币的汇率全部拉下来冻结。之后无论用户分几次录入账户,都用同一套汇率计算。这样每张快照的净资产数字在时间维度上是可比的,趋势图才有意义。
AI 月报的 Prompt 设计思路
LLM 对话这块,没有用通用的"你是一个财务顾问"之类的 system prompt。实际做法是把用户最近 6 张快照的结构化数据(账户名、金额、变化百分比)拼成一段上下文,然后让模型只基于这些数据回答。这样做有两个好处:一是回答有据可查不会瞎编,二是用户的原始余额数字不需要传到云端(本地拼接 prompt,只把脱敏后的变化比例发给 API)。
效果上,问"我哪个账户增长最快"或者"负债占比是否偏高"都能得到比较具体的回复,不是那种泛泛的理财建议。
使用节奏
财照设计的使用频率就是每月一次。月初会推一条本地通知提醒你"该拍快照了",录入完成后看一眼趋势图和 AI 月报,整个过程 5 分钟以内。不会让你每天打开,也不需要。
这个节奏对我自己来说刚刚好。从去年 10 月开始用内测版本,到现在 8 张快照,能非常清楚地看到哪几个月净资产在涨、涨在哪里,哪个月因为交了一笔大额保费导致下降。这种月度粒度的感知,比盯着每日流水有用得多。
写在最后
财照现在已经上架 App Store,搜索「财照」或「NetSnap」可以找到。如果你也觉得记流水太累、但又想对自己的资产状况有个清晰的月度感知,可以试试这种"快照式"的思路。
有任何技术实现上的问题或者产品建议,欢迎留言交流。

浙公网安备 33010602011771号