【Electron】macOS - electron应用如何做公证(notarization)
一、前言
本篇主要介绍electron应用的mac版本如何实现公证,因为在MacOS 10.14.5之后,应用如果没有公证(简单说就是将安装包上传到Apple审查),那么就会弹出更严重的“恶意软件”提示框。如下图
二、实现公证的方法
准备工作
关于electron应用的公证,我们首先要做一些准备工作,
- 为你的应用生成一个bundle id。点击链接去生成一个应用的bundleId,如下图所示选择
进入之后选择App IDs
点击继续,之后选择APP
之后就是填下应用的描述、自定义bundleId,形似这样的就可以com.****.*****
。
生成的这个id就是你应用的appId。要注意打包应用后不能随意更改新的appId字段。否则会被认为是两个不同的应用而无法更新。下图中的id就是你生成的id,这两个要一样!
- 为你的账号生成一个特定于应用程序的密码。点击查看生成App专用密码的方法教程。 生密码成界面如图所示
生成你之后,你会得到一个类似于这种格式的密码****-****-****-****
。
- 你还需要有一个
xcode
。
以上 我们的准备工作就做完了。
方式一、通过命令行进行公正
xcrun altool --notarize-app --primary-bundle-id @1 --username @2 --password @3 --asc-provider @4 -t osx --file @5
- @1: 准备工作中获得的bundle id,即你的应用的appId。
- @2: 苹果开发者ID。(如果是公司的账号的话,需要最高权限的账号)
- @3: 准备工作中获得专用密码。
- @4: 证书提供者。
- @5: 你的dmg文件相对路径。(xxx.dmg)
其中@4证书提供者的查询命令为
xcrun altool --list-providers -u @2 -p @3
@2、@3同上。查询结果如图
ProviderShortname
和WWDRTeamID
的值是相同的。咱们@4要的就是这个值。
公证命令行输入与输出,如图所示
看到下面框选中的两行内容,就代表你公证成功了!
公证有时候会很慢,习惯就好。。。
方式二、使用electron-notarize进行公证
这种方式是打包过程中自动去公证了。打好的包就是已经公证好的。
首先安装依赖
npm i electron-notarize
// or
yarn add electron-notarize
之后在根目录下创建notarize.js
文件,内容如下
const { notarize } = require('electron-notarize')
exports.default = async function notarizing (context) {
const { electronPlatformName, appOutDir } = context
if (electronPlatformName !== 'darwin') {
return
}
const appName = context.packager.appInfo.productFilename
return await notarize({
appBundleId: '方式一中的@1',
appPath: `${appOutDir}/${appName}.app`,
appleId: '方式一中的@2',
appleIdPassword: '方式一中的@3'
})
}
之后在根目录创建一个获取mac权限的文件entitlements.mac.plist
内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
</dict>
</plist>
最后在vue.config.js
文件中添加如下配置
// electron-builder的相关配置
electronBuilder: {
builderOptions: {
productName: '小助手',
appId: 'com.example.app',
// ===== 公证相关 ========start
afterSign: 'notarize.js',
// ===== 公证相关 ========end
// asar打包
asar: false,
dmg: {
// background: '背景图地址',
contents: [
{
x: 410,
y: 190,
type: 'link',
path: '/Applications'
},
{
x: 130,
y: 190,
type: 'file'
}
],
window: {
height: 380,
width: 540
},
// ===== 公证相关 ========start
sign: false // sign
// ===== 公证相关 ========end
},
mac: {
// ===== 公证相关 ========start
hardenedRuntime: true,
gatekeeperAssess: false, // sign
entitlements: 'entitlements.mac.plist',
entitlementsInherit: 'entitlements.mac.plist',
// ===== 公证相关 ========end
// 应用程序图标
// icon: '自定义,建议使用png',
// 应用程序包名
artifactName: '${productName}-${platform}-${arch}-${version}.${ext}',
target: [ // 要打的包的格式类型设置
'dmg',
'zip' // 这里注意更新的时候,mac只认zip格式的包
]
},
win: {
// icon: `256*256的ico格式或png格式文件`,
artifactName: '${productName}-${platform}-${arch}-${version}.${ext}',
target: [
{
target: 'nsis',
arch: [
'ia32'
]
}
]
},
nsis: {
// NSIS的路径包括自定义安装程序的脚本。默认为build/installer.nsh
include: 'build/installer.nsh',
// 是否一键安装,建议为 false,可以让用户点击下一步、下一步、下一步的形式安装程序,如果为true,当用户双击构建好的程序,自动安装程序并打开,即:一键安装(one-click installer)
oneClick: false,
// 是否开启安装时权限限制(此电脑或当前用户)
perMachine: true,
// 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。
allowElevation: false,
// 允许修改安装目录,建议为 true,是否允许用户改变安装目录,默认是不允许
allowToChangeInstallationDirectory: true,
// 卸载时删除用户数据
deleteAppDataOnUninstall: true,
// 创建桌面图标
createDesktopShortcut: true,
// 创建开始菜单图标
createStartMenuShortcut: true
}
}
}
如果公证不成功,先登录下开发者账号,看看是不是有协议没签署,签完了再打包公证。 还有就是这个公证的过程中,会很慢,耐心等待~
三、后记
以上两种公证方式都是可以的。
方式一使用命令行公证,会有一个警告。
Warning: altool has been deprecated and, starting in fall 2023, will no longer be supported by the Apple notary service. You should start using notarytool to notarize your software. (-1030)
翻译过来的意思就是:altool已被弃用,从2023年秋季开始,苹果公证服务将不再支持altool。您应该开始使用公证工具对您的软件进行公证。(-1030)。
方式二就是会延长你的打包时间,我的项目目前打包时间约为6~7分钟左右。之前时间长的时候大概得有十几分钟。一般周五晚上(大家可能都是同一时间去公证了),感觉时间最长,可能是我们公司网速比较慢。。。
本篇完结 !撒花! 感谢观看! 希望能帮助到你!
转载自:https://juejin.cn/post/7145043149868498980