公司的 Electron 應用,偶爾會在 設備檢測 時Crash
,後來通過排查發現是當前 App 沒有攝像頭和麥克風的權限。致使在 設備檢測 時出現了崩潰。
macOS 10.14 及以上版本,開發者必須對其本身的應用明確授予麥克風、攝像頭權限。不然沒法調用系統的攝像頭、麥克風。如想見詳情,可見: Requesting Authorization for Media Capture on macOSmacos
其中 Apple 文檔裏標註了,若是你想使用麥克風、攝像頭權限則須要在 plist
文件裏指定相關的屬性才能夠,以下:安全
這兩個屬性從後面的 Description
就能看到這是一個說明你的程序爲何要使用麥克風和攝像頭的屬性。bash
而 Electron App
打包,通常都是使用 electron-builder 這個庫來進行打包,而這個庫的文檔裏針對於 mac 打包,有這麼一個屬性: extendInfo
他的用途是把你的自定義的屬性加入到 plist
文件裏,在 electro-builder.yml
文件裏的寫法以下:app
mac:
extendInfo:
NSMicrophoneUsageDescription: 請容許本程序訪問您的麥克風
NSCameraUsageDescription: 請容許本程序訪問您的攝像頭複製代碼
可是當你這麼寫完會發現,並無起到任何的做用,由於這兩個屬性只是用於說明你的應用爲何要申請權限。可是卻沒有指定申請權限的行爲。electron
若是要指定申請攝像頭、麥克風的權限,須要如下的屬性:ui
而這兩個屬性,在添加時有一個前提,就是你必須開啓了 hardenedRuntime,這個東西是爲了增強應用運行時的完整性,如想見詳情,可見: Hardened Runtime Entitlementsspa
那麼如今咱們再添加一下 hardenedRuntime
:code
mac:
hardenedRuntime: true
extendInfo:
NSMicrophoneUsageDescription: 請容許本程序訪問您的麥克風
NSCameraUsageDescription: 請容許本程序訪問您的攝像頭複製代碼
hardenedRuntime
這個屬性,在 electron-builder
的 21.1.3
版本已經默認爲 true
,而在 21.1.2 ~ 20.41.0
版本里,這個屬性的默認值是 false
。再日後的版本里沒有這個屬性。orm
而後在申請的行爲須要利用 entitlements
屬性。代碼以下:xml
electron-builder.yml
mac:
entitlements: entitlements.mac.plist
hardenedRuntime: true
extendInfo:
NSMicrophoneUsageDescription: 請容許本程序訪問您的麥克風
NSCameraUsageDescription: 請容許本程序訪問您的攝像頭複製代碼
entitlements.mac.plist
<?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.device.audio-input</key>
<true/>
<key>com.apple.security.device.camera</key>
<true/>
</dict>
</plist>複製代碼
可是當你這麼嘗試的時候,會發現的應用打開會直接崩潰,亦或者根本沒法正常的打包。
這是由於當你開啓了 hardenedRuntime
來增強應用的安全性時,那麼你須要把這個安全性放寬一點。也就是說你須要在 entitlements.mac.plist
裏在指定一下下面的屬性:
那麼如今最終的 entitlements.mac.plist
內容以下:
<?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>複製代碼
自此,你的 Electron App 就應該能夠在 macOS 上正常申請/使用攝像頭和麥克風了。