一款 iOS 原生的多人分账 App。旅行、聚餐、合租——把一起花钱的人拉进一个账本,随手记账,最后一键算清谁该给谁转多少钱。
纯本地应用:SwiftUI + SwiftData,无后端、无账号,数据只存在你的设备上。
- 账本即书:首页是一个书架,每个账本是一本可自定义书签色的深色布面书。
- 多货币记账:每笔账单可单独选货币(内置 30+ 常用货币),同一账本里人民币、日元、美元混记都没问题。
- 灵活分摊:均分(零头按最大余数法自动分配,保证分毫不差)或精确金额。
- 统一结算:
- 账本创建时选定结算货币;
- 结算前确认外币汇率——一键拉取实时汇率(免费接口,无需 key),或手动填写;
- 输出一份最简转账清单:谁 → 谁、多少钱,全部折算成结算货币,最多 n−1 笔转账。
- 精确的钱:所有金额运算基于
Decimal与整数最小货币单位(分),从不使用浮点数,份额之和恒等于总额。 - 暗色 "ledger noir" 设计:近黑画布 + 点阵纹理、衬线体数字、奶白墨色,唯一的彩色是应付款的暗红。
- UI:SwiftUI(iOS 26 SDK),自定义主题与组件
- 数据:SwiftData(本地持久化,
Ledger / Member / Expense / ExpenseSplit四个模型) - 测试:Swift Testing(
@Test),覆盖金额解析、分摊算法、结算算法与内存态 SwiftData 集成测试
TheBill/
├── TheBillApp.swift # 入口,全局导航栏外观
├── Models/ # SwiftData 模型、货币目录、Decimal 金额工具
├── Logic/
│ ├── SplitCalculator.swift # 分摊:最大余数法,份额恒等于总额
│ ├── BalanceCalculator.swift # 每种货币的净额 + 贪心最少转账
│ ├── SettlementCalculator.swift # 按汇率折算成结算货币的统一方案
│ └── RateService.swift # 实时汇率(open.er-api.com)
├── Components/ # 主题、书封、头像等复用组件
└── Views/ # 书架、账本、记账、结算等页面
TheBillTests/ # 单元测试
需要 Xcode 26+。
xcodebuild -project TheBill.xcodeproj -scheme TheBill \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro' build运行测试:
xcodebuild test -project TheBill.xcodeproj -scheme TheBill \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro'- App 图标
- 账单分类与搜索
- CSV / 分享导出
- iCloud 同步