独立开发记录:我做了个"人体电池"App,用 SwiftUI 把精力管理变成收支账本
起因:下午三点的"断电"问题
去年秋天有段时间,我每天下午三点左右会进入一种奇怪的状态:不是困,不是饿,就是"空了"。手边的咖啡还有半杯,任务清单上还有四项没划掉,但整个人像被拔了电源线。
作为一个写代码的人,遇到问题第一反应是找工具。番茄钟、冥想、午睡、散步都试过。我还用习惯打卡 App 打了一个月,全是绿勾,可下午三点依然变成空壳。情绪日记写了两周也放弃了——情绪是结果,不是原因。
这些工具追踪的是行为本身,但没有一个在乎一件事对我来说是"充电"还是"耗电"。我想知道的是精力的流向,不是行为的有无。想来想去,决定自己做一个。
核心设计:把一天当成一块电池
App 叫元气手账,做的事很简单:早上满格出门,每件事要么充能(+)要么消耗(-),到晚上看剩余电量。不是流水账,是精力的"收支"。
我给自己定的设计原则只有一条:记录这件事本身不能耗电。如果打开 App 还要纠结分类、写长文字、选标签,那记录本身就变成了耗能项,逻辑上就矛盾了。
所以做了"胶囊打卡"的交互形式。预设好常见的充能和耗能场景——深度工作、有氧运动、无效社交、刷短视频——点一下就记上了,整个过程不超过三秒。一天结束前花一分钟扫一遍,电量余额自动算出来。
技术选型和实现思路
整个项目用 SwiftUI 写的,数据层用 SwiftData 做本地持久化。之所以没上 Core Data 是因为这个 App 的数据模型其实很简单,SwiftData 的声明式写法和 SwiftUI 配合起来开发体验好很多。
胶囊打卡的核心模型大概长这样:
@Model
class EnergyEntry {
var title: String
var value: Int // 正数充能,负数耗能
var timestamp: Date
var category: String
var isCharging: Bool {
value > 0
}
init(title: String, value: Int, category: String) {
self.title = title
self.value = value
self.timestamp = Date()
self.category = category
}
}
每个条目就是一个带正负值的记录,按天聚合求和就是当天的"电量余额"。按 category 分组排序就能跑出"吸血鬼/绿洲 TOP"排行榜——这个功能自动帮你找出精力黑洞和精力绿洲,不需要手动分析。
用了三周后发现的事
我自己用了大概三周之后,App 推了一个洞察:我最大的精力吸血鬼不是加班,是"回消息"。
说出来有点荒谬。每条消息本身只花三十秒,但我一天零散回将近四十条各种群消息和私信。单独看不起眼,累计起来每天抽走将近三格电。而另一边,我一直以为散步对我帮助很大,数据显示给我充电最多的其实是"独处写东西"。
我把"回消息"集中到每天两个固定时段之后,下午三点的那种空洞感大概两周就消失了。
内测的时候有个正在考研的朋友跟我说:"我终于知道为什么我每天学八小时但觉得比别人学十二小时还累了——我中间休息的方式全是耗电的。"她的休息方式是刷社交媒体,数据显示那对她来说根本不是充电,是继续放电。这个反馈坚定了我把它做完的决心。
和情绪日记、习惯打卡的区别
被问过很多次这个问题,我觉得区别在视角。情绪日记记的是"我现在感觉怎么样",元气手账记的是"这件事对我做了什么"。一个是温度计,一个是账本。习惯打卡只关心"你做了没有",不关心那件事对你的精力影响是正是负。你可能每天坚持早起跑步打卡全绿,但如果你是夜猫子体质,早起可能一直在消耗你而你不自知。
元气手账想回答的问题很具体:今天我的精力花得值不值?长期来看,什么在给我供能,什么在偷我的电?
九个月的开发过程
从去年十一月动手到现在,前后差不多九个月,中间有过三次大的方向调整。最早版本我做了很复杂的精力曲线图,有实时波动、有周报月报,做完之后自己用了一天就觉得太累了——谁会在精力已经很低的时候还去看密密麻麻的数据图表?
后来砍到最核心的交互:胶囊点击 + 电量余额 + 吸血鬼/绿洲排名。够了。每砍一个功能我都心疼半天,但回头看砍对了。
下载
元气手账已经上架 App Store,免费下载,核心功能全部免费用。如果你也想搞明白自己的电到底被什么偷走了,用一周时间每天花一分钟记一下,第七天看看吸血鬼排行榜,大概率会有"啊原来是你"的感觉。
也欢迎把这篇文章转给你身边那个总说"我也没干什么但就是好累"的朋友。也许 ta 只是还没找到自己的吸血鬼。

浙公网安备 33010602011771号