15分钟生成iOS app
站起来!一个为腰椎健康而写的 App
每小时提醒你站起来活动几分钟,远离腰椎间盘突出

你有没有算过,自己每天坐多久?
早上 9 点坐下,中午吃饭挪一下,下午继续坐到 6 点——加起来8 到 10 个小时。回家刷手机、看电视,又是两三个小时。一天坐 12 小时,很多人习以为常。
腰椎间盘突出不是「老年病」。25–45 岁的上班族,因久坐导致的腰椎问题正逐年攀升。医生的建议很简单——每坐一小时,站起来走动 3–5 分钟。
问题是,坐进去以后,你就忘了。
所以我写了一个 App,专门提醒你站起来。
01 | 它做什么
很简单——每小时弹一条本地通知,提醒你站起来活动几分钟。不是什么复杂的健康追踪,不是计步器,不是睡眠监测。就是一条通知:
「站起来活动一下吧!已经坐了一小时了,站起来走动几分钟,伸展腰背,预防腰椎间盘突出~」
你收到,站起来,走两步,然后继续工作。就这么简单。

02 | 界面
打开 App,一个开关,一键开启。没有注册,没有登录,没有订阅。开启后系统自动请求通知权限,授权之后每小时准时提醒。

主界面包含:
- 每小时提醒
— Toggle 开关,开启后显示下次提醒时间 - 测试通知按钮
— 点击后 5 秒收到通知,不用等一小时验证 - 健康小贴士
— 四条骨科共识建议: 🧍 每坐 1 小时,站起来活动 3–5 分钟
🔄 做简单伸展运动,放松腰背肌肉
🪑 保持正确坐姿,腰部要有支撑
🚶 适当步行,增强核心肌群力量
还有一条「发送测试通知」按钮——点一下 5 秒后收到通知,让你验证权限是否正常、通知弹窗是否准时。不用等一小时才确认 App 是否生效。
03 | Mac 上怎么用
这是这个 App 不同于其他提醒工具的地方——它专门为 Mac 优化了。
大多数人写提醒 App 只考虑手机。但上班久坐最严重的是 Mac 用户。所以这个 App 有两个 macOS 专属功能:
🌅 菜单栏驻留
关闭主窗口后,App 不退出。菜单栏出现一个橘子海风格的「日出海浪」图标——提醒开启时是醒目的橘子海橙,关闭时切换为沉静的灰蓝。
点击图标,弹出操控面板,可以暂停提醒、测试通知、恢复主窗口,或者退出 App。
⚡ 开机自启
用 macOS 13+ 的 SMAppService 官方 API 实现。开启后首次需要在「系统设置 → 通用 → 登录项」中确认一次,之后每次开机 App 自动启动,菜单栏图标常驻,通知按时推送。不需要手动编辑 LaunchAgent,不需要终端命令。
04 | 为什么通知不会漏
通知由 系统级调度,不依赖 App 在前台运行。
使用 UserNotifications 框架的 UNTimeIntervalNotificationTrigger,间隔 3600 秒(1 小时),repeat: true。一旦注册成功,即使 App 完全退出、手机重启,系统仍然按时推送通知。
这意味着:
- iPhone
上——你切到别的 App、锁屏、甚至重启手机,通知照样准时到
- Mac
上——关闭窗口、App 不在前台,通知也准时弹
提醒不会因为你忘记打开 App 而缺席。
05 | 技术细节
如果你是开发者,也许会好奇它怎么做到 iOS 和 macOS 同时支持。项目采用双 target 方案——一个 iOS target、一个原生 macOS target,共享核心代码:
共享代码(两个 target 都包含):
-
ContentView.swift — 主界面 -
NotificationManager.swift — 通知调度 -
AutoStartManager.swift — 开机自启(iOS 上为空操作)
macOS 专属代码:
-
StandUpReminderMacApp.swift — App 入口 + MenuBarExtra + AppDelegate -
StatusBarView.swift — 菜单栏弹出操控面板 -
StatusBarIconView.swift — NSImage 原生绘制的橘子海图标
核心技术栈:

为什么不是 Mac Catalyst?因为 MenuBarExtra 在 Catalyst 编译模式下不可用——Catalyst 被视为 iOS 平台,而菜单栏相关 API 仅在原生 macOS 中有效。所以 macOS target 使用原生编译,让 #if os(macOS) 正确生效。
状态栏图标用NSImage + AppKit 原生绘制,不是 AI 生成的 PNG 缩放——18pt 的菜单栏图标如果用复杂图片会模糊,用 Canvas/SwiftUI Shape 在 MenuBarExtra 中渲染不稳定。NSImage 是 macOS 菜单栏图标最可靠的方式。
跨平台适配使用条件编译:
#if canImport(UIKit) // iOS: UIColor 系统背景色#if canImport(AppKit) // macOS: NSColor 窗口背景色#if os(macOS) // macOS 专属功能
06 | 如何自定义
如果你觉得一小时太久或太短,改一行代码就行。在 NotificationManager.swift 中:
// 修改提醒间隔(例如改为 30 分钟)private let interval: TimeInterval = 1800// 修改通知文案content.title = ”你的标题”content.body = ”你的内容”
所有源码都在本地 Xcode 工程中,没有任何云端依赖、没有任何 SDK 需要配置。打开工程,改代码,编译运行,就是你的了。
写在最后
这个 App 的出发点很简单:久坐伤腰,而大多数人坐进去就忘了站起来。
它不需要你注册账号,不需要你填健康问卷,不需要你佩戴设备。它做的事只有一件——每隔一小时,弹出一条通知,告诉你站起来走几步。
就这么一件事,但做好了,能帮很多人远离腰椎间盘突出。
站起来吧。你的腰椎会感谢你。
夜雨聆风