<前端>Electron-builder为公证后的app打更新信息latest.yml

MacOS下,Electron-builder可以很方便的为测试包app打更新信息(latest-mac.yml)。
但是,正式发布的时候,不可能用测试包app,因为还没有进行公证。如何为公证的app打latest-mac.yml呢。
其实观察latest-mac.yml,其实里面就只有一些比较重要的信息:
在这里插入图片描述

1.sha512: 这个其实是打出来的zip包(如这里的abc.zip)的SHA512哈希值的Base64编码。可以通过nodejs生成出来。

// 计算文件的SHA512哈希值,以及进行Base64编码
function calculateSHA512(filePath) {return new Promise((resolve, reject) => {const hash = crypto.createHash('sha512')const stream = fs.createReadStream(filePath)stream.on('data', (data) => {hash.update(data);})stream.on('end', () => {const sha512 = hash.digest('base64');resolve(sha512);})stream.on('error', (error) => {reject(error);})})
}

2.文件大小: zip的文件大小,fs.stat获取。
3.文件名: 其实就是zip的文件名,这里一定要到时候放在服务器下面的zip名称一样。


其实,我们可以将公证后的app压缩成zip,然后获取zip的这些值。最后替换掉latest-mac.yml中的这些值。一样也能起到效果。最终使用electron-updater更新后,就是这个公证之后的包。
这里给一个参考代码:


// 改变latest-mac.yml(一开始为abc-未公证.zip打的更新信息包),为abc.zip(公证包)的信息
// 需要更改files[0].url、files[0].sha512、files[0].size和path、sha512。其余不用修改
async function changeLatestMacYml() {if (fs.existsSync(zipRelativePath) && fs.existsSync(ymlRelativePath)) {const statObj = fs.statSync(zipRelativePath)const size = ('size' in statObj) ? statObj['size'] : 0const sha512Base64 = await calculateSHA512(zipRelativePath)console.log('size: ', size)console.log('sha512Base64: ', sha512Base64)// 通过yaml更改latest-mac.yml信息为公证后的zip的信息if (size > 0 && sha512Base64.length > 0) {const oldYamlData = fs.readFileSync(ymlRelativePath, 'utf8')const obj = yaml.load(oldYamlData)if (obj) {obj.files[0].url = 'abc.zip'obj.files[0].sha512 = sha512Base64obj.files[0].size = sizeobj.path = 'abc.zip'obj.sha512 = sha512Base64}const newYamlData = yaml.dump(obj)fs.writeFileSync(ymlRelativePath, newYamlData, 'utf8')}}
}

这里用到了一个解析yml文件为Object的库:js-yaml,下载即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981679.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

StartAI智能绘图软件出现“缺少Python运行库”怎么办?

StartAI做为一款国产AI界的新秀,是一款贴合AIGC新手的智能绘图软件。新手安装遇见“缺少Python运行库”怎么办”?小编一招搞定~ 解决方法:手动下载【resource文件】,将文件添加到安装目录下。 点击链接进行手动下载噢~ 确保 Star…

Pytest精通指南(28)钩子函数-测试报告(pytest-html)

文章目录 前言应用场景插件安装参数分析使用方法拓展-定制化报告 前言 在软件开发过程中,测试是确保代码质量的关键环节。 而测试报告则是测试过程中不可或缺的输出物,它为我们提供了关于测试用例执行情况的详细信息,帮助我们快速定位和解决问…

AGON爱攻×保时捷设计第三代OLED超宽屏PD49震撼上市!

一次科技与艺术的审美共振,开启多维度、沉浸式感官之旅! 科技与艺术的融合,引领着美学新时代。4月22日,全球电竞显示器销量冠军品牌AGON爱攻与欧洲最具创造力的设计工作室保时捷设计再度携手,重磅推出AGON爱攻保时捷设…

比亚迪唐EV和唐DM-p荣耀版上市,成为新能源汽车市场中的佼佼者!

随着环保理念的深入人心,新能源汽车市场正迎来前所未有的发展机遇。在这个变革的浪潮中,唐EV和唐DM-p荣耀版的上市无疑为市场注入了新的活力。它们凭借先进的技术、卓越的性能以及豪华配置,成为了新能源汽车市场中的佼佼者。然而,…

数据结构(七)---树

目录 一.树的基本概念 二.树的性质 三.二叉树 1.二叉树的基本概念 2.特殊的二叉树 (1)满二叉树 (2)完全二叉树 (3)二叉排序树 (4)平衡二叉树 3.二叉树的性质 4.完全二叉树…

Maven:配置与使用指南1

https://mvnrepository.com Maven 1.maven简介 不同模块的jar包以及同时设计的功能的微小变化版本; 真实的开发环境:我们将我们的源代码在服务器上重新编译重新打包,工程升级维护过程繁琐 1.Maven是一个项目管理工具,将项目开…

WebSocket的原理、作用、API、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 原理作用客户端 API服务端 API生命周期常见注解SpringBoot示例 WebSocket是一种 通信协议 ,它在 客户端和服务器之间建立了一个双向通信的网络连接 。WebSocket是一种基于TCP连接上进行 全双工通信 的 协议 。 WebSocket允许客户端和服务器在 单个TCP连接上…

【音视频服务】VoIP 推送转 APNs 推送如何设置?

融云控制台 VoIP 设置入口: VoIP 设置 功能说明 针对苹果官方要求收到 VoIP 推送后必须通知给系统 CallKit 框架,如果收到 VoIP 推送后没有报告给 CallKit,iOS 将终止该应用程序(目前只影响用 Xcode 11 打包的 App 运行在 iOS 13 …

Springboot实现国际化以及部署Linux不生效问题

1、在application.properties 添加以下配置: #国际化配置 spring.messages.basenamei18n/messages/messages spring.messages.fallback-to-system-localefalse 2、添加配置文件在 resources目录下 如下图所示: 这个国际化文件命名有个坑,必须…

伙伴匹配(后端)-- 前端初始化

文章目录 用脚手架初始化项目安装依赖启动项目image.png整合组件库Vant 用脚手架初始化项目 Vite官网:https://www.vitejs.net/guide/#scaffolding-your-first-vite-project cmd切换到项目目录下初始化项目 npm init vitelatest安装依赖 npm install启动项目 整…

Axure实现tab页面切换功能

1. 实现效果 2. 实现原理 创建两个标签,并实现点击时选中状态点击时,设置面板状态 3. 实现步骤 3.1 实现可切换的标签 在页面上拖拽两个矩形作为两个tab标签,并命名 tab1 和 tab2 设置每个矩形的边框显示,只显示下边框即可 …

2万字长文:Docker必知必会系列

安装docker 安装: Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 **Docker CE 分为 **stable&grav…

Python | Leetcode Python题解之第46题全排列

题目: 题解: class Solution:def permute(self, nums):""":type nums: List[int]:rtype: List[List[int]]"""def backtrack(first 0):# 所有数都填完了if first n: res.append(nums[:])for i in range(first, n):# 动…

抽象工厂模式设计实验

【实验内容】 楚锋软件公司欲开发一套界面皮肤库,可以对 Java 桌面软件进行界面美化。为了保护版权,该皮肤库源代码不打算公开,而只向用户提供已打包为 jar 文件的 class 字节码文件。用户在使用时可以通过菜单来选择皮肤,不同的…

【C++】C++的四种类型转换

一、C语言中的类型转换 在C语言中有两种类型转换,隐式类型转换和显示类型转换。 如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与接收返回值类型不一致时,就需要发生类型转化。 隐式类型转换&#…

Unity系统学习笔记

文章目录 1.基础组件的认识1.0.组件继承关系图1.1.项目工程文件结构,各个文件夹都是做什么的?1.2.物体变化组件1.2.3.三维向量表示方向1.2.4.移动物体位置附录:使用变换组件实现物体WASD移动 1.3.游戏物体和组件的显示和禁用1.3.1.界面上的操…

C语言入门课程学习笔记2

C语言入门课程学习笔记2 第8课 - 四则运算与关系运算第9课 - 逻辑运算与位运算第10课 - 深度剖析位运算第11课 - 程序中的选择结构 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程,图片全部来源于课程PPT,仅用于个人学习记录 第8课 - 四则运算与关系…

共享汽车管理|基于SprinBoot+vue的共享汽车管理系统(源码+数据库+文档)

共享汽车管理目录 基于SprinBootvue的共享汽车管理系统 一、前言 二、系统设计 三、系统功能设计 1 管理员模块的实现 1.1 用户信息管理 1.2 投放地区管理 1.3 汽车信息管理 1.4 汽车入库管理 2 用户模块的实现 2.1 汽车投放 2.2 使用订单管理 2.3 汽车归还 四、…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中,电源是非常重要的一环,现在高性能的硬件功耗往往很高,因此一款优秀的电源整个系统稳定运行的基石。最近,我发现一款由安耐美(Enermax)推出的PlatiGemini 1200W电源,它不仅满足…

刷代码随想录有感(45):二叉树的最大深度

题干: 力扣这里给了定义:二叉树的最大深度指的是从根节点开始,到最远叶子所经过的节点数。 代码: class Solution {//递归实现 public:int maxDepth(TreeNode* root) {if(root NULL)return NULL;int leftheight maxDepth(root…