一个关于 Tauri 自动更新的 demo

一个关于 Tauri 自动更新的 demo

仓库地址–>https://github.com/YWwXxx/tauri-updater-demo
⚠️拉取项目之后需要先在 tauri.conf.json 中配置endpointspubkey

创建项目

Tauri + Vue 3

参照官网这里选用 yarn 构建

  1. 输入命令yarn create tauri-app

image-20231115141248276

  1. 进入目录,随后yarn命令初始化项目

  2. yarn tauri dev启动项目

image-20231115141729251

更新配置

  1. 打包配置在src-tauri/tauri.conf.json

image-20231115142149884

设置一个 updater 属性,属性的层级(位于 tauri 字段下)在紫色框内

需要设置active字段为ture,并且由于我们需要用自定义更新,所以将dialog设置为false,其他字段说明在官网

  1. 设置更新密钥
  • 输入命令yarn tauri signer generate -w ~/.tauri/myapp.key

image-20231115142650247

需要输入密码(两次)

  • 成功之后有提示密钥位置,并且需要设置环境变量

image-20231115142901389

如果私钥丢失就无法更新程序了 ⚠️

打开文件对应位置,文本编辑打开、复制

.pub后缀的文件内容复制到pubkey字段(公钥)

image-20231115143223181

设置环境变量TAURI_PRIVATE_KEY是私钥 TAURI_KEY_PASSWORD是刚才设置的密码,保存退出之后记得source一下,或者重启终端或者电脑让环境变量生效(设置方式可能不同,具体型号具体查)

可以用echo $TAURI_KEY_PASSWORDecho $TAURI_PRIVATE_KEY命令来查看是否生效

(私钥也可以写地址,不用那么长)

image-20231115143709457

  1. 设置更新服务器

这里用GitHub Pages,因为endpoints里的 url 都需要是https的。

上传到 GitHub Pages 之后,可以直接通过路径访问到 json 文件,比较方便。

此时向 pages 里面上传一个 json 文件,名字随意,格式如下,必须要有的字段是versionurlsignature,其中 version 是 tauri 更新程序用来判断是否需要更新的字段,如果版本低则更新服务器上的高版本。当然也可以用于回退版本,但需要覆盖 Tauri 的版本比较,具体在文档

{
  "version": "0.3.0",
  "pub_date": "2020-09-18T12:29:53+01:00",
  "url": "",
  "signature": "",
  "notes": "!可以更新了!"
}

url字段需要填写下一个版本的文件地址,这里我们可以用阿里云或者七牛云的 oss,或者也可以继续存放在 GitHub Pages 里,当然也可以自己搭建一个文件服务器,等等…只要能有 url 访问即可(这里可以用 http)

然后需要设置endpoints

image-20231115150207371

打包项目

yarn tauri build用于打包项目,打包前记得在 tauri.conf.json 修改版本号

"package": {
    "productName": "tauri-updater-demo", //软件名,可以是中文
    "version": "0.0.0" //版本
  },

并且要修改tauri->bundle->identifier字段,默认的是com.tauri.dev,不修改就打包会报错(只要不是默认值就可以)

image-20231115145916666

然后由于我们希望自定义更新界面【这里使用了 ant-design-vue 需要先根据官网安装配置一下】,所以需要调用一些函数来判断更新,具体代码可以直接拉取仓库查看,主要代码在App.vueUpdate.vuemain.js

正常页面:

image-20231115151651114

有更新的时候:

image-20231115151734688

点击确定之后就自动更新,随后重启

重启的api 配置

image-20231115153804141

先打包一个 0.0.1 版本的,期间会弹一些框不用管。
此外可能可能会遇到各种权限问题…Mac 用sudo -E yarn tauri build(-E 是共享环境变量,否则找不到之前设置的私钥)来打包可能比较省心…

image-20231115161213398

看到 Done 就是成功了,通过输出可以知道安装包位置

image-20231115161332628

可以把打包好的移动到应用程序中,这个是低版本,稍后我们打包另一个高版本来更新

image-20231115161500924

点开确认一下,可以看到版本是 0.0.1

image-20231115162320395

然后我们在tauri.conf.json中修改version字段为0.0.2后再次进行打包

image-20231115162240422

在文件夹中点开确认即可,不要替换了应用程序本来的 0.0.1 版本

image-20231115162439914

然后需要的是tauri-updater-demo.app.tar.gztauri-updater-demo.app.tar.gz.sig这两个文件,其中.sig 结尾的文件内容是更新的signature,另一个文件是被 gzip 压缩的程序主体

  1. tauri-updater-demo.app.tar.gz上传到能够访问的路径,并将 url 写到 json 文件的 url 字段中

  2. tauri-updater-demo.app.tar.gz.sig文件内容复制到 GitHub Pages 上的 update.json 文件中的signature

  3. 其他字段比如pub_date是有格式限制的,但不是必填
    notes是更新的信息,可以在检查更新时获取,不是必填
    version是必填字段,但是可以自己填写版本

当在浏览器输入 json 文件路径的时候能看见 json 文件的内容就是可以的【浏览器中的 json 格式使用的是JsonForMatter 插件

image-20231115163143968

然后点开 0.0.1 版本的程序,显示更新

image-20231115163706306

等待一会,程序会自动关闭,再打开版本就更新了

image-20231115165050290

当然也可以通过 dev 来查看,只要点击了之后控制台没有打印错误就能正常更新(vscode 输出的错误是因为这个不是打包好的程序,找不到某些更新文件的路径)

image-20231115164133241

### 实现 Tauri 项目的增量更新 在构建基于 Tauri 的桌面应用程序时,实现增量更新可以显著减少用户的下载量并加快安装过程。为了达到这一目标,通常采用差异补丁技术来仅传输文件之间的变化部分。 #### 使用 `tauri-updater` 插件 Tauri 提供了一个官方插件叫做 `updater`[^1] ,它支持自动检测新版本以及执行更新操作。此工具能够处理完整的应用包替换,但对于想要实施更高效的增量更新方案来说还不够充分。 对于真正的增量更新机制,在服务器端需要准备两个资源: - 完整的应用程序二进制文件作为基础镜像。 - 已发布各版本间的 diff 补丁文件用于增量升级。 客户端则负责请求最新的可用版本信息,并决定是下载整个新的可执行文件还是只获取必要的变更片段来进行局部修补工作。 ```rust use tauri::api::updater::{self, ReleaseInfo}; use std::sync::Arc; #[tokio::main] async fn main() { let app = tauri::Builder::default() .setup(|_app| { Ok(()) }) .invoke_handler(tauri::generate_handler![]) .build(tauri::Wry) .expect("error while building tauri application"); // 启动后台线程定期检查更新 tokio::spawn(async move { loop { match updater::builder().check_for_updates(Arc::new(app.handle())).await { Ok(Some(ReleaseInfo { version, .. })) => println!("New update available: {}", version), _ => {} } tokio::time::sleep(std::time::Duration::from_secs(86400)).await; // 每天一次 } }); app.run(); } ``` 当有新版本被发现时,可以根据业务逻辑判断是否立即提示用户进行更新或是静默完成背景中的数据同步动作。 #### 配置 Yarn 命令简化流程 除了核心的功能外,还可以利用 Yarn 来简化一些日常开发运维任务。例如初始化一个新的 Tauri 更新服务可以通过简单的命令行指令快速配置环境[^2]: ```bash yarn tauri init ``` 这一步骤会帮助创建所需的目录结构和服务端点,使得后续集成更加便捷顺畅。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小叶沉迷学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值