只给自己用的 iPhone 提醒 App:按事件逐条列出,不按日历组织。
- SwiftUI + SwiftData,iOS 18+,全部本地存储,不依赖服务器
- 工程由 XcodeGen 从
project.yml生成,.xcodeproj不进版本库
| 项目 | 规则 |
|---|---|
| 常年提醒 | 不设日期。固定显示在列表顶部,可手动排序,不发通知 |
| 待买 | 固定在常年分组第一行,没有物品时也显示,行上显示需要买的件数。点进去是物品列表,每件可以有文字、图片、链接 |
| 普通物品 | 左划标记已买,移到"已买"列表(待买页底部入口)。已买的可以恢复,也可以一键清空(永久删除) |
| 循环物品 | 状态分为"需要买"和"以后检查"。左划只切换状态,不会变成已买。"以后检查"的灰色排在最下面 |
| 批量添加 | 每行一项,添加为普通物品。和待买列表里已有物品重名时,可以选择跳过或重复添加;重名的是"以后检查"的循环物品时,也可以选择把它改回需要买。单个添加时同样检查重名 |
| 日期 | 可以精确到分钟,也可以只设日期。计算提醒时只看日期部分 |
| 提醒区间 | 每条可单独设置,默认"提前 1 天"。从到期前 N 天起,每天在设定时刻(默认 9:00)汇总发一条通知 |
| 过期 | 显示在"已过期"分组,之后每天继续提醒,直到标记完成 |
| 角标 | 已进入提醒区间且未过期的事项数,不含常年和已过期事项 |
| 重复 | 每天、每周、每月、每年,可设间隔。完成后生成一条历史记录,原事项顺延到下一次 |
| 地址 | 用 Google 地图打开:装了 App 就打开 App,没装就打开网页版 |
| 链接、电话 | 链接用系统默认浏览器打开,电话号码点击即可拨打 |
| 图片 | 支持拍照和从相册多选。压缩到长边 2048 像素后存在 App 目录,会随 iPhone 备份一起备份 |
| 长按菜单 | 列表中长按某条提醒:完成或恢复、推迟一天、推迟一周、复制文字、删除 |
| 备份 | 在设置里导出成一个 JSON 文件(图片内嵌),可以存到"文件"或 iCloud Drive。恢复时可选"合并"或"替换全部" |
| Siri | 说"用瘦子提醒记一下"(或"瘦子提醒添加待办"等),Siri 问"要提醒什么?",回答"明天下午2点去洗车"即可。自动识别日期时间,没说日期的进常年提醒 |
- 日期:今天、明天、后天、大后天、今晚、明早、3天后、2周后、周五、这周三、下周一、10月20号、2027年1月5日、15号
- 时间:上午10点、下午2点半、晚上8点一刻、14:30。只说"2点"且没说上午下午时,1~5 点按下午算
- 只说时间没说日期:今天还没过就是今天,已过就是明天
- 触发语都要带 App 名,这是 iOS 的限制;直接说"添加待办"会交给系统自带的"提醒事项"
- 第一次装好后,可能要先打开一次 App,Siri 才能认出这些触发语。Siri 的语言要设成中文(普通话)
- 从 App Store 安装最新版 Xcode。手机是 iOS 27,Xcode 需要 27 或更高。
- 安装 XcodeGen 并生成工程:
brew install xcodegen xcodegen generate open Reminder.xcodeproj
- 在 Xcode 中打开 Settings → Accounts,登录你的 Apple ID。
- 选中 Reminder target,进入 Signing & Capabilities,Team 选择"(你的名字) (Personal Team)"。
为了避免每次生成工程后都要重选,可以把 Team ID 填进
project.yml的DEVELOPMENT_TEAM。 - 用数据线连接 iPhone。在手机上打开 设置 → 隐私与安全性 → 开发者模式,开启后手机会重启。
- 在 Xcode 中选择你的 iPhone 作为运行目标,然后点 ▶︎ 运行。
- 第一次运行时,手机上要信任开发者:设置 → 通用 → VPN 与设备管理 → 选择你的 Apple ID → 信任。
免费账号的签名 7 天后过期,过期后 App 无法打开。重新连接手机并在 Xcode 里运行一次即可。 这是覆盖安装,数据不会丢。注意:不要先删除 App 再重装,删除会清空数据。 另外,bundle ID
com.songthin.reminder在 Apple 账号下必须唯一。如果签名提示被占用,在project.yml里换一个。
每次 push 都会在 macOS runner 上生成工程并编译,用来检查代码能否编译通过。
产物是未签名的 Reminder-unsigned.ipa,在 Actions 页面下载。
这个 ipa 不能直接安装,需要用 Sideloadly 或 AltStore 加上你的 Apple ID 签名后再装,同样 7 天有效。
Reminder/
App/ 入口、AppDelegate(前台通知)、RootView(回到前台时刷新)、AppModel(共用数据库)
Intents/ Siri 添加提醒(AddReminderIntent、触发语)
Models/ Reminder(待买物品也是 Reminder,用 isShopping 区分)、Attachment(SwiftData,兼容 CloudKit)、Recurrence
Services/ BackupService(导出/恢复备份)
ShoppingActions(待买:已买、循环状态、批量添加、查重)
NotificationScheduler(每日汇总通知、角标)
ReminderActions(完成、恢复、删除,以及保存后重建通知)
AttachmentStore(图片文件)
ContentDetector / MapOpener(链接、地址识别)
SpokenDateParser(从口语里识别日期时间)
DueFormat、AppSettings
Views/ 列表、详情、编辑、待买(含已买、批量添加)、图片浏览、日期筛选、设置
- 桌面小组件
- iCloud 同步(需要付费开发者账号。数据模型已经按 CloudKit 的要求设计,届时只需开启能力)
图标是 Reminder/Assets.xcassets/AppIcon.appiconset/icon-1024.png,由 tools/make-icon.ps1 在 Windows 上生成:
powershell -File tools/make-icon.ps1 -Out Reminder/Assets.xcassets/AppIcon.appiconset/icon-1024.png