electron mac打包、签名、公证、上传

这篇具有很好参考价值的文章主要介绍了electron mac打包、签名、公证、上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、首先是打包,mac的打包选项有dmg、mas、zip等,

dmg分为x64、arm64,分别对应intel芯片和apple m1 m2芯片

配置打包项:Mac=>target=>dmg>[arm64,x64]

buildOption:{
    "mac": {
        "hardenedRuntime": true,
        "icon": "./public/favicon.png",
        "target": [
            {
                target:"dmg",
                arch:['arm64', 'x64']
            }
        ]
    },
}

这样打包之后,用户下载dmg文件后安装打开,mac会提示该程序不受信任;好多地方说dmg是不需要签名的,但是我觉得dmg下的.app文件照样还是需要求签名(具体在第二步签名中会是说)。

二、签名

发布appstore 打包target需要添加mas,然后对mas属性进行配置,与mac属性同级,

icon:dmg可以用png格式作为icon,mas需要icns格式的icon,刚开始我是这样以为的,打包的时候dmg有图标了、mas上传验证的时候又提示icns文件错误,换成icns dmg又没图标了,后来才知道icns,为什么后边加s;icns是可以吧多个不同尺寸的png整合到一个icns文件下,由系统分配尺寸,托盘、程序坞,启动台都可以用一个icns文件

hardenedRuntime:配置为false 具体为啥没去研究

provisionprofile :为描述文件, apple开发者平台可以生成、下载

entitlements和entitlementInherit  mac软件的权限配置文件,包括了沙箱配置、teamid配置和摄像头、录音等权限的配置,文件路径直接使用相对路径就可以,用path.resolve 绝对路径也可以(provisionprofile的文件路径也一样)

buildOption:{
    "mac": {
        。。。。
    },
    “mas”:{
        "icon": "./public/favicon.icns",
        "hardenedRuntime": false,
        "type": "distribution",
        "provisioningProfile":”public/provision.provisionprofile",
        "entitlements": resolve("mas-build/entitlements.mas.plist"),
        "entitlementsInherit": resolve("mas-build/entitlements.mas.inherit.plist"),
    }
}

plist文件

entitlementsInherit:

​
<?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.app-sandbox</key>
             <true/>
             <key>com.apple.security.inherit</key>
             <true/>
         </dict>
    </plist>

​

entitlements:

​
<?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.app-sandbox</key>
        <true/>
        <key>com.apple.security.application-groups</key>
        <array>
            <string>你的teamID</string>
        </array>
    </dict>
</plist>

​

dmg类型的包不需要plist进行配置,直接在mac配置项里添加extandInfo属性就可以配置teamId了

buildOption:{
    mac:{
        ...,
        "extendInfo":{
            "electronTeamId”:”。。。”//你的teamid
        },    
    }
}

三、签名

首先要有签名文件,生成签名文件需要在apple开发者

1、添加证书:

在accont=>certificates,点击添加证书,

2、证书类型选择:这里需要特别注意,可以选择的类型有Developer ID Application和Apple Distribution类型,mas用的是Apple Distribution类型;他们分别对应了不同的下载安装方式,前者是mac appstore以外的平台比如官网下载,后者是可以提交到mac appstore审核发布下载,我这里是两个都创建了 打包的时候可以看到 dmg的.app文件用的是 Developer ID Application签名;mas用的是Apple Distributioin类型进行签名

3、Cer文件上传:

选择文件类型下一步需要上传cer文件,文件通过mac 的 钥匙串访问 程序生成

--打开mac的“钥匙串访问”程序,屏幕左上角 钥匙串访问=>证书助理=>从正式颁发机构请求证书

--用户电子邮件:appledeveloper的账户邮箱就可以

--CA电子邮件地址:空格就行

--请求:存储到磁盘

生成之后在添加证书cer文件上传步骤进行上传

4、上传完成下一步,下载certificates证书到本地

5、点击打开一下,就可以在钥匙串访问 登录=>证书 中看到了

6、找到钥匙串访问 登录=>该证书,点击左侧小箭头,展开专用密钥,右键导出,记住路径,设置并记住密码

7、配置环境变量,打包签名的时候会按照这个环境变量查找签名文件;

打开命令行输入

sudo vim ~/.bash_profile

输入密码后,任意按键进入insert模式,输入以下内容

export CSC_LINK=/***/***.p12

export CSC_KEY_PASSWORD=***

CSC_LINK 表示你的p12文件地址;CSC_KEY表示 你的p12文件密码,导出的时候设置的密码

四、公证

签名之后需要进行公证,从macOS 10.14.5开始,使用新的开发者ID证书和所有新的或更新的内核扩展签名的软件必须经过公证才能运行。

electron有提供公正工具:electron-notarize,安装依赖

npm install electron-notarize —save;

在buildOption添加afterSign属性,该属性表示打包签名后运行的文件,执行notarization/index.js路径的文件进行公正,路径同样也是相对路径就可以

builderOptions: {
    
    "afterSign": "notarization/index.js",
    ...
    ...
}

notarization路径下index.js文件如下:

const { notarize } = require('electron-notarize');
const path = require("path")
exports.default = async function notarizing(context) {
    const { electronPlatformName, appOutDir } = context;
    if (electronPlatformName !== 'darwin') {
        return;
    }
    const appName = context.packager.appInfo.productFilename;
    return await notarize({
        appBundleId: ‘apple开发者中该应用的bundleid',
        appPath: `${appOutDir}/${appName}.app`,//打包后的放置app文件的命名和路径
        appleId: “开发者账号",
        appleIdPassword: "app专属密码”,//在apple开发者里可以对某个app设置专属密码
    });
};

五、上传

接下来就是上传appstore了,electron不像mac app开发使用oc或者swift语言在xcode中就可以进行开发打包提交一些列操作,electron只能打包.pkg文件,需要借助上传工具,我用的是transporter,可以直接在mac的appstore中找到下载,登录后拖拽上传就可以了

六、其他

1、electron mac端打包需要依赖python2.7,如果报错,下载安装一下python2.7,然后配置一下python环境变量就可以了;如果不想配置环境变量,可以在npm run build命令前加上断言

PYTHON_PYTH=*** npm run build

2、从安装依赖、运行打包、签名、认证,几乎都需要访问waiw,建议**软件一直开着

3、如果需要electron-updater更新,buildOptions配置还需要添加publish属性,不然打包是不会生成yml文件(latest.yml和latest-mac.yml),并且mac下的target属性需要添加“zip”,autoupdate只能下载zip文件,url属性就是服务器放置安装包、配置文件的路径,yml和安装包都需要放在这一路径下,electron-updater会访问这一路径下的***-mac.yml和zip文件,win则是是exe和***.yml文件

buildOptions:{
    ...,

    publish: [
        {
            provider: "generic",
            url: updateUrl,
         },
    ],

    ...
    mac:{
        target:[
            {
              target: "dmg",
              arch: ["arm64", "x64"],
            },
            "zip",
            "mas"
        ]
}
}

完整代码文章来源地址https://www.toymoban.com/news/detail-753866.html

electronBuilder: {
      preload: "src/preload.js",
      customFileProtocol: "./",
      nodeIntegration: true,
      builderOptions: {
        appId: "***",
        productName: "***", //项目名,也是生成的安装文件名,即aDemo.exe
        copyright: "***", //版权信息
        afterSign: "notarization/index.js",
        publish: [
          {
            provider: "generic",
            url: updateUrl,
          },
        ],
        win: {
          icon: "./public/win.ico", //256*256
          target: [
            {
              target: "nsis",
              arch: ["ia32", "x64"],
            },
          ],
        },
        nsis: {
          installerIcon: "./public/favicon.ico", // 安装图标
          uninstallerIcon: "./public/favicon.ico", // 卸载图标
          installerHeaderIcon: "./public/favicon.ico", // 安装时头部图标
          oneClick: false, // 是否一键安装
          allowElevation: true, // 允许请求提升。 如果为false,则用户必须使用提升的权限重新启动安装程序。
          allowToChangeInstallationDirectory: true, // 允许修改安装目录
        },

        mac: {
          hardenedRuntime: true,
          icon: "./public/favicon.icns",
          provisioningProfile: "public/***.provisionprofile",
          extendInfo: {
            electronTeamId: "***",
          },
          target: [
            {
              target: "dmg",
              arch: ["arm64", "x64"],
            },
            "zip",
            "mas"
          ],
        },
        dmg: {
          sign: false,
        },
        "mas": {
          "hardenedRuntime": false,
          "type": "distribution",
          "provisioningProfile":"public/***.provisionprofile",
          "entitlements": "mas-build/entitlements.mas.plist",
          "entitlementsInherit": "mas-build/entitlements.mas.inherit.plist",
        },
      },
    },

到了这里,关于electron mac打包、签名、公证、上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web前端项目使用electron打包成跨平台桌面端程序(Windows)

    Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 在使用Electron进行开发之前,您需要安装 Node.js。 我们建

    2024年02月16日
    浏览(69)
  • vue3 + electron mac编译打包报错:⨯ Exit code: ENOENT. spawn /usr/bin/Python ENOENT...

    今天electron打包异常,网上找了很久,现在记录下问题。 这个问题是因为:我的python 环境是 python3.9导致的。 问题 解决方案 1、下载python2.7 下载地址 2、找到安装的位置 3、配置.zshrc文件 完美解决

    2024年02月15日
    浏览(44)
  • Electron-Builder Windows系统代码签名

    项目打包签名是两年前做的了,使用Electron-Bulder,打包工具版本迭代较少,倒是electron版本更新飞快,目前官方推荐使用Electron Forge进行打包,后续再对两者进行对比,重新整理现在的实现方案。 在Windows系统中,如果程序没有代码签名证书,或者代码签名授信级别较低时,系

    2024年02月06日
    浏览(23)
  • 【electron 4】electron配置打包环境

    window需要:ico mac需要:icns linux需要png 借助:electron-icon-builder 安装: 配置package.json scripts 说明: input:icon.png是我需要引入的图标 output:是我将input引入图标所转换不同大小不同格式的图标输出文件 因为我是已有的项目了,所以这里我只需要安装并引入electron-forge,虽然我进

    2024年04月28日
    浏览(29)
  • Electron程序如何在MacOS下获取相册访问权限

    1.通过entitiment.plist,在electron-builder签名打包时,给app包打上签名。最后可以通过codesign命令进行验证。 TestPhotos.plist electron-builder配置文件中加上刚刚的plist文件。 通过codesign命令验证,若出现这个,则说明成功。 codesign -dvvv --entitlements - ***.app 2.通过dylib,内部使用OC Photo库。

    2024年03月11日
    浏览(28)
  • electron应用打包成功纪念一下

    electron应用打包成功纪念一下,以前曾经行过后来打包各种报错,现在有空就尝试解决一下 首先安装nvm能够方便切换node版本 顺利安装后你用nvm list查看node列表时会告诉你这个nvm不存在 回到最初版本然后打包看各种错误 还有一种错误是定位到js文件catch后面的{,这时只需要再

    2024年02月10日
    浏览(29)
  • 【Electron】使用electron-builder打包时下载electron失败或慢的解决方案

    问题描述 electron-builder打包时报错信息如下: 解决 该问题是因为electron包需要翻墙获得,需要全局代理,但是太麻烦,我们一般是修改镜像源 在项目根目录下创建.npmrc文件,并且输入以下配置:

    2024年02月11日
    浏览(31)
  • electron 运行以及打包超时解决方法

    背景 我是通过vue add 的方式去添加electron相关依赖的,然后会在package.json中,自动生成运行和打包electron的命令 \\\"electron:serve\\\": \\\"vue-cli-service electron:serve\\\", 和 \\\"electron:build\\\": \\\"vue-cli-service electron:build\\\" ,运行electron,直接执行 yarn electron:serve , 打包直接执行 yarn electron:build 运行过程中

    2024年02月12日
    浏览(27)
  • macOS下由yarn与npm差异引发的Electron镜像地址读取问题

    记录macOS下由yarn与npm差异引发的Electron镜像地址读取问题 写在前面:该问题仅仅出现在Linux和macOS上,Windows上不存在该问题! 最近笔者重新拾起了Electron,把最新版Electron的官方文档阅读了一遍。众所周知,Electron作为依赖在安装的时候,其二进制文件下载在国内一直以来都是

    2024年02月06日
    浏览(33)
  • Electron详解(二):基本使用与项目打包

    在使用Electron进行开发之前,您需要安装 Node.js,最低工作版本为 14.x,低于 14 的版本在后面的打包过程中可能会报错。 (注意,因为 Electron 将 Node.js 嵌入到其二进制文件中,所以在 electron 应用运行时的 Node.js 版本与你本地电脑中运行的 Node.js 版本无关。) (虽然您需要在

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包