[Flutter Desktop] Windows 应用产品化指南 (三):版本迭代与维护 SOP
一、 引言
在完成了应用的首次发布 (v0.0.1) 后,我们进入了漫长的维护期。当我们在代码中修复了一个 Bug 或新增了功能(例如支持了新的串口协议),如何规范地发布 v0.0.2?
Windows 软件的更新不像 Web 网页那样刷新即用,它涉及到注册表覆盖、文件替换等机制。因此,严格遵守版本迭代 SOP 至关重要。
二、 核心原则:AppId 守恒定律
在 Inno Setup 脚本中,有一个至关重要的字段:AppId。
1 | [Setup] AppId={{A1B2C3D4-...} |
原则: 永远不要修改 AppId。
原因: Windows 依靠这个 ID 识别“这是同一个软件”。
如果你保持 AppId 不变,用户安装 v0.0.2 时,安装程序会自动检测到旧版 v0.0.1,并执行覆盖升级(保留用户数据,更新程序文件)。
如果你手贱改了它,Windows 会认为这是两个完全不同的软件,导致用户电脑上同时出现两个“PV Monitor System”,造成灾难。
三、 版本升级 SOP (Checklist)
每次发布新版本(例如从 v0.0.1 -> v0.0.2),请严格按顺序执行以下 “四点同步法”:
✅ 1. 修改 Dart 核心配置
文件: pubspec.yaml
YAML
1 | # 修改 version 字段 |
✅ 2. 修改 UI 显示
文件: lib/ui/main_screen.dart
Dart
1 | // 这是一个容易遗漏的硬编码点 |
✅ 3. 修改 Windows 元数据
文件: windows/runner/Runner.rc
代码段
1 | // 找到 VS_VERSION_INFO |
✅ 4. 修改打包脚本
文件: installer_script.iss
代码段
1 | #define MyAppVersion "0.0.2" |
四、 构建与发布 SOP
1. 编译 Release
修改完上述四个文件后,执行编译。务必先 Clean,因为 Runner.rc 的修改往往需要重新链接才能生效。
PowerShell
1 | flutter clean |
2. 制作安装包
打开
installer_script.iss。点击 Build -> Compile。
检查
installer_output目录,确认生成了PV_Monitor_Setup_v0.0.2.exe。
3. 验证 (Smoke Test)
在发布给客户前,先在自己电脑上模拟一次**“覆盖安装”**:
确认电脑上已安装 v0.0.1。
双击运行 v0.0.2 安装包。
观察是否提示“目标文件夹已存在”(正常),安装后打开软件,检查顶部栏版本号是否变成了
V0.0.2。
4. Git 归档
PowerShell
1 | git add . |
5. 分发
上传到 Gitea Release 和 阿里云下载站。
五、 进阶:关于自动更新 (OTA)
目前的 SOP 是“被动更新”,即用户需要自己去下载新包覆盖。 如果未来需要实现**“软件内检测更新”**,可以在 Dart 层实现以下简易逻辑:
在阿里云 OSS 放一个
version.json:{"latest": "0.0.2", "url": "..."}。App 启动时请求这个 JSON。
对比
package_info_plus获取的本地版本与latest。如果发现新版,弹窗提示,并调用
url_launcher打开浏览器下载链接。