问题描述
关于刚接触electron开发的前端来说,肯定会碰到这个问题,在electron代码跑到了要使用摄像头权限或者麦克风权限的时候,程序突然就崩溃了。如下图所示。
这是由于mac的机制问题,当应用要去调用设备但是没有设备的使用权限时,就会崩溃掉。那么我们如何来解决这种问题呢?
解决方案
方案一:使用终端去运行
我的项目是用vscode去编写的,使用的终端也是vscode自带的,所以vscode没有设备使用权限的话,从vscode运行起来的项目也是没有权限的,那么我们可以用mac自己的终端去运行,终端是有设备使用权限的。
查看权限的步骤如下:
只要终端的设备权限有勾选上,从终端运行项目时,就可以正常使用了。
方案二(推荐):配置plist文件
方案一只能解决dev环境的问题,如果是碰到了打包之后的应用程序无法使用设备权限的话,方案一行不通。
plist文件是mac项目用来配置系统环境的一个文件,electron也可以用这个文件进行配置。
步骤如下:
1. 在项目根目录下创建一个entitlements.mac.plist文件,并写入下面的代码;
代码语言:javascript复制<?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.allow-dyld-environment-variables</key>
<true/>
<key>com.apple.security.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
</dict>
</plist>
2. 在package.json中配置plist。
代码语言:javascript复制"entitlements": "entitlements.mac.plist",
"hardenedRuntime": true,
"extendInfo": {
"NSMicrophoneUsageDescription": "请允许本程序访问您的麦克风",
"NSCameraUsageDescription": "请允许本程序访问您的摄像头"
},
配置好了之后打包出来的应用程序,在运行到设备申请使用的地方时,就会出现弹出请求设备的权限。
缺陷:目前这个方法还有个不足的地方就是在dev环境下,没有去请求麦克风的权限,导致dev还是需要依靠终端去运行,还没有找到能解决的方案,如果有大佬知道怎么解决,欢迎在评论区留言。