自 macOS 10.14.5 开始,应用程序必须要经过签名以及公证(notarize),否则默认情况下便无法直接运行,会弹出类似下面的警告:

即:

“Appname.dmg” can’t be opened because Apple cannot check it for malicious software.

This software needs to be updated. Contact the developer for more information.

或者中文提示:

无法打开“Appname.app”,因为无法验证开发者。

macOS 无法验证此 App 不包含恶意软件。

要解决这个问题,就需要对 Electron 生成的程序进行签名和公证。官方的 文档 中有关于签名的说明,有多种方法,我使用的是 electron-builder 工具,重点参考了 Notarizing your Electron application 这篇文章,但因为时间及各个依赖库的变化,这些文档以及文章上的内容也有一些需要调整。下面是我踩了一些坑后的配置记录。

本文中的方法主要基于以下依赖版本:

"dotenv": "^8.2.0","electron": "^6.1.7","electron-builder": "^21.2.0","electron-notarize": "^0.2.1",

准备工作

首先,你需要一个有效的 Apple 开发者 账号,目前注册这个账号需要年费 $99。

有开发者账号,之后,需要在苹果官网的开发者后台 Certificates, Identifiers & Profiles 那儿申请若干证书以及要发布的 App 的 Identifiers 之类,这个和其他 App 的流程类似,此处不再赘述。下面假设你已经有了对应的证书以及应用 id。

electron-builder 配置

electron-builder 的配置中,mac 及 dmg 部分主要内容如下:

mac: {  ...,  gatekeeperAssess: false,  identity: YOUR_IDENTITY,  hardenedRuntime: true,  entitlements: 'scripts/entitlements.mac.plist',  entitlementsInherit: 'scripts/entitlements.mac.plist'},dmg: {  ...,  sign: false},

其中 entitlements.mac.plist 文件的内容为:

<?xml version="1.0" encoding="UTF-8"?>com.apple.security.cs.allow-unsigned-executable-memory

到这儿,签名部分的配置就基本完成了。

公证(notarize)

这儿使用 Electron-notarize 对 Electron 程序进行公证。

首先要在你项目的 package.json 中最顶层添加以下配置:

"build": {  "afterSign": "scripts/notarize.js"}

此 notarize.js 文件的内容类似:

require('dotenv').config()const {notarize} = require('electron-notarize')exports.default = async function notarizing (context) {  const appName = context.packager.appInfo.productFilename  const {electronPlatformName, appOutDir} = context  if (electronPlatformName !== 'darwin') {    return  }  let appPath = `${appOutDir}/${appName}.app`  let {appleId, appBundleId, ascProvider} = process.env  let appleIdPassword = `@keychain:Application Loader: ${appleId}`  return await notarize({    appBundleId,    appPath,    ascProvider,    appleId,    appleIdPassword  })}

注意其中有一些变量是从环境变量 process.env 中获取的。你可以使用传统的方式设置环境变量,也可以在当前工作目录下添加一个 .env 文件,其中以 key=value 的形式写入环境变量,一行一对 key/value 值。

几个变量的说明如下:

appleId

你的 Apple 开发者账号,即登录 https://developer.apple.com/ 的账号,通常是一个 Email 地址。

appleIdPassword

你的 Apple 开发者账号密码。出于安全考虑,建议 不要 直接将密码写在 .env 文件或环境变量中, 这儿 有一些安全建议,比如使用专用密码等。

我这儿用的是 @keychain:Application Loader: ${appleId} 这样的形式,你可以先在 Application Loader 等程序中用你的开发者账号登录一次,并让 Keychain 记住你的密码。由于现在最新版 Xcode 中已经不包含 Application Loader 了,你也可以在系统的 Keychain 中手动添加密码项。

ascProvider

此项是选填的,如果你的开发者账号与多个团队关联,运行时可能会遇到以下错误:

Your Apple ID account is attached to other iTunes providers. You will need to specify which provider you intend to submit content to by using the -itc_provider command. Please contact us if you have questions or need help.

此时,就需要指定此项参数,它的值就是你在开发者后台看到的 Team ID 的值。

完成

到此,配置基本就完成了,此时正常运行 electron-builder 的命令,即可在打包完成之后继续进行签名、公证工作。需要注意的是公证部分需要将程序压缩包传到 Apple 服务器,需要保证网络畅通。

如果一切顺利,一会儿之后你会收到 Apple 给你发的提醒邮件:

此时,表明你的 Electron 程序已经签名及公证成功了。

macos无法验证此app不包含恶意软件_macOS 下 Electron 程序的签名及公证相关推荐

  1. macos无法验证此app不包含恶意软件_macOS 平台的一款后门样本(TinyTim)的分析

    本文将分析的样本是OSX.TinyShell的变种:TinyTim.早在2018年,我就发现有攻击者正在使用Tiny SHell的改良版.这个后门(Tiny SHell,是开放源码的)的运行方式类似于 ...

  2. macOS无法验证此App不包含恶意软件。

    当在 macOS 上尝试打开从网页上下载的软件 texstudio 时,出现了错误, 无法打开"texstudio",因为无法验证开发者. macOS无法验证此App不包含恶意软件 ...

  3. macOS 下 Electron 程序的签名及公证

    https://oldj.net/blog/2019/12/29/electron-builder-sign-and-notarize-for-macos 自 macOS 10.14.5 开始,应用程 ...

  4. 【Mac】macOS无法验证此App不包含恶意软件 解决方法

    解决方法 Mac电脑打开app,提示无法验证此App不包含恶意软件解决方法

  5. 「macOS无法验证此APP不包含恶意软件」的处理方式

    场景 解决方案 1.不要动上面那个窗口,进入设置-安全性与隐私-通用,点击「仍要打开」 注意:如果没有「仍要打开」,需要按住control打开APP  2.之前的窗口点击「取消」 3.再次重新打开AP ...

  6. macOS 无法验证此App不包含恶意软件

    具体命令如下 sudo xattr -rd com.apple.quarantine /Applications/Compressor.app (应用名称) Password: 转载: http:// ...

  7. macOS无法验证此App不包含恶意软件

    换了iMac,刚用有点不习惯,特别是它这安全机制,比ubuntu高太多... 想用android ndk进行交叉编译,里面的很多那种可执行文件,会弹出如下错误 解决办法: 1.点取消 2.打开系统偏好 ...

  8. 解决macOS Catalina(10.15)解决阻止程序运行“macOS无法验证此App不包含恶意软件”

    在终端里面输入如下命令 sudo spctl --master-disable 下面图片对比执行命令前后,安全性与隐私 界面上显示的差异: 使用命令之后,界面变了

  9. 网上下载软件,macOS无法验证此App不包含恶意软件。

    博主一般常用第一种: 1.解决方法一:按住Control键点按应用, 然后打开,这样会把应用增加到白名单中许可执行. 2.解决方法二:打开系统偏好设置>安全性与隐私>通用,这个时候有个按钮 ...

  10. mac:彻底解决-安装应用后提示:无法打开“XXX”,因为无法验证开发者的问题;无法验证此App不包含恶意软件

    mac从浏览器或其他电脑接收了应用,但是打开报错 目录 报错 解决办法 一次性方法 永久解决方法 验证 恢复应用验证 报错 截图如下: 错误信息 无法打开"XXX",因为无法验证开 ...

最新文章

  1. vs--bookmark用法
  2. centos下修改mysql默认端口_CentOS下修改Apache默认端口80
  3. 关于优酷开放SDK中setOnRealVideoStartListener
  4. 黄聪: Bootstrap之Form表单验证神器: BootstrapValidator(转)
  5. 牛客 - 汉诺塔(思维+dp)
  6. 图解算法学习笔记(一): 算法简介
  7. html插入flash代码_初学者必备Web开发APP,支持代码补全,一键插入代码,厉害了!...
  8. 快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)
  9. 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
  10. c++笔试必考内容:const使用详解
  11. Tab控件中滚动条的设置
  12. 重庆两江新区 闯出产业社区云新路
  13. 实用机器人设计(一)-机器人技术基础
  14. 计划策略(planning strategy)
  15. SAP 之定义工厂(Plant)
  16. 用C++编写一个简易数学计算器
  17. 小米13,红米K6,vivo S16,一加11,IQOO11安装谷歌Play商店,安装框架服务谷歌Google
  18. flex布局下文字超出省略号代替不起作用解决方法
  19. mysql性能问题小解 Converting HEAP to MyIsam create_myisa
  20. STM32DAC输出遇到的问题

热门文章

  1. RocketMQ开发指导之二——RocketMQ部署
  2. shift and算法
  3. SQL 基础笔记(二):进阶查询
  4. linux安装jdk1.8之后报错Error: dl failure on line 893的解决办法
  5. 导出FLASH用反射的时候要注意的问题
  6. mysql 添加权限和撤销权限的实例(亲测可行)
  7. 求助:为什么我用360浏览器和UC浏览器打不开JAVA中的index.html文件? 一打开就显示浏览器首界页...
  8. HC蓝牙模块测试AT指令搭建外部电路遇到的问题
  9. Android ListView显示底部的分割线
  10. magento模板中XML与phtml关系 [四]