每日正念与消息推送的 iOS 应用,使用 SwiftUI 构建。
- 消息 / 正念推送:支持添加「消息」与「正念」两类内容,通过本地通知推送。
- 发送内容:在「消息」页添加要推送的文案,可随时增删。
- 每天定时推送:在设定时间段内(默认 9:00–21:00)按规则推送,可配置每天次数。
- 推送规则可选:
- 默认:随机推送:从你输入的内容中随机选一条,在设定时段内随机时间推送。
- 自定义规则:可限制只推送「消息」或只推送「正念」,并设置时段与次数。
- 定时单条推送:为某一条内容指定具体日期与时间,单独推送。
- 定时单独推送:在「推送规则」里添加「定时单条推送」规则,选择一条内容并设置推送时间即可。
- 同一份项目:用 Cursor 打开项目目录改代码,用 Xcode 打开同目录下的
MindSeed.xcodeproj编译运行,无需复制。 - 详细步骤见 docs/开发流程-Cursor与Xcode.md(第一次打开、日常流程、常见问题)。
- 用 Xcode 打开项目根目录下的
MindSeed.xcodeproj - 选择模拟器或真机,按 ⌘R 运行
- 在 Signing 中选择你的 Apple ID / Team
- 安装 XcodeGen:
brew install xcodegen - 在项目根目录执行:
xcodegen generate - 用 Xcode 打开生成的
MindSeed.xcodeproj - 在 Signing 中选择你的 Team,连接真机或模拟器运行
- 打开 Xcode,File → New → Project,选择 App,Interface 选 SwiftUI,Language 选 Swift。
- 产品名填
MindSeed,Bundle ID 自定(如com.yourname.MindSeed),保存到本仓库所在目录(不要勾选创建 Git 仓库)。 - 在项目导航中删除 Xcode 自动生成的
ContentView.swift等占位文件(若存在)。 - 将本仓库中的 MindSeed 文件夹(包含
MindSeedApp.swift、ContentView.swift、Models、Views、Services、Info.plist、Assets.xcassets)拖入工程,勾选 Copy items if needed 和你的 App Target。 - 避免 Info.plist 冲突:选中左侧 MindSeed target → 上方 Build Phases → 展开 Copy Bundle Resources,若列表中有 Info.plist,选中后点 - 删掉(只从该列表移除,不要删工程里的文件)。再在 Build Settings 里搜索
Info.plist,将 Info.plist File 设为MindSeed/Info.plist。 - 在 Target → Signing 中配置你的 Apple ID / Team,运行即可。
- 在 Xcode 中配置好 Bundle ID、版本号与图标(在
Assets.xcassets/AppIcon.appiconset中放入 1024×1024 图标)。 - Product → Archive,在 Organizer 中 Distribute App,选择 App Store Connect 上传。
- 在 App Store Connect 中提交审核。
- 本地通知:使用
UserNotifications框架,无需后端即可实现定时推送。 - 数据持久化:消息与推送规则保存在
UserDefaults。 - 最低系统:iOS 16.0。
MindSeed/
├── MindSeedApp.swift # 应用入口
├── ContentView.swift # 主 Tab
├── Info.plist
├── Assets.xcassets
├── Models/
│ ├── MessageItem.swift # 消息/正念模型
│ ├── PushRule.swift # 推送规则模型
│ └── ScheduleEntry.swift
├── Views/
│ ├── MessageListView.swift # 消息列表与「发送」入口
│ ├── AddMessageView.swift
│ ├── PushRulesView.swift # 推送规则列表
│ ├── AddPushRuleView.swift
│ ├── EditPushRuleView.swift
│ └── SchedulePreviewView.swift # 定时推送与刷新排期
└── Services/
├── DataStore.swift # 持久化
├── NotificationManager.swift # 通知权限与调度
└── PushScheduler.swift # 按规则生成推送计划
见 LICENSE 文件。