Skip to content
Light25 edited this page Dec 27, 2025 · 3 revisions

Welcome to the iPurseLight wiki!

📝 技术博客:从零打造一款 AI 驱动的极简个人理财 App —— iPurseLight 开发复盘

作者: Light 分类: iOS 开发 / SwiftUI / SwiftData / AI

前言 市面上的记账软件要么功能臃肿,要么广告满天飞。作为一个开发者,我决定用 SwiftUI 和 SwiftData 手搓一款极简、纯净且“聪明”的个人理财 App —— iPurseLight。

本文记录了这款 App 从雏形到完善的开发全过程,涵盖了架构设计、AI 接入、复杂资产逻辑处理以及国际化适配等核心技术点。

第一阶段:架构重构与模块化

最初,所有的逻辑都堆在 ContentView 里。随着功能的增加,代码变得难以维护。 挑战:如何优雅地拆分视图和逻辑? 解决方案:我们将项目拆分为标准的 MV 模式: Models.swift:统一管理 BillItem(账单)和 AssetItem(资产)等 SwiftData 模型。 AIService.swift:独立的单例服务,负责与 DeepSeek/Gemini/OpenAI API 通信,处理 JSON 解析。 Views:将账单 (BillView)、资产 (AssetView)、分析 (AnalysisView) 和设置 (SettingsView) 拆分为独立文件。 这种拆分让后续的功能扩展变得非常轻松。

第二阶段:赋予 App “大脑” —— AI 智能记账

核心痛点:手动输入金额、分类、备注太繁琐。 实现:我们接入了 DeepSeek 和 Gemini 的 API。 功能:用户只需输入“刚才打车花了30元”,AI 自动提取 {amount: 30, category: "交通", type: "支出"}。

坑点修复: JSON 解析:Swift 对类型要求严格,我们编写了健壮的解析逻辑,处理 AI 可能返回的 Markdown 格式干扰。 API Key 格式:用户复制 Key 时常带入空格或换行,导致 Unsupported URL 报错。我们在代码层加入了 .trimmingCharacters 自动清洗逻辑。

第三阶段:打造“个人财富驾驶舱”

记账只是基础,资产增值才是目的。我们将“资产页面”进行了 Pro 级升级。 可视化:引入 SwiftCharts 绘制环形图,直观展示资产分布。 资产汇总(Portfolios):实现了类似“文件夹”的概念。用户可以将“招商银行”和“支付宝”打包成一个“流动资金”汇总,也可以单独建一个“私房钱”汇总。 自动复利计算:

这是一个“爽点”功能。我们在 AssetItem 中增加了 annualizedRate(年化率)字段。 利用计算属性 (Computed Property),根据 Date() 实时计算每一秒的利息。每天打开 App,都能看到资产在增加。 历史收益分离:区分“已产出收益”(落袋为安)和“动态利息”(正在产生),使账目逻辑更严谨。

第四阶段:细节打磨与体验升级

一个好的 App 必须关注细节。

输入体验优化:将金额字段改为 Double? (可选类型)。输入框默认显示灰色的 0.00 占位符,用户点击后直接输入数字,无需手动删除默认的 0。 国际化 (i18n):实现了 应用内语言切换(不依赖系统语言)。通过 LocalizationManager 和 UserDefaults,用户可以一键在“中文/英文”之间无缝切换。 深色模式适配:放弃硬编码的 .black/.white,全面拥抱 iOS 语义化颜色 .primary 和 .secondarySystemGroupedBackground,确保 App 在黑夜模式下依然精致清晰。

结语

iPurseLight 不仅仅是一个记账工具,更是一个结合了最新 iOS 技术栈(SwiftData + SwiftUI)与 AI 能力的实践范本。它证明了个人开发者也能利用 AI API 做出体验超群的产品。