mac nwjs程序签名公证(其他mac程序也一样适用)

为什么需要公证

mac os14.5之后的系统,如果不对应用进行公证,安装,打开,权限使用上都会存在问题,而且有些问题你强制开启(sudo spctl --master-disable)使用后可能会有另外的问题,

例如在安全和隐私里面想开启麦克风和视像头的时候找不到自己的应用;或是无法收到桌面通知(这些问题也是有的电脑会有的不会,可能跟以前是否已经安装过有关,具体的机制没有细究,总之就是可能出现未知问题)

如何公证?

公证前准备:

开发者账号中,必须生成两份重要证书:

develop ID Application 证书 ------ 用来对 .app 进行分发签名。类似于 iOS 的 inhouse enterprise(企业内部分发应用)

develop ID Installer 根证书 ------ 用来对打包生成的 .dmg, .pkg 进行签名

一个主账号授权的副账号,用来做 .pkg / .dmg 的公正用。(可以直接用主账号)

这个副账号对应的专有密钥(需要在 https://appleid.apple.com 中生成)

副账号所属的 Team ID

如何生成 develop ID Application 证书 和的 develop ID Installer 根证书

Sign In - Apple

Application证书安装后,设置成始终信任,避免老是频繁询问需要输入密码。

打包的设备需要安装这2份证书,并且需要安装在钥匙串的登录里面,双击安装默认好像是安装在系统,如果安装在这里签名命令执行可能失败。

如何获取用于公证的 专有密钥

Manage your Apple Account

如何创建appid(app 的 bundle ID)? (mac的公证不确认是否需要该项操作,目前是有com.moa.pc和com.sangfor.meeting)

Sign In - Apple

公证主要用到几个命令

1.签名应用

签名的要求一:是app里面的所有2进制文件,.app应用都需要签名,并且app包里面不能包含zip等压缩包

签名的要求二:签名的应用必须开启hardened runtime

签名的命令:

codesign --verbose --force --deep --strict --options runtime --timestamp --sign "develop ID Application 证书" --entitlements neededToRun.entitlements "需要签名的文件或应用"

命令里面neededToRun.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.device.camera</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.microphone</key>
    <true/>
    <key>com.apple.security.automation.apple-events</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
  </dict>
</plist>

例如:

codesign --verbose --force --deep --strict --options runtime --timestamp --sign "Developer ID Application: XXX" --entitlements neededToRun.entitlements "./XXX.app/Contents/MacOS/nwjs"

neededToRun.entitlements这个文件跟hardened runtime相关,如果需要开启一些权限,处理配置plist之外还要配置这个文件。

签名需要注意,签名也是有顺序的,一般是从文件夹最里面前到外面,如果包有其他的修改,nwjs这个文件都需要重新签名。对应sing.js里面的sign([`${contents}/MacOS/nwjs`]);

2. 打包 签名pkg包

命令:

pkgbuild --component 打包的应用 --install-location 安装目录 --scripts 安装脚本相关 --version 版本 --identifier pkgid --sign install的签名证书 输出的pkg包名字

3.验证签名结果( 验证 签名成功不等于 所有app里面所有文件都签名成功

命令:

codesign --verify -vvvv "应用或文件路径"

例如:

codesign --verify -vvvv "./XXXapp/Contents/MacOS/nwjs"

4.上传公证pkg包

命令:

xcrun notarytool submit --apple-id 账号 --password 密码 --team-id ID号 xxxxx.pkg

5. 检测公证结果

一般执行完上述第4步后,就可以开始使用以下命令查看公证结果,立即检测的话一般是处于公证中的状态,这个状态一般持续1分钟左右,一般等个1-2分钟后就会有结果。

命令:

xcrun notarytool info --apple-id 账号 --password 密码 --team-id ID号 RequestUUID

例如:

xcrun notarytool info --apple-id 账号 --password 密码 --team-id ID号 0818c020-fd0c-4886-a056-056481858828

相关推荐
REDcker10 小时前
macOS「系统数据」暴涨到 几百GB?一篇文章教你安全清理(含排查顺序)
macos
sysinside11 小时前
macOS Sequoia 15.7.2 (24G325) 正式版 ISO、IPSW、PKG 下载
macos·sequoia
只是有点小怂11 小时前
macOS 没有像 Windows 上的 MobaXterm 的工具
macos
小雨青年12 小时前
环境准备 Windows Mac 下 Docker Desktop 的安装与镜像源加速
windows·macos·docker
数据知道13 小时前
一文掌握 MongoDB 详细安装与配置(Windows / Linux / macOS 全平台)
linux·数据库·windows·mongodb·macos
知1而N13 小时前
电脑上运行APK文件(Android应用程序包),需要借助特定的软件或功能,因为Windows/macOS/Linux系统无法原生直接运行安卓应用
android·macos·电脑
island131413 小时前
Mac 用户久等了!节点小宝 4.0 macOS版,正式登陆!
macos
440资源库13 小时前
从 Windows 转向 macOS:数据迁移完整指南
windows·macos·win向maos迁移数据
Lii713 小时前
Mac OS 26/15动态屏幕保护程序/壁纸路径地址
macos