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 ...
随机推荐
- @Autowired 注解详解
前言 我们平时使用 Spring 时,想要 依赖注入 时使用最多的是 @Autowired 注解了,本文主要讲解 Spring 是如何处理该注解并实现 依赖注入 的功能的. 正文 首先我们看一个测试用 ...
- GPIO功能框图
(1)保护二极管 引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入, 当引脚电压高于 VDD_FT 或 VDD 时,上方的二极管导通吸收这个高电压,当引脚 电压低于 VSS 时,下方的 ...
- 14.Django-JWT
一.基于JWT的Token登录认证 1. JWT简介 json Web Token(缩写JWT)是目前最流行的跨域认证解决方案 session登录的认证方案是看,用户从客户端传递用户名和密码登录信息, ...
- vim中的替换操作
在vim中 :s(substitute)命令用于查找并替换字符串.使用方法如下: :s/<find-this>/<replace-with-this>/<flags> ...
- Android学习笔记Tab代替ActionBar做的顶部导航
1.先准备5个Fragement作为标签页 package com.lzp.youdaotab; import android.os.Bundle; import android.view.Layou ...
- APP自动化1——Appium+pycharm自动化环境搭建全流程
1. 安装python3,pycharm,可参考之前写的文档:https://www.cnblogs.com/chenweitoag/p/13154815.html 2. 准备以下必要工具: 基于wi ...
- 全网最全fiddler使用教程和fiddler如何抓包(fiddler手机抓包)-笔者亲测
一.前言 抓包工具有很多,比如常用的抓包工具Httpwatch,通用的强大的抓包工具Wireshark.为什么使用fiddler?原因如下:1.Wireshark是通用的抓包工具,但是比较庞大,对于只 ...
- TestLoader源码解析
def loadTestsFromTestCase(self, testCaseClass) #看名称分析:从TestCase找测试集--那么就是把我们的def用例加载到testSuit里面 def ...
- JavaWeb网上图书商城完整项目--day02-27.查询所有分类功能之Servlet和Service层
我们在上面实现了数据库层的代码,现在我们来实现业务层和Servlet层的代码:业务层的代码如下: package com.weiyuan.goods.category.service; import ...
- 微信小程序点击保存图片到本地相册——踩坑
在微信小程序中要保存图片到本地相册,需要获取相册权限. 总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.dow ...