antist.ai
全部场景

图集 · L0–L3

做桌面软件

桌面软件拿得到网页永远拿不到的东西:文件系统、系统音频、显卡、常驻后台运行。代价是你要把一个程序装进你从没见过的电脑,还要越过一道道不是你写的安全警告。这套图纸画出桌面程序可能的形态,以及每升一级要加上什么。

设计哲学

桌面软件是一个要在别人电脑上住好几年的程序。它被托付了别人的文件和系统,必须先赢得信任,再一直守住它。

  1. 先解决你自己的一个问题

    最好的桌面工具,最初都是作者为了治自己每天的烦心事写的。真实的问题每天都会给你一个真实的测试用例。

  2. 尊重这台机器

    空闲就是空闲:不偷偷吃 CPU,不在后台下载,不往你说过之外的地方写文件。风扇一转,用户就会察觉。

  3. 发布本身就是产品的一部分

    装不上的安装包、吓人的警告、永远收不到的更新,这些都是产品的 bug,不是产品之外的杂活。

在解决自己的问题?先写脚本,再给它套一个小窗口。只有当陌生人也要运行它时,才投入安装包、代码签名和自动更新。

图号L0

脚本

谁在用只有你
每月$0

①为什么升级

你有一件每天都会撞上的烦心事,想知道一个程序能不能把它消灭。唯一的用户是你,所以终端就是很好的界面。

②架构

一个脚本,手动运行或者开机时运行。它在一个固定的文件夹里读写文件,并打印自己做了什么。没有窗口,没有安装包。

Δ 本级新增

  • + 一个解决一件事的脚本
  • + 一个固定存放文件的文件夹

对应地图上的形态: 脚本或命令行工具

③工具

选难点部分(音频、文件、图像)库最好的那门语言,而不是界面框架最漂亮的那门。界面可以以后再加,核心能力装不出来。

④代码与测试

  • 从日常使用里留一小组真实输入,每次改完都用它们重跑一遍。
  • 把脚本做过的事写进日志文件,出问题后能回头看。
图号L1

有真实用户

谁在用别人,在他们自己的电脑上
每月$0–10

①为什么升级

别人也想用你的工具,但他们不会、或不愿意打开终端。他们的电脑设置不同、语言不同,也没有你装过的任何库。

②架构

脚本加上窗口,和它的运行时一起打包成双击就能安装的东西。设置文件搬到操作系统标准的用户目录里;程序只在某个功能真的需要时,才申请系统权限。

Δ 本级新增

  • + 图形界面窗口
  • + 自带运行时的安装包
  • + 放在系统用户目录里的设置
  • + 可下载的发布页

对应地图上的形态: 原生界面工具包(Qt、WPF、SwiftUI) · 桌面外壳里的网页界面(Tauri、Electron)

③工具

按核心需求选界面方案:要音频、低延迟、低内存就用原生工具包;界面本身就是产品时用网页外壳。测打包后的版本,不要只测开发环境里跑的那个,两者出错的方式不一样。

④代码与测试

  • 把打包好的版本装到一台从没见过你代码的干净电脑或虚拟机上。
  • 用非英语的系统语言、带空格或非 ASCII 字符的用户名测一遍。
  • 检查空闲时的内存和 CPU;后台工具是靠安静被评判的。
图号L2

涉及钱和数据

谁在用付了钱、或把文件托付给它的人
每月$10–50

①为什么升级

软件开始卖钱,或者要处理录音、文档、账号。没签名的版本会在安全警告那一步丢掉销量;一次弄丢用户文件的崩溃,会丢掉他的信任。

②架构

在 CI 里给构建签名,证书存在仓库之外。一个小的在线服务负责校验授权、提供更新源;断网时程序在宽限期内照常可用。崩溃报告只有在用户同意后才发出去,而且不带文件内容。

Δ 本级新增

  • + 在 CI 中代码签名
  • + 授权与更新服务
  • + 需用户同意、不含个人数据的崩溃报告
  • + 未保存工作的自动恢复

对应地图上的形态: 桌面应用 + 在线服务

③工具

这一级你手上最值钱的文件是签名证书:不进仓库,不进任何日志。服务器宕机时,授权校验绝不能把付了钱的用户锁在门外。

其他值得了解的工具 · 本站未验证

④代码与测试

  • 原子化写文件:先写临时文件再改名,崩溃时绝不留下写了一半的文档。
  • 断网测试程序;授权校验必须能平稳降级。
  • 崩溃报告发出前,清洗掉文件路径、用户名和文档内容。
图号L3

规模化

谁在用很多台电脑、好几种操作系统
每月$50–500+

①为什么升级

几千份安装在 Windows、macOS、也许还有 Linux 上跑着不同版本,芯片既有 Intel 也有 ARM。一次坏更新会同时弄坏很多台电脑,其中一些是公司的。

②架构

每次发布都由 CI 为每种操作系统和芯片架构分别构建并签名。更新分通道推送:先测试版,再按比例推到稳定版;坏版本可以从更新源撤下,让机器不再收到它。

Δ 本级新增

  • + 跨系统与芯片的构建矩阵
  • + 测试版与分阶段的稳定版通道
  • + 从更新源回滚
  • + 供企业部署的静默安装

对应地图上的形态: 桌面应用 + 在线服务 · 桌面外壳里的网页界面(Tauri、Electron)

③工具

构建与签名全部自动化;到了这一级,任何手工发布步骤,总有一天会被漏掉。

④代码与测试

  • 在你发布的每一种系统与芯片组合上跑测试。
  • 先发测试版通道,盯着崩溃率,再推稳定版。
  • 保留上一个版本的下载,让用户能自己回退。

架构全景图

这件事所有可能的搭法。它们大半的意义,是让你知道哪些现在还不该碰。

脚本或命令行工具

解决你自己的问题;你是唯一的用户

$0 · 极低

△ 别人也想用,但他们不会打开终端

原生界面工具包(Qt、WPF、SwiftUI)

需要深度系统访问、低延迟、低内存(Subtitle-Windows 就是这种形态)

$0(注意工具包授权) · 中

△ 需要一个团队在好几个操作系统上出同一个应用

桌面外壳里的网页界面(Tauri、Electron)

一套网页代码跨平台;界面为主的应用

$0 · 低–中

△ 内存占用或启动速度开始被抱怨,或者需要外壳没开放的系统接口

桌面应用 + 在线服务

授权、同步、账号或云端处理

$5–100/月 + 签名证书 · 中–高

△ 几千份安装分布在不同版本上,需要分阶段的更新通道

你真正需要的概念

每个概念一句人话 + 一个比喻。点击任何工具模块,也有同款科普。

代码签名
证书证明这个程序是谁构建的;没签名的程序会弹出吓人的警告,或者直接被拦下。
≈ 封了口、写着寄件人的信封,对比门口一个没有任何标记的包裹。
安装包与打包
把你的程序、运行时和依赖库打包在一起,让它能在一台完全没有你开发工具的电脑上运行。
≈ 寄出一套自己组装的家具,每颗螺丝和工具都装在箱子里。
自动更新
程序自己检查新版本并替换自己,让修复送到那些再也不会回你网站的用户手里。
≈ 订阅杂志,而不是指望读者再回报亭买。
系统隐私权限
麦克风、录屏和文件访问,越来越需要用户通过操作系统明确同意。
≈ 大楼保安先问住户同意,才放人进他家。