MoneyMate是一个基本的收支跟踪器,一个专注于简单性的预算管理器。该应用程序帮助用户记录他们的日常交易,并每天、每周和每月查看他们的财务数据。由于出色的动画,添加交易非常快速和有趣。
该应用程序专注于隐私。它使用iCloud将数据安全地存储在 Apple 服务器中,并使用系统 (iOS/iPadOS) 提供的 Keychain、Face ID 和 Touch ID 等技术提供安全访问。与许多其他金融应用程序不同,该应用程序不需要创建帐户。用户“帐户”是已登录设备的 Apple ID。
主要特征
- 新:将交易导出为 .CSV 或 .JSON。
- 新增:针对 iOS 15 和 16(Swift UI 3.0)更新了源代码。
- 支持 iOS 14 小部件:Financial Insights。
- 支持 iOS 13 深色模式。
- 直观且易于使用的界面。
- 对交易进行分类并使用主题标签对其进行标记。
- 基本分析。
- 按名称、备注或主题标签有效搜索交易。
- 系统货币和区域设置支持。
- iCloud 同步支持。
- 以隐私为中心。
- 动态类型可访问性支持。
- 屏幕锁定(钥匙串密码 + Touch ID + Face ID)。
- 应用程序图标快捷方式。
未来的功能
路线图:
- macOS 和 iPadOS 支持 (WIP)。
- 使用 CoreVision 的收据阅读器。
- 更好的分析和月度报告。
- 将图像、位置、丰富的链接等添加到交易中以获得更详细的信息。
实施细节
- 代码:该应用程序已有 6 年历史,使用Swift实现。使用的 IDE 是Xcode。
- 架构:遵循 Reactive MVVM 架构,其中每个屏幕都有自己的视图模型,与模型和视图分离。
- 数据库:最初,数据使用Realm存储在本地,但由于我们想要启用 iCloud 同步,我们决定升级整个应用程序并使用支持CloudKit的CoreData。
- 数据库模型:
- 类别(有名称、图标和颜色)
- 事务(只能分配给一个类别,但可以处理多个文章和多个标签)
- 文章(即:交易X是亚马逊购买,那么文章就是买的东西
SSD disk 512GB
:) - 标记(即
#vacations2020
:)
- 本地化:包括英语和葡萄牙语,该项目准备接收其他翻译。
- 界面: UI 的某些部分使用 SwiftUI 实现,其他部分使用 Interface Builder 实现。
- 依赖项:
- 斯威夫特包:
- SwiftDate(用于操作每个过滤器的日期间隔,即基于设备时区的当前周)
- STRegex(易于使用的正则表达式解析器,用于在 中存储自定义日期间隔
UserDefaults
) - PremierKit(一堆可重用的系统助手)
- SwiftyAttributes(一个方便的
NSAttributedString
助手) - Dodo(用于显示错误信息)
- QuickActions(用于设置应用程序图标快捷方式以创建交易)
- WSLogger(用于记录具有严重级别的消息,即调试、信息、警告、错误)
- WSPopup(用于显示弹出窗口,以灵活的方式向屏幕显示视图)
- 斯威夫特包:
- 测试套件:该项目包括业务逻辑和核心功能的单元测试和集成测试。
技术栈
- Swift 5.7
- SwiftUI 3.0
- Minimum deployment target is iOS 15
- iCloud
- CoreData
- Keychain
- Widgets
- Siri Intent Extension
要求
- Apple 开发者帐户。
- SwiftGen v6.0 或更高版本。
- Xcode 14+
- iOS 15+
入门
- 重命名
your.domain.Money
以使用您的域。(即:)com.razybits.Money
:
Money.xcodeproj/project.pbxproj
Money/CloudKit/CloudKit.swift
Money/Constants.swift
Money/Info.plist
Money/Money.entitlements
MoneyIntentExtension/MoneyIntentExtension.entitlements
MoneyWidgets/MoneyWidgetsExtension.entitlements
Money/Screen Lock/SecurePasscodeStore.swift
- 安装SwiftGen并运行
swiftgen
. - 打开
Money.xcodeproj
文件。 - 设置 Apple Developer 帐户,根据您的喜好更改签名和权利。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。