我有一个电子应用程序,需要访问相机。在Windows上它工作正常,但在MacOS上它不,甚至崩溃时,我试图要求permisson。
当我调用这个例程来检查权限状态时(如下所示),它给出了一个未定的答案。
systemPreferences.getMediaAccessStatus('camera')
然后,为了请求权限(希望显示allow/deny弹出窗口),我使用以下命令:
const { systemPreferences } = require('electron')
systemPreferences.askForMediaAccess('camera')
但当我这样做时,它会立即崩溃应用程序,并给我一个很长的详细崩溃报告,其中包括:
This app has crashed because it attempted to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an com.apple.security.device.camera key with a string value explaining to the user how the app uses this data.
此外,在应用安装的根目录中生成的Info.plist包含了所有需要的条目,我甚至将hardenedRuntime作为true包含在内。
<key>NSCameraUsageDescription</key>
<string>This app needs access to the Camera</string>
<key>com.apple.security.device.camera</key>
<true/>
<key>hardenedRuntime</key>
<true/>
最后一点...
- 我在应用程序签名方面很纠结,最后终于在构建过程中使用了有效的证书进行签名。在此之前,当我请求权限时,应用程序并没有崩溃。它根本什么都没做。当我成功地对应用程序进行签名时,应用程序就开始崩溃了。
- 我使用electron-builder来构建.dmg并从.
npm run electron:build
安装。当我通过npm run electron:serve
在开发模式下运行应用程序时,它工作得很好,甚至没有弹出权限弹出窗口。访问状态返回为授权。 - www.example.com不应该com.apple.security.device.camera是布尔型的吗?我读到的所有关于它的内容都是布尔型的。尽管错误消息要求我定义一个带有描述的字符串。(我已经尝试过了,没有做任何修改)
有什么解决办法吗?
我已经尝试过手动更改Info.plist。没有成功。我怎么才能确保我在正确的Info.plist文件上工作。有几个。我正在使用的是最大的一个,似乎是主要的一个。其他的是助手。
我也试着在MacOS系统首选项中管理权限,也没有成功。
1条答案
按热度按时间mzaanser1#
尝试添加**“com.apple.security.cs.允许未签名的可执行内存”:真实**