问题描述
目标
我的Electron应用程序由一个前端进程和一个后端子进程组成。在macOS上,后端需要在macOS上具有某些功能,例如访问用户桌面和麦克风。后端是通过Xcode构建的,并使用相同的开发人员ID进行了代码签名。
首次运行时,将要求用户根据功能授予权限。在随后的启动中,该应用应在没有用户干预的情况下平稳运行。在通过Electron进行代码签名之前,效果很好。
我准备通过electron-osx-sign
对应用进行代码签名,并希望该应用正常运行。
问题
在用Electron签名时,我以这种方式使用记录在案的electron-forge
选项
"osxSign": {
"entitlements": "entitlements.plist","entitlements-inherit": "entitlements.plist","identity": "Mac Developer: ME (my id)"
},"osxNotarize": "require:./notarize.js",
我的应享权利
<?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.cs.allow-jit</key>
<true/>
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
<true/>
<key>com.apple.security.cs.debugger</key>
<true/>
<key>com.apple.security.cs.disable-library-validation</key>
<true/>
<key>com.apple.security.cs.disable-executable-page-protection</key>
<true/>
<key>com.apple.security.automation.apple-events</key>
<true/>
</dict>
</plist>
在这种情况下,公证脚本返回false
。
此后,在第一次运行时,不再提示用户权限。许可似乎是默默地授予的。
我玩过其他选项,例如
"gatekeeper-assess": false,"hardened-runtime": true,"signature-flags": "library"
问题
行为是设计使然吗?在有和没有代码签名的情况下,我应如何实现预期的行为?
解决方法
我自己解决了。
问题既不是现有的权利条目,也不是package.json
选项,而是缺少的权利条目:
<key>com.apple.security.get-task-allow</key>
<true/>
应用添加后获得了权限提示。