NW.js Mac App 签名公证流程

使用 Developer ID 为 Mac 软件签名 - Apple Developer
在MacOS 10.15之前,应用如果没有签名(signature),那么首次打开时就会弹出“无法验证开发者”的安全提示,因此只要签名了,就可以正常打开软件,
从 10.15 版本后,从 App Store 之外分发的 App 都需要经过 Apple 公证(notarize),否则会弹出“无法打开”,“移到废纸篓”的提示,,非常影响用户第一印象和使用,这就需要再签名之后,再进行公证。下面简单记录一下 mac 下 App 签名和公证的流程。
签名
生成证书请求文件
- 进入钥匙串,在菜单中选择 “Certificates” - “Request a Certificate From A Certificate Authority”

- 在弹窗中填写如下信息。

填写完后保存到本地,文件名为CertificateSigningRequest.certSigningRequest

在开发者中心创建证书
登录 Apple Developer,进入 Certificates, IDs & Profiles 页面,点击添加按钮,选择 Mac App Distribution

上传刚才添加的 CertificateSigningRequest.certSigningRequest 文件

上传成功后点击下载,将证书保存到本地。

安装证书
- 双击下载到本地的证书,添加到钥匙串,如下:

- 右键双击,导出证书为 .cer 格式


- 打开命令行工具,添加证书
sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/Certificates.cer
Security是Mac系统中钥匙串和安全模块的命令行管理工具,了解更多Security命令,参考:
Mac Security工具使用总结
- 添加成功后通过命令查看已添加的证书
security find-identity -p codesigning

如果添加错误,需要删除证书,则使用如下命令:
sudo security delete-certificate -Z 36A8CEEBCA9CC8FA3CAC9B7EA165AA062DCxxxxxx
- 进行签名
codesign -f -s "3rd Party Mac Developer Application: xxxx xxx Co. Ltd. (6755xxxxx)" -v "/Users/wangxi/Desktop/Codes/weixin-work/dist/xxxx.app" --deep

6.查看是否签名成功
codesign -vv /Users/wangxi/Desktop/Codes/weixin-work/dist/xxx.app

公证

对您的 Mac 软件进行公证以在 macOS Catalina 中运行 - 新闻 - Apple Developer
公证流程主要通过一行命令,如下:

- 获取命令相关字段值
- primary-bundle-id :当前需要公证 App 的 ID,在苹果开发者后台 Profiles 详情中可以查看(如果没有的话,需要手动添加)

username:苹果开发者ID
password:应用专用密码。(登录 appleid.apple.com ,点击 Generate Password,创建一个应用专用密码,这样可以避免暴露真实的密码。

- asc-provider:证书提供者(ProviderShortname)。查询命令如下:
xcrun altool —list-providers -u "apple id" -p "app password"

- file:需要公证的 App 路径,支持 dmg,zip 和 pkg
填写完对应字段完整的命令如下:
xcrun altool --notarize-app --primary-bundle-id "com.xxx.www" --username "xxx@xxx.com" --password "jvqz-jyym-xxx-xxxxx" --asc-provider "67559xxxxxx" --file "/Users/wangxi/Desktop/Codes/weixin-work/dist/xxx.app.zip"
- 执行命令,请求成功后会返回一串字符
RequestUUID

- 查询公证结果(一般两分钟左右就会出公证结果)
xcrun altool —notarization-info 78830f47-ecb9-42a6-b9a1-f82922exxxxx —username "xxx@xxx.com" —password "seqb-msgu-eata-xxxx"

如果公证通过,一会儿就会收到 Apple 发送的邮件

如果未通过,可以通过返回的 LogFileURL 查看错误日志,修复相关问题后重新执行公证流程。


参考
MAS: Requesting certificates · nwjs/nw.js Wiki · GitHub
nwjs mac app签名 - 小咔蹭的个人页面 - OSCHINA
codesign gives always no identity found error via terminal
Mac Electron 应用的签名(signature)和公证(notarization) - 海角在眼前 - 博客园
Mac开发-公证流程记录Notarizaiton-附带脚本_CaicaiNo.1-CSDN博客_mac公证
Mac Security工具使用总结 - XRacoon - 博客园
NW.js Mac App 签名公证流程的更多相关文章
- Mac App Store应用签名和pkg签名(必须签名后才能销售)
App签名 只有用苹果颁发的证书签名的应用才能在App Store上进行销售,所以我们开发的应用必须打上签名. 签名有两种方式,一是使用Xcode,在配置里面设置签名,编译出来的app就有了签名:二是 ...
- Mac App Store应用签名和pkg签名,查看签名
App签名 只有用苹果颁发的证书签名的应用才能在App Store上进行销售,所以我们开发的应用必须打上签名. 签名有两种方式,一是使用Xcode,在配置里面设置签名,编译出来的app就有了签名:二是 ...
- RegexKit: A Regular Expression Toolbox Based On NW.js(Node-Webkit) And Other Greate Open Source Projects.
RegexKit RegexKit: A Regular Expression Toolbox Based On NW.js(Node-Webkit) And Other Greate Open So ...
- iOS App签名的原理
前言 相信很多同学对于iOS的真机调试,App的打包发布等过程中的各种证书.Provisioning Profile. CertificateSigningRequest.p12的概念是模糊的,导致在 ...
- NW.js 简介与使用
简介 (1)以网络最流行的技术编写原生应用程序的新方法 (2)基于HTML5, CSS3, JS and WebGL而编写 (3)完全支持nodejs所有api及第三方模块 (4)可以使用DOM直接调 ...
- NW.js使用及打包
简介 NW.js (原名 node-webkit)是一个结合了 Chromium 和 node.js 的应用运行时,通过它可以用 HTML 和 JavaScript 编写原生应用程序.它还允许开发者从 ...
- 【腾讯Bugly干货分享】iOS App 签名的原理
本文来自 WeRead 团队博客: http://wereadteam.github.io/ iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,Ce ...
- 中文代码示例之NW.js桌面应用开发初体验
先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...
- 关于Nodejs开发桌面应用。NW.js 和 Electron 优缺点分析对比
从开发角度来说,选择用 nw.js 还是 election ,区别其实不是很大.大部分工作还是在自己的 javascript 和 HTML 上.国内比较有名的,比如微信web开发工具.钉钉都是基于 n ...
随机推荐
- vue对象数组数据变化,页面不渲染
很多时候,我们习惯于这样操作数组和对象: data() { // data数据 return { arr: [1,2,3], obj:{ a: 1, b: 2 } }; }, // 数据更新 数组视图 ...
- 学习nginx从入门到实践(四) 基础知识之nginx基本配置语法
nginx基本配置语法 1.http相关 展示每次请求的请求头: curl -v http://www.baidu.com 2.nginx日志类型 error.log. access.log log_ ...
- 05.Java面向对象
一.面向对象基本概念 面向对象的特征 封装 封装是指利用抽象数据类型将数据(属性)和对数据的操作(方法)包装起来,把对象的属性和动作结合成一个独立的单位,并尽可能隐蔽对象的内部处理细节. 继承 一个类 ...
- LaTeX常用符号(持续更新)
参考网址:https://qianwenma.cn/2018/05/17/mathjax-yu-fa-can-kao/# 基本运算 1.乘法$x\times y$ x\times y 2.乘法$x^{ ...
- c#openCV图片传递-尝试读取或写入受保护的内存。这通常指示其他内存已损坏。解决方法
未处理AccessViolationException 这通常指示其他内存已损坏,这里内存损坏并非物理的内存条损坏.猜想是执行到此步骤后,内存空间被清理了,没有找到内存地址的感觉. public st ...
- Machine Learning Note
[Andrew Ng NIPS2016演讲]<Nuts and Bolts of Applying Deep Learning (Andrew Ng) 中文详解:https://mp.weixi ...
- ASP.NET WebAPI框架解析第一篇
ASP.NET WebAPI有两种寄宿模式,一种是WebHost,一种是SelfHost,为什么可以有两种模式的原因在于WebAPI有一个相对独立的消息处理管道,只要给这个消息管道传递一个封装好的对象 ...
- maven中pom.xml中配置整理: groupId、artifactId、parent、dependency、dependencyManagement区别
<groupId>com.mycompany.commonmaven</groupId> <artifactId>commonmaven</artifactI ...
- 黎活明8天快速掌握android视频教程--19_采用ListView实现数据列表显示
1.首先整个程序也是采用mvc的框架 DbOpenHelper 类 package dB; import android.content.Context; import android.databas ...
- 尚硅谷ajax视频教程2
7.7. 尚硅谷_佟刚_Ajax_典型应用_验证用户名是否可用 整个项目的目录路径如下所示 我们首先新建立一个web工程,在webroot下面新建立一个script的文件夹,导入jquer文件 接下来 ...