Oblivion Desktop发布流程自动化:electron-builder配置与签名实践
引言
在当今快速迭代的软件开发环境中,自动化发布流程已成为提高效率、减少错误的关键环节。Oblivion Desktop作为一款非官方的桌面版应用,其发布流程的自动化对于确保版本质量和用户体验至关重要。本文将深入探讨Oblivion Desktop使用electron-builder进行发布流程自动化的配置与签名实践,帮助开发者轻松实现应用的打包、签名和分发。
项目概述
Oblivion Desktop是一个非官方的桌面版本应用,项目路径为GitHub_Trending/ob/oblivion-desktop。该项目旨在为用户提供桌面端的Oblivion体验,其发布流程的自动化配置主要依赖于electron-builder工具。
electron-builder基础配置
electron-builder是一个功能强大的打包工具,能够将Electron应用程序打包为各种平台的可执行文件。在Oblivion Desktop项目中,electron-builder的配置主要集中在package.json文件的"build"部分。
基本信息配置
在package.json中,首先需要设置应用的基本信息,如产品名称、可执行文件名称、应用ID等。这些信息将在打包过程中被electron-builder使用,用于生成正确的安装包和相关元数据。
"build": {
"productName": "oblivion-desktop",
"executableName": "oblivion-desktop",
"appId": "org.desktop.oblivion",
"artifactName": "oblivion-desktop-${os}-${arch}.${ext}",
...
}
文件打包配置
"files"属性指定了需要打包到应用中的文件和目录。在Oblivion Desktop项目中,除了常规的应用代码和依赖外,还需要包含资产文件和二进制文件。
"files": [
"dist",
"node_modules",
"package.json",
"assets/bin/**"
]
平台特定配置
electron-builder支持为不同平台(如macOS、Windows、Linux)进行特定的打包配置。例如,在Windows平台上,可以配置生成NSIS安装程序;在macOS平台上,可以配置生成DMG镜像等。
签名配置与实践
应用签名是确保应用安全性和可信度的重要步骤。通过签名,用户可以验证应用的来源和完整性,避免安装被篡改的应用程序。
macOS签名与公证
在macOS平台上,应用签名和公证是发布到App Store或分发给用户的必要步骤。Oblivion Desktop项目使用@electron/notarize模块来实现应用的公证。
const { notarize } = require('@electron/notarize');
const { build } = require('../../package.json');
exports.default = async function notarizeMacos(context) {
const { electronPlatformName, appOutDir } = context;
if (electronPlatformName !== 'darwin') {
return;
}
if (process.env.CI !== 'true') {
console.warn('Skipping notarizing step. Packaging is not running in CI');
return;
}
if (!('APPLE_ID' in process.env && 'APPLE_APP_SPECIFIC_PASSWORD' in process.env)) {
console.warn(
'Skipping notarizing step. APPLE_ID and APPLE_APP_SPECIFIC_PASSWORD env variables must be set'
);
return;
}
const appName = context.packager.appInfo.productFilename;
await notarize({
appBundleId: build.appId,
appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD
});
};
Windows签名
对于Windows平台,应用签名可以使用代码签名证书。虽然在提供的配置中没有直接显示签名相关的代码,但在实际的发布流程中,通常会使用electron-builder的签名功能,通过配置证书路径和密码等信息来完成签名。
打包前钩子脚本
在打包过程中,有时需要在打包前执行一些自定义操作,例如下载必要的二进制文件。Oblivion Desktop项目通过beforePackHook.js脚本实现了这一功能。
const util = require('util');
const exec = util.promisify(require('child_process').exec);
exports.default = async function (context) {
const archDict = {
0: 'ia32',
1: 'x64',
3: 'arm64'
};
// TODO don't force download when packaging on the local platform
const { stdout, stderr } = await exec(
`npm exec ts-node script/dlBins.ts force ${context.electronPlatformName} ${archDict[context.arch]}`
);
if (stderr) {
console.error(stderr);
}
console.log(stdout);
};
该脚本会根据当前的平台和架构,执行下载二进制文件的命令,确保在打包时包含正确的二进制依赖。
多平台打包配置
Oblivion Desktop项目支持为多个平台和架构生成安装包,以满足不同用户的需求。
Windows平台
在Windows平台上,配置了生成NSIS安装程序和ZIP压缩包,并支持ia32、x64和arm64架构。
"win": {
"target": [
{
"target": "nsis",
"arch": [
"x64",
"arm64",
"ia32"
]
},
{
"target": "zip",
"arch": [
"x64",
"arm64",
"ia32"
]
}
]
}
macOS平台
macOS平台配置了生成DMG镜像和ZIP压缩包,支持arm64和x64架构。
"mac": {
"target": [
{
"target": "dmg",
"arch": [
"arm64",
"x64"
]
},
{
"target": "zip",
"arch": [
"arm64",
"x64"
]
}
],
"identity": null
}
Linux平台
Linux平台支持生成AppImage、deb、rpm和tar.xz等多种格式的安装包,同样支持arm64和x64架构。
"linux": {
"target": [
{
"target": "AppImage",
"arch": [
"arm64",
"x64"
]
},
{
"target": "deb",
"arch": [
"arm64",
"x64"
]
},
{
"target": "rpm",
"arch": [
"arm64",
"x64"
]
},
{
"target": "tar.xz",
"arch": [
"arm64",
"x64"
]
}
],
"description": "Unofficial Warp Client",
"category": "Network",
"icon": "assets"
}
发布流程总结
Oblivion Desktop的发布流程自动化主要包括以下几个步骤:
- 配置electron-builder:在package.json中设置应用的基本信息、文件打包规则、平台特定配置等。
- 执行打包前钩子脚本:通过beforePackHook.js下载必要的二进制文件。
- 打包应用:使用electron-builder根据配置生成不同平台和架构的安装包。
- 签名应用:对生成的安装包进行签名,确保应用的安全性和可信度,如macOS的公证和Windows的代码签名。
- 分发应用:将签名后的安装包发布到指定的渠道,供用户下载和安装。
通过这一系列的自动化配置和实践,Oblivion Desktop能够高效、安全地发布新版本,为用户提供更好的体验。同时,开发者也可以将更多的精力放在应用功能的开发和优化上,而无需过多关注繁琐的发布流程。
结语
electron-builder为Electron应用的打包和发布提供了强大的支持,通过合理的配置和自定义脚本,可以实现发布流程的全自动化。Oblivion Desktop项目的实践案例展示了如何利用electron-builder来满足多平台发布需求,并确保应用的安全性。希望本文能够为其他Electron应用的开发者提供有益的参考,帮助他们构建更加高效、可靠的发布流程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



