Приложение Electron компании, иногда вОбнаружение устройстваВремяCrash
, а позже, после расследования, было обнаружено, что текущее приложение не имеет разрешения на камеру и микрофон. привести кОбнаружение устройствапроизошел сбой.
Для macOS 10.14 и более поздних версий разработчики должны явным образом предоставлять разрешения на доступ к микрофону и камере своим собственным приложениям. В противном случае камера и микрофон системы не могут быть вызваны. Подробнее см.:Requesting Authorization for Media Capture on macOS
Среди них он отмечен в документе Apple.Если вы хотите использовать разрешения микрофона и камеры, вам нужно быть вplist
Вы можете указать соответствующие свойства в файле следующим образом:
- микрофон:NSMicrophoneUsageDescription
- камера:NSCameraUsageDescription
Description
Вы видите, что это свойство объясняет, почему ваша программа должна использовать микрофон и камеру.
а такжеElectron App
упаковка, обычно используетсяelectron-builderЭта библиотека используется для упаковки, и в документации этой библиотеки для упаковки Mac есть такой атрибут:extendInfo
Его цель — добавить ваши пользовательские атрибуты вplist
Файл, Inelectro-builder.yml
В файле написано так:
mac:
extendInfo:
NSMicrophoneUsageDescription: 请允许本程序访问您的麦克风
NSCameraUsageDescription: 请允许本程序访问您的摄像头
Но когда вы закончите писать это, вы обнаружите, что это не играет никакой роли, потому что эти два атрибута используются только для объяснения того, почему ваше приложение должно обращаться за разрешениями. Однако поведение при подаче заявки на разрешение не указано.
Если вы хотите указать разрешение на применение камеры и микрофона, необходимы следующие атрибуты:
- com.apple.security.device.camera
- com.apple.security.device.audio-input
И эти два свойства, есть посылка при добавлении, то есть надо включитьhardenedRuntimeЭто делается для того, чтобы укрепить целостность приложения во время выполнения, например, чтобы увидеть детали, которые мы можем видеть:Hardened Runtime Entitlements
Так что теперь давайте добавимhardenedRuntime
:
mac:
hardenedRuntime: true
extendInfo:
NSMicrophoneUsageDescription: 请允许本程序访问您的麦克风
NSCameraUsageDescription: 请允许本程序访问您的摄像头
hardenedRuntime
Это свойство, вelectron-builder
из21.1.3
Версия была по умолчаниюtrue
, пока в21.1.2 ~ 20.41.0
версии значение этого свойства по умолчанию равноfalse
. Более поздние версии не имеют этого свойства.
Тогда поведение приложения нужно использоватьentitlements
Атрибуты. код показывает, как показано ниже:
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
Укажите следующие свойства:
- com.apple.security.cs.allow-jit
- com.apple.security.cs.allow-unsigned-executable-memory
- com.apple.security.cs.allow-dyld-environment-variables
Итак, теперь финал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 должно иметь возможность нормально применять/использовать камеру и микрофон в macOS.