构建MacOS应用小白教程(打包 & 签名 & 公证 & 上架)
打包在package.json中,dependencies会被打进 Electron 应用的包里,而devDependencies则不会,以是必要的依赖必要放到dependencies中。files中定义本身必要被打进 Electron 包里的文件。以下是一个完备的 mac electron-builder的配置文件。
const base = {
appId: 'com.xxxx.xxxx',
productName: 'Electron 打包模版', // 应用名称,安装后的应用就是名称
icon: './media/images/icon.ico',
files: [// 除了package.json中dependencies外,另外需要打包的文件添加到此处
'main.js',
'bundles',
'updater/win/index.html',
'updater/build/bootstrap.js',
'updater/mac/Updater.js',
'updater/mac/index.html'
],
publish: { // 需要结合 const { autoUpdater } = require('electron-updater'); 使用
provider: 'generic', // 指定服务器类型,generic 通用服务器,也可以是 github 等
url: '' // 线上服务器地址
},
mac: {
target: [// 需要打包出的类型
"dmg",
"zip",
"pkg",
"mas"
],
icon: 'media/images/icon.icns',
hardenedRuntime: true,
entitlements: 'electron-builder/entitlements.plist',// 申请可以操作系统权利
entitlementsInherit: 'electron-builder/entitlements.plist',
provisioningProfile: 'electron-builder/comalibabaslobs.provisionprofile'
},
pkg: {
isRelocatable: false,
overwriteAction: "upgrade",
},
mas: {
icon: 'media/images/icon.icns',
hardenedRuntime: true,
entitlements: 'electron-builder/entitlements.mas.plist',
entitlementsInherit: 'electron-builder/entitlements.mas.plist',
},
dmg: {
background: 'media/images/dmg-bg.png',
icon: 'media/images/icon.icns',
iconSize: 100,
sign: false,
contents: [ // mac 会有拖动图标安装的过程,这里配置图标的位置、大小、拖动的文件夹
{
x: 112,
y: 165,
},
{
type: 'link',
path: '/Applications',
x: 396,
y: 165,
},
],
},
extraMetadata: {// 打包线上应用,控制变量为 production,此设置会直接在打包的 package.json 中加入 env这个变量,并且把值设置为 production。可以在文件中引用 const pjson = require('./package.json');此时 pjson.env 等于 'production'
env: 'production',
}
};
module.exports = base;
签名
[*]Electron 签名 & 认证 macOS 版本 官方文档
[*]苹果开发者申请证书地址
MacOS 10.15 之前,应用如果没有举行签名,初次打开的时间就会出现“恶意软件”提示。
1. 加入开发者
加入 Apple Developer Program(必要缴纳年费)
如果是管理员,会看到可以申请 Developer ID Application,如果不是管理员就会像我这种,看到是灰色的。Electron 打包是必要用这个身份生成证书的。
https://i-blog.csdnimg.cn/direct/d65a69ee97b2416eac52fe8296d83c74.png
2. 生成签名证书
如果有管理员权限,点击生成新的证书。
https://i-blog.csdnimg.cn/direct/d4f2835e8d4b45df82a91eda6f4145b0.png
Choose File 里面的文件从那里来?打开 mac 的钥匙串访问 -> 证书助理 -> 从证书颁发机构请求证书,这里生成了 CertificateSigningRequest.certSigningRequest 的文件,这个文件可以被多次用来生成 mac 证书。
https://i-blog.csdnimg.cn/direct/d86cb8414c2f4921bf93e9ffc2083c34.png填写必要信息,用户邮箱填写你的 app开发者邮箱,常用名称随便取一个,然后选择保存到当地磁盘。
https://i-blog.csdnimg.cn/direct/7253f65e5d774477a3fd0a3d34ef6f8b.png
3. 安装签名证书
上次文件后就生成证书了,下载证书安装。如果出现了次证书不受信任的情况,在列表中双击证书,将使用此证书时更改为始终信任。
https://i-blog.csdnimg.cn/direct/e4afd64ff512488d834cacea6375d475.png
如果安装的证书不对,会出现 Command failed: codesign ...
4. 证书导出 p12 给其它人使用
在 mac 的钥匙串访问中,找到证书,然后 右键 -> 导出证书,一样平常导出 .p12 形式,然后输入证书安装的密码。其它人拿着你的证书,告诉他安装密码即可安装。
5. 不要 Developer ID Application 签名证书,不影响 Electron 应用打包
在打包过程中,找不到 Developer ID Application 签名证书的情况下,会跳过处理。但是应用不签名和公证会影响electron-autoupdater 自动更新能下载无法打开,用户初次打开会提示恶意软件,应用无法上架到appStore。
https://i-blog.csdnimg.cn/direct/0b3c06be86214bba9be14bd8937f2c99.png
公证
MacOS 10.14.5 之后,应用如果没有举行公证(将安装包上传到 Apple 查察),初次打开的时间就会出现更严重的“恶意软件”提示。没有举行过公证也无法上传到 Apple Store 中提供给其他人下载。https://i-blog.csdnimg.cn/direct/cef454d94af24a229d5a6386667dd0da.png
代码公证
const { notarize } = require('electron-notarize');
notarize({
appPath: '', // 应用的路径 xxx.app 结尾的
appBundleId: '', // appid
appleId: '', // 苹果开发者 id
appleIdPassword: '',// 应用专用密码
ascProvider: '' // 证书提供者
})
[*] appPath打包后应用的路径,.app 大概 .dmg 末端。
[*] appBundleId 跟 Electron-builder 配置的 appId 同等,这个 appId 要妥善命名。不要发布应用以后再修改,不然会导致应用无法自动更新。比较好的命名一样平常都是 com.xxx(公司名).xxx(应用英文名)https://i-blog.csdnimg.cn/direct/6ad7a7729b5f445ca6ea4bc1a19b7d31.png
[*]苹果开发者的账号 appleId,填写本身的开发者id 就可以,确保本身是属于开发者。应用专用密码 appleIdPassword,登录 appleid.apple.com/account/man…
https://i-blog.csdnimg.cn/direct/bbf27db20fbc48aabdc2c6d63a8e2e79.png
这个密码生成后只会出现一次,之后再也没办法看到,全部请保存下来。如果忘记了密码,就重新创建一个,为方便管理不用的密码举行删除后重新创建比较合适。
https://i-blog.csdnimg.cn/direct/e65180713819406aa0b6af28e27be462.png
[*]ascProvider 证书的提供者,通过 mac 钥匙串访问查看。你全部使用的签名证书,括号里面的就是证书提供者。https://i-blog.csdnimg.cn/direct/6a4258b1383140f3b4f011cffac8f24e.png
[*]公证会把程序压缩包上传到 apple 服务器,保证网络通畅。公证乐成后,开发者邮箱会收到邮件。https://i-blog.csdnimg.cn/direct/dbc5bdb6252d450397ccb129287ade2a.png
[*]notarize {}背面是绝对的json布局,不要出现这些是单引号的情况,不然会报错。 appPath,appBundleId,appleIdPassword,ascProvider
下令行工具公证
必要下载 xcode。
[*]一句话下令公证 xcrun altool --notarize-app --primary-bundle-id "com.xxx.xxx" --username "your developer appleid" --password "appleId-password" --asc-provider "ProviderShortname" -t osx --file xxx.dmg
https://i-blog.csdnimg.cn/direct/a83b820a03294c8795bd4450f5564a66.png
2.ascProvider 证书的提供者下令行查询
xcrun altool --list-providers -u "apple id" -p "appleIdPassword(应用专用密码)”
3. 公证乐成后
No errors uploading 'xxxxxxx-xxxx.dmg'.
RequestUUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
上架 AppStore 商店
Electron 应用如果要能发到 appStore,必要 electron-builder 构建 mas(Mac应用商店),经过签名公证后上传到 app store connect,上传之前应用必要支持sandbox。
注册AppId
在 electron-builder 配置的 appId,无论写什么我们都是可以打包配置乐成的,由于不涉及到发到 appStore。如果必要发到 appStore,就必要到 apple 开发者官网中去申请一个正式的了。
https://i-blog.csdnimg.cn/img_convert/2e55e24dbb95d89e17fd61374d5a159f.webp?x-oss-process=image/format,png
https://juejin.cn/post/7009179524520738824
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]