如何解决电子:代码签名削弱了我在macOS上的应用程序的某些功能
目标
我的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/>
应用添加后获得了权限提示。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。