前两天看了数字生命卡兹克的从0到1带你速通Codex,我整理的终极保姆教程来了。里面第六节讲到他自己用 Codex 做一个吃药提醒的手机 App。我自己不是程序员,但是看完之后立马想试试 Codex 的能力,二话不说开始开发一个我自己用的上的App,主要用来记录我的持仓。以前谈到开发一个 App,脑子里想到的是立项、产品经理、UI、后端、前端、iOS、测试、上架。但现在,一个很临时、很具体、只服务自己的需求,也可以直接被做成一个能跑在手机上的小工具。
一. 需求
我自己的持仓不只是在一个市场里,分布在 A 股、美股、港股、crypto,这也是真正麻烦的地方。如果只是记账,Excel 也能做,如果只是看某一个券商账户,券商 App 也能看。但我的资产分散在不同账户、不同市场、不同币种里,你想看一个统一的人民币总资产、持仓占比和浮动盈亏,就会变得很烦。所以这个 App 的第一版目标是:
能添加和编辑持仓 能记录数量、成本、最新价格 能把 CNY、USD、HKD 统一折算成人民币 能用一个扇形图看仓位占比 能刷新主要资产的价格 不上架 App Store,先自己用
我之前也有 vibe coding 失败的经验,失败大多集中于一上来提出太过复杂的需求,例如:账户体系、云同步、交易流水、价格提醒、导入券商账单、自动分类、历史收益曲线。听起来都对,但做起来就会迅速变成一个大项目,我这次刻意只做第一版,先把自己每天真正的需求解决了。
二. 准备
我上来没有直接让 Codex 写代码,而是先让它给方案。大概流程是:
我把真实需求讲清楚 让 Codex 先拆解功能和边界 它给出技术方案和实施计划 我确认之后再让它开始实现
它最后给出的方案是:用 SwiftUI 做界面,用 SwiftData 做本地存储,用 Swift Charts 画持仓占比图。最低系统版本设成 iOS 17,因为 Swift Charts 的扇形图 SectorMark 比较适合做这种资产配置图。当时它把需求拆成几层:
数据模型:资产、持仓、现金、行情快照 计算层:统一折算成人民币,算市值、占比、盈亏 行情层:不同市场用不同行情源 UI 层:首页、添加资产、编辑持仓、现金、设置 安装层:用 Xcode 跑到 iPhone 或模拟器
Vibe coding 最容易翻车的地方,不是它写不出来,而是你一开始没有让它把边界想清楚。结果它一路狂写,最后做出一个很大、很复杂、但不一定符合你需求的东西。Codex 计划模式的价值就是让它慢下先跟你讨论清楚:第一版做什么,不做什么;哪些地方自动化,哪些地方先手动;哪些数据是核心,哪些只是锦上添花。

三. 开干
确认方案以后,基本就进入了"Codex 一直干"的状态,前提是你要选择“追求目标”模式(见上图)。Codex 先从空目录创建 iOS 工程,写 SwiftUI 页面,搭本地数据库,做持仓计算,再加行情刷新逻辑。中间我并没有盯着每一行代码看,因为大部分文件对非 iOS 开发者来说确实没那么直观。这个阶段更像是你把一个产品需求交给一个工程师,然后不断验收:
首页能不能看到总资产 扇形图有没有出来 添加资产能不能用 编辑持仓时字段是否清楚 持仓成本和当前价格能不能算盈亏 删除持仓有没有入口 App 关掉再打开数据还在不在
下面这张图是我后来用演示数据截的首页。注意,这里不是我的真实持仓,仅提供参考演示。

你可以看到,首页就是最朴素的结构:总资产、浮动盈亏、扇形图、持仓列表、现金列表。没有做成一个花里胡哨的投资社区,也没有做成券商交易软件。它就是一个"我打开以后 10 秒内能看懂自己仓位分布"的小工具。
四. Xcode
做网页和做 App 最大的差别在这里。网页写完以后,你用浏览器打开就行。但 iOS App 不一样,它需要 Xcode 编译、签名、安装到模拟器或真机上。我一开始电脑上没有完整 Xcode,只有 Command Line Tools。于是中间还经历了一段安装 Xcode、打开项目、选择模拟器设备、运行 App 的过程。这个过程对程序员来说不算什么,但对普通用户来说很容易卡住。比如:
Xcode 要完整安装,不只是命令行工具 第一次打开会有一些组件安装 你要选择一个 iPhone 模拟器,比如 iPhone 17 Pro 如果要装到真机,还要登录 Apple ID、信任设备、开启开发者模式
我这次先在模拟器里跑,因为更快,也更适合不断调试。模拟器跑起来以后,整个反馈速度就很舒服了。你可以像用手机 App 一样点进去,发现哪里不好,再让 Codex 改。

这张图同样是演示数据,这里你可以编辑你的持仓,只需要填数量和成本,App 就可以根据当前价格算市值和浮动盈亏。
五. 实时价格
做到这里以后,还有一个问题,实时价格从哪里来?
一开始我让它接 Twelve Data 的实时数据。这个服务覆盖股票、ETF、外汇、加密货币,接口也比较统一,看起来很适合做第一版,但实际用起来免费 API 额度不够用,你只是点几次刷新,就会遇到 API credits 用完的提示。对于一个自用 App 来说,为了每天看几眼持仓就付费买一个行情 API,不一定划算。于是我们开始换思路。
最后形成的方案是:
A 股:用腾讯行情源 港股:也用腾讯行情源 美股:拼多多、苹果、英伟达等,也可以走腾讯的美股行情 crypto:用 OKX 的公开市场行情 汇率:先用设置里的备用汇率,后续再替换成更稳定的免费汇率源
真实的软件开发流程估计也差不多,一开始会有一个"看起来最正规"的方案,但真实约束会不断冒出来:免费额度、网络可达性、不同市场的代码格式、接口返回结构、更新时间、失败后的兜底策略。最后你会发现,工程不是寻找最优雅的理论方案,而是找到一个足够稳定、足够便宜、足够适合当前需求的组合。
六. 一个小 App 也需要设置页
设置页也很简单。
第一版只放两个东西:API Key 和备用汇率。

这张图里 API Key 是系统自动遮住的。实际 App 里也没有把 Key 写死在代码里,而是保存在本机设置里。这又是一个很小但很重要的工程习惯。你让 AI 写代码时,它有时候会为了"让功能跑起来",直接把某些配置写进代码。短期省事,但长期一定是坑,尤其是 API Key、账号、Token 这类东西,最好一开始就和代码分开。
整个开发流程如下图:

你只需要把真实需求说清楚,然后在每一次试用里告诉它哪里不对、哪里要改。它负责把这些反馈不断落到代码里,你负责判断这个工具是不是越来越接近自己的真实使用场景。
七. 不完美,但够用
最后这个 App 的第一版大概具备这些能力:
记录 A 股、美股、港股、crypto、现金 支持 CNY、USD、HKD 折算成人民币 首页展示总资产、浮动盈亏、持仓占比 用扇形图看资产配置 支持编辑持仓数量、成本、当前价格 支持删除持仓 支持打开 App 自动刷新和下拉刷新 支持模拟器运行,后续也可以装到真机
它当然还不完美。比如没有交易流水,没有历史收益曲线,没有账户维度,没有 iCloud 同步,也没有 App Store 上架。但对我来说,这些都不是第一版最重要的事,第一版最重要的是能把一个分散在多个账户里的资产,收拢到一个我自己能控制的小工具里。
这件事让我想起纳瓦尔讲过的一个观点:代码和媒体一样,都是最好的杠杆。以前代码这个杠杆主要掌握在工程师手里,你想把一个想法变成软件,要么自己学编程,要么找人开发,要么把需求压进某个大产品的 feature list 里。但现在你不一定要成为专业程序员,也可以拥有一些非常私人化的小软件,也许一开始不是为了创业,不是为了上架,不是为了融资,也不是为了服务十万人。只是因为你自己有一个具体问题,而这个问题值得被一个小工具解决。
夜雨聆风