当前位置: 首页 > news >正文

Mac Electron 应用如何进行签名(signature)和公证(notarization)?

最近很多客户反映,从官网下载的Mac Electron应用打不开,直接报病毒,类似于这种:

这是因为在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存在病毒),那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable,取消验证模式,但是总体给客户培训下来,效果非常差,很多人找不到终端,有的人甚至不能在终端中输入命令。因此急需找到解决问题的源头,如何进行代码公证。

1. 签名

在App进行公证之前,App首先必须有一个签名,来证明这个app的开发者是谁:

首先你需要有一个苹果开发者账号

首先,找到开发电脑的钥匙串,找到证书助理,创建一个从证书机构请求证书

填写自己的信息,并保存,生成一个CertificateSigningRequest.certSigningRequest文件。

现在需要生成 Developer ID Application证书

登录苹果开发者网站:https://developer.apple.com/account/resources/certificates/add

添加 Developer ID Application类型证书:

导入上面生成的CertificateSigningRequest.certSigningRequest文件,导入完成之后即可下载我们需要的证书了:

下载到电脑之后,双击一下,证书就被安装到了钥匙串中了。

此时,打开钥匙串,选择登录 钥匙串,并在我的证书栏找到刚才导入的证书:

右键并下载,

保存成p12文件:

保存到你的路劲之后,此时需要配置环境变量:

export CSC_LINK=‘你的p12文件路径'
export CSC_KEY_PASSWORD=‘你创建p12文件的密码’

创建完成之后,此时我们来进行打包,使用 Electron自带的打包命令:

sudo npm run build

看到这句话之后,就说明签名可用了:

2. 公证

之前使用的altool工具被苹果打回了,现在只能使用notarytool工具打包了,具体文档可以查看这篇文章:

https://developer.apple.com/documentation/technotes/tn3147-migrating-to-the-latest-notarization-tool

直接上命令行:

xcrun notarytool submit --force filepath --apple-id "your_apple_id" --password "password" --team-id "team_id"

下面来解释一下所有参数的意义:

  • filepath 你生成文件的路劲
  • your_apple_id 你的苹果开发者账号
  • password 你的应用专属密码,和你的苹果开发者账号密码不一样,可以查阅相关资料设置应用专属密码
  • team_id 你的团队id

提交之后,如果有以下结果:

Conducting pre-submission checks for app.zip and initiating connection to the Apple notary service...
Submission ID receivedid: ad944394-4ccb-456e-aff5-80e873503e15
Upload progress: 100.00% (91.1 MB of 91.1 MB)   
Successfully uploaded fileid:  ad944394-4ccb-456e-aff5-80e873503e15path: /Users/admin/Downloads/app.zip

可以看到,我们提交成功了,已经在预检查状态了。

那么,我们何时可以看到我们的公证状态呢:

xcrun notarytool history --apple-id "your_apple_id" --password "password" --team-id "team_id"

可以得到如下图:

我们可以看到,我们提交的app状态都是Accpeted,说明公证已经被受理了,现在处于接收状态。目前status有以下状态:

  • Accepted 被接受
  • Invalid 无效
  • In Progress 进行中

一般提交半小时之内,如果没有异常情况,状态都会由In Progress变为Accepeted.说明您的公证已经完成。

一般我们公证完成之后,我们重新下载App并打开,出现的如下图片:

这样,一般对电脑不熟的客户,直接点击打开就可以直接打开App了,就没有之前那种强制不能开启的逻辑了。

当然了,这是一次记录,如果您有什么疑问,欢迎添加我的wx:javainstalling,暗号:公证,一起解决问题吧。

参考文章:

  1. https://www.cnblogs.com/lovesong/p/11782449.html
  2. https://www.cnblogs.com/e0yu/p/14751259.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • cms wpscan使用方式--kali linux
  • You are running Vue in development mode.和undefined is not iterable白屏问题
  • 【Android】Intent基础用法及作用
  • Go网络编程-RPC程序设计
  • 前端路由History 和 Hash模式的区别以及Vue项目打包后显示白屏,路由router-view不加载问题
  • C语言之指针的奥秘(三)
  • 【python】OpenCV—Scanner
  • vue使用x6画流程图,简单使用
  • 鸿蒙语言基础类库:【@system.request (上传下载)】
  • 分布式搜索引擎ES-Elasticsearch进阶
  • Python酷库之旅-第三方库Pandas(032)
  • 食堂采购系统开发:从需求分析到上线实施的完整指南
  • npm install时报错 reason: connect ETIMEDOUT
  • 网络安全-等级保护制度介绍
  • 使用AJAX发起一个异步请求,从【api_endpoint】获取数据,并在成功时更新页面上的【target_element】
  • php的引用
  • dva中组件的懒加载
  • JavaScript 一些 DOM 的知识点
  • Python中eval与exec的使用及区别
  • React中的“虫洞”——Context
  • Sublime Text 2/3 绑定Eclipse快捷键
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 利用jquery编写加法运算验证码
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何利用MongoDB打造TOP榜小程序
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • postgresql行列转换函数
  • Spring第一个helloWorld
  • 阿里云服务器购买完整流程
  • 带你开发类似Pokemon Go的AR游戏
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​Java基础复习笔记 第16章:网络编程
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • ###C语言程序设计-----C语言学习(6)#
  • (~_~)
  • (2)STL算法之元素计数
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (SpringBoot)第二章:Spring创建和使用
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (待修改)PyG安装步骤
  • (二十四)Flask之flask-session组件
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (推荐)叮当——中文语音对话机器人
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET 通过系统影子账户实现权限维持