西蒙·威尔森用大语言模型构建macOS监控SwiftUI应用

Simon Willison··作者 Simon Willison

关键信息

这两个应用都是单文件SwiftUI项目,使用菜单栏图标显示实时数据:Bandwidther展示每个进程的网络带宽使用情况,Gpuer监控GPU活动;整个开发过程由一系列迭代提示驱动。

资讯摘要

西蒙·威尔森在获得一台新的128GB M5 Macbook Pro后,决定尝试‘氛围编程’——即利用AI辅助快速开发应用程序,以替代Activity Monitor。他构建了Bandwidther(网络使用监控器)和Gpuer(GPU使用情况追踪器),两者都完全基于单一文件,通过向Claude Opus 4.6和GPT-5.4等大语言模型发送指令自动生成SwiftUI代码。

他通过简单的文本指令逐步完善功能,例如添加特性、重新设计布局并集成Git版本控制。最终成果是一组轻量级、实用的菜单栏工具,展示了大语言模型如何赋能开发者快速打造个性化macOS实用程序。

西蒙·威尔森用大语言模型构建macOS监控SwiftUI应用

资讯正文

Vibe coding SwiftUI 应用程序非常有趣

2026年3月27日

我有一台新笔记本电脑——128GB内存的 M5 MacBook Pro,初步体验表明它非常适合运行本地大型语言模型。我对 Activity Monitor 感到沮丧,于是决定用 Vibe Coding 的方式开发一些替代性能监控工具,结果非常满意。

这是我第二次尝试用 Vibe Coding 方式开发 macOS 应用程序——第一次是在几周前做的一个演示应用。

事实证明,Claude Opus 4.6 和 GPT-5.4 都能很好地处理 SwiftUI 编程;而且一个完整的 SwiftUI 应用可以放在一个文本文件中,这意味着我甚至不需要打开 Xcode 就能快速搭建起来。

到现在为止,我已经完成了两个应用:Bandwidther 可以显示哪些应用程序正在使用网络带宽,Gpuer 则用来查看 GPU 的运行状态。根据 Claude 的建议,这两个应用现在都变成了菜单栏图标,点击后会弹出包含详细信息的面板。

Bandwidther

我先做了这个应用,因为我好奇 Dropbox 在做什么。它的界面如下所示:

我已经分享了构建第一个版本时使用的完整提示词记录。我的提示非常简短:

展示这台机器向互联网传输的网络带宽与局域网内传输的带宽对比情况。

(我最初的好奇心是想看看 Dropbox 是不是通过局域网从旧电脑传输文件,还是从互联网下载。)

创建 /tmp/bandwidther 目录,并在其中编写一个原生 Swift UI 应用,实时持续显示这些细节。

这让我得到了第一个版本,也证明了这个方向值得继续深入探索。

执行 git init 并提交当前代码

因为我要开始添加新功能了。

现在建议我们可以为这个应用增加哪些功能,目标是尽可能详细地提供网络使用情况,包括各个应用程序的具体数据。

让 Claude 建议功能的好处在于,它比我自己更清楚什么是可以实现的。

我们来回修改了一些 bug 后,我又发送了几条提示来达到上面展示的两列布局:

添加每进程带宽统计,完成后重新启动应用

现在加入反向 DNS 功能,但要确保原始 IP 地址仍然可见,只是字体小一点

重新设计应用,让它更宽一些,我希望有两个列——左边是每进程带宽,右边是其他信息

好吧,改成任务栏图标形式,当我点击图标时应用应该出现,图标本身则应是一个简洁、极简的小玩意儿

源代码和编译说明可在 simonw/bandwidther 获取。

Gpuer

我在一次会话中开发 Bandwidther 的同时,还开了另一个会话来制作一个类似的 GPU 监控工具。最终结果如下:

这是整个对话记录。这一次所需提示更少,因为我可以直接参考正在开发中的 Bandwidther 作为示例:

我想知道这台电脑用了多少 RAM 和 GPU 资源,但很难,因为 GPU 和 RAM 上的数据似乎不会出现在 Activity Monitor 中。

这个提示调用了 system_profiler 和 memory_pressure 来收集信息,给了我答案——更重要的是,它让我确认了这种做法是可行的,于是我接着说:

看看 /tmp/bandwidther,然后在 /tmp/gpuer 中创建一个类似的 app,持续显示上述信息,或者做得更好一些。

对 Bandwidther 应用进行几次修改后,我让它追赶上进度:

现在看一下 /tmp/bandwidther 的最新改动——这个应用现在使用了系统托盘图标,也模仿一下这一点。

这仍然是我最喜欢的一种利用编程代理的方法:让它们重新组合其他项目中的元素。

Gpuer 的代码可以在 GitHub 上的 simonw/gpuer 找到。

你不应该信任这些应用。

这两个应用是典型的“氛围编码”(vibe coding):我对 Swift 一无所知,几乎没怎么看过它们生成的代码。

更重要的是,我对 macOS 内部机制几乎没有任何经验,比如这些工具测量的数值。我完全不具备评估这些工具输出的数据和图表是否可信或准确的能力!

我已经在这两个 GitHub 仓库中添加了警告说明。

今天早上,我注意到 Gpuer 报告说我只剩下 5GB 内存,但根据活动监视器来看显然不是这样。我把截图粘贴到 Claude Code 中,它调整了计算逻辑,新的数字看起来合理了,但我仍然不确定它是否真的报告正确。

我只把它们分享到 GitHub,是因为我认为它们作为 Claude 在 SwiftUI 方面能力的一个例子很有意思。

尽管我对这两个应用本身缺乏信心,但从这些项目中我还是学到了一些有用的东西:

- 一个 SwiftUI 应用可以用单个文件完成大量工作——比如 GpuerApp.swift(880 行)和 BandwidtherApp.swift(1063 行)。

- 使用 Swift 将各种终端命令包装成美观的用户界面很容易实现。

- Claude 在 SwiftUI 应用设计方面展现出令人惊讶的好品味。

- 把一个应用变成菜单栏应用只需增加几行额外代码。

- 你不需要打开 Xcode 就能构建这类应用程序!

这两个应用花很少时间就建好了,并且让我确信,在未来项目中考虑用 SwiftUI 构建 macOS 应用是一个值得探索的新能力。

来源与参考

  1. 原始链接
  2. Vibe coding SwiftUI apps is a lot of fun

收录于 2026-03-28