Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

theBill · 分账本

一款 iOS 原生的多人分账 App。旅行、聚餐、合租——把一起花钱的人拉进一个账本,随手记账,最后一键算清谁该给谁转多少钱。

纯本地应用:SwiftUI + SwiftData,无后端、无账号,数据只存在你的设备上。

功能

  • 账本即书:首页是一个书架,每个账本是一本可自定义书签色的深色布面书。
  • 多货币记账:每笔账单可单独选货币(内置 30+ 常用货币),同一账本里人民币、日元、美元混记都没问题。
  • 灵活分摊:均分(零头按最大余数法自动分配,保证分毫不差)或精确金额。
  • 统一结算
    1. 账本创建时选定结算货币
    2. 结算前确认外币汇率——一键拉取实时汇率(免费接口,无需 key),或手动填写;
    3. 输出一份最简转账清单:谁 → 谁、多少钱,全部折算成结算货币,最多 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'

Roadmap

  • App 图标
  • 账单分类与搜索
  • CSV / 分享导出
  • iCloud 同步

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages