关于mac electron设备权限申请的方法

2020-09-18 14:41:54 浏览数 (1)

问题描述

关于刚接触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>
entitlements.mac.plistentitlements.mac.plist

2. 在package.json中配置plist。

代码语言:javascript复制
"entitlements": "entitlements.mac.plist",
"hardenedRuntime": true,
"extendInfo": {
    "NSMicrophoneUsageDescription": "请允许本程序访问您的麦克风",
    "NSCameraUsageDescription": "请允许本程序访问您的摄像头"
},
package.jsonpackage.json

配置好了之后打包出来的应用程序,在运行到设备申请使用的地方时,就会出现弹出请求设备的权限。

缺陷:目前这个方法还有个不足的地方就是在dev环境下,没有去请求麦克风的权限,导致dev还是需要依靠终端去运行,还没有找到能解决的方案,如果有大佬知道怎么解决,欢迎在评论区留言。

0 人点赞