西蒙·威尔森用大语言模型构建macOS监控SwiftUI应用
Simon Willison··作者 Simon Willison
收录于 2026-03-28

关键信息
这两个应用都是单文件SwiftUI项目,使用菜单栏图标显示实时数据:Bandwidther展示每个进程的网络带宽使用情况,Gpuer监控GPU活动;整个开发过程由一系列迭代提示驱动。
资讯摘要
西蒙·威尔森在获得一台新的128GB M5 Macbook Pro后,决定尝试‘氛围编程’——即利用AI辅助快速开发应用程序,以替代Activity Monitor。他构建了Bandwidther(网络使用监控器)和Gpuer(GPU使用情况追踪器),两者都完全基于单一文件,通过向Claude Opus 4.6和GPT-5.4等大语言模型发送指令自动生成SwiftUI代码。
他通过简单的文本指令逐步完善功能,例如添加特性、重新设计布局并集成Git版本控制。最终成果是一组轻量级、实用的菜单栏工具,展示了大语言模型如何赋能开发者快速打造个性化macOS实用程序。
资讯正文
我有一台新笔记本电脑——一台128GB内存的M5 MacBook Pro,初步体验显示它非常适合作为本地大型语言模型的运行平台。我对活动监视器感到沮丧,于是决定用‘ vibe coding ’的方式开发一些替代工具来监控性能,结果让我非常满意。
这是我第二次尝试使用‘ vibe coding ’开发macOS应用程序——第一次是在几周前开发了一个演示应用。
事实证明,Claude Opus 4.6和GPT-5.4都非常擅长SwiftUI,而且一个完整的SwiftUI应用可以放在一个单独的文本文件中,这意味着我可以直接使用它们快速搭建应用,甚至不需要打开Xcode。
到目前为止,我已经完成了两个应用:Bandwidther用于查看哪些应用程序正在使用网络带宽,Gpuer则用来监测GPU的状态。根据Claude的建议,这两个应用现在都变成了菜单栏图标,点击后会弹出包含详细信息的面板。
Bandwidther
我最先开发的是这个应用,因为我想要看看Dropbox在做什么。它的界面如下所示:

我已经分享了构建第一个版本应用时所用的完整对话记录。
我的提示相当简洁:
<blockquote> <p>向我展示这台机器从互联网使用的网络带宽与局域网带宽的对比情况</p> </blockquote>
(我最初的好奇心在于,想看看Dropbox是否通过局域网从旧电脑传输文件,还是正在从互联网下载。)
<blockquote> <p>创建一个名为/tmp/bandwidther的目录,并在其中编写一个原生Swift UI应用程序,实时持续显示这些详细信息</p> </blockquote>
这让我得到了第一个版本,它证明了继续深入探索是值得的。
<blockquote> <p>执行git init并提交当前代码</p> </blockquote>
因为我即将开始添加新功能。
<blockquote> <p>现在建议我们可以为这个应用增加哪些功能,目标是尽可能详细地提供网络使用情况,包括不同应用程序的网络使用详情</p> </blockquote>
让Claude来建议功能的好处在于,它比我自己更清楚什么是可以实现的。
我们来回调整修复了一些bug,然后我又发送了几条提示,最终实现了上图中的两栏布局:
<blockquote> <p>增加按进程统计的带宽功能,完成后重新启动应用</p> </blockquote>
<blockquote> <p>现在加入反向DNS功能,但确保原始IP地址仍然可见,只是字体稍小一些</p> </blockquote>
<blockquote> <p>重新设计应用界面使其更宽,我希望分为两栏——左侧为按进程的带宽信息,右侧为其他内容</p> </blockquote>
<blockquote> <p>好吧,改成任务栏图标形式,当我点击图标时应用应弹出,图标本身应该是一个简洁、极简的小图形</p> </blockquote>
源代码和构建说明可在<a href="https://github.com/simonw/bandwidther">simonw/bandwidther</a>中获取。
<h4 id="gpuer">Gpuer</h4>
在一次会话中我正在构建Bandwidther的同时,还运行了另一个会话来开发一个类似的工具,用于查看GPU的运行状态。以下是最终成果:
<p><a href="https://github.com/simonw/gpuer/raw/main/screenshot.png" rel="noopener noreferrer" target="_blank"><img alt="macOS上Gpuer应用的截图,显示Apple M5 Max芯片(40个GPU核心)的内存使用情况。左侧面板:一个大号橙色数字“38 GB可用”,显示统一内存使用量为128.0 GB,“在压力前还能容纳约18个大型应用”,一条警告横幅写着“1.5 GB已推送到磁盘——系统最近曾承受压力”,一个标注为“你的内存都去哪儿了”的水平分段条形图,包含绿色、蓝色和灰色区域及图例,一段关于GPU统一内存的解释说明,GPU利用率部分显示为0%,以及一个历史图表,以折线图形式展示可用内存和GPU利用率随时间的变化。</p>
右侧面板:一个按内存使用量排序的内存占用列表,显示各进程名称,并用横向的粉红色/紫色条形图表示内存使用情况,每个条目旁边标注CPU百分比,涵盖的进程包括Dropbox、WebKit、Virtualization、node、Claude Helper、Safari、LM Studio、WindowServer、Finder等。
使用Claude Code进行SwiftUI应用的‘氛围编码’非常有趣。我将一张截图粘贴到Claude Code中,它调整了计算方式,新数字看起来是对的,但我仍然不确定它是否正确报告了信息。我只是在GitHub上分享了这些内容,因为我认为它们作为Claude处理SwiftUI能力的一个例子很有意思。
尽管我对这些应用程序本身缺乏信心,但通过这些项目我还是学到了一些有用的东西:
- SwiftUI应用程序仅用一个代码文件就能完成大量工作——例如,<a href="https://github.com/simonw/gpuer/blob/main/GpuerApp.swift">GpuerApp.swift</a>(880行)和<a href="https://github.com/simonw/bandwidther/blob/main/BandwidtherApp.swift">BandwidtherApp.swift</a>(1063行)。 - 使用Swift为各种终端命令构建美观的用户界面很容易实现。 - Claude在SwiftUI应用程序的设计品味上出人意料地出色。 - 将一个应用转换为菜单栏应用只需添加少量额外代码。 - 你不需要打开Xcode就能构建这类应用程序!
这两个应用开发耗时极少,并让我相信,在未来项目中考虑使用SwiftUI开发macOS应用是一个值得尝试的新能力。
配图


Tag
来源与参考