做了一个慢性病记录 App:血压血糖体重用药,聊聊开发思路和踩过的坑
去年我爸因为血压控制不好住了一次院,出院后医生反复叮嘱"每天记血压,下次复诊带记录来"。结果呢,我爸拿个小本子记了两周就断了,复诊前一晚我妈翻遍抽屉才找到那个本子,上面的字迹潦草到连日期都对不上。那次经历让我决定做一个专门给慢性病人群用的记录工具——健康手账。
这个 App 做了什么
健康手账覆盖血压、血糖、体重、用药四个维度的日常追踪与趋势分析。核心交互很简单:早上量完血压,打开 App 输入数值,它会自动按照临床标准做分级——正常、正常高值、一级高血压、二级高血压,不用自己翻对照表。血糖同理,空腹和餐后有不同的参考区间,记录时选好时段就行。
数据积累一段时间后,趋势图会标出波动异常的节点,比如连续三天晨起血压偏高,App 会推送一条预警提醒留意。这个逻辑实现上并不复杂,但对于上了年纪不会自己分析数据的用户来说很实用。
用药管理是我花时间最多的模块
添加药物后可以设定服药时间和频次,到点弹提醒。我比较满意的是「依从率统计」:按周、按月算出实际服药的比例,复诊时医生问"药吃得规不规律",直接给他看这个数字就够了。
另外支持给药物打标签,比如标记"降压药"或"降糖药",之后在趋势图里能叠加查看,观察换药前后指标有没有变化。这个功能上线后我爸他自己都发现换了氨氯地平之后晨起收缩压确实稳了不少。
技术选型简单说几句
iOS 端用的 SwiftUI,数据层走 SwiftData 做本地持久化。血压分级那块的逻辑大概长这样:
enum BPLevel: String {
case normal = "正常"
case highNormal = "正常高值"
case grade1 = "一级高血压"
case grade2 = "二级高血压"
static func classify(systolic: Int, diastolic: Int) -> BPLevel {
if systolic >= 180 || diastolic >= 110 { return .grade2 }
if systolic >= 160 || diastolic >= 100 { return .grade1 }
if systolic >= 130 || diastolic >= 85 { return .highNormal }
return .normal
}
}
分级阈值参考的是中国高血压防治指南的标准,写死在客户端里,不走网络请求,保证离线也能用。
Apple Watch 端用 WatchKit + SwiftUI 做了一个 complication,量完血压抬手就能在表盘直接录入,少一步掏手机的动作。老年用户可能用不上,但我自己记体重的时候确实方便。
多人管理和导出
如果家里不止一个人需要监测,健康手账支持建立多个家庭档案,老人的血压、自己的体重、孩子的用药记录分开管理,不会混在一起。需要给医生看数据时,能一键导出 PDF 报告,格式清晰,省得自己整理。
这个 PDF 导出我是用系统自带的 UIGraphicsPDFRenderer 做的,排版踩了不少坑,尤其是趋势图转成矢量嵌进去那步,折腾了好几个晚上。
写在最后
价格方面,基础记录功能免费使用,高级功能(趋势洞察、PDF 导出、家庭多档案等)通过内购解锁,具体订阅价格可在 App 内查看。
做这个 App 的初衷就是解决我爸复诊前翻本子的问题。日常花十几秒录入,看诊时直接递出报告,把记录、分析、提醒串成一条线。如果你或家人也有长期监测血压血糖的需求,可以试试看。

浙公网安备 33010602011771号