Приложение Electron App для камеры и микрофона. Руководство по шагам в MacOS

Electron
Приложение Electron компании, иногда вОбнаружение устройстваВремя Crash, а позже, после расследования, было обнаружено, что текущее приложение не имеет разрешения на камеру и микрофон. привести кОбнаружение устройствапроизошел сбой.

Для macOS 10.14 и более поздних версий разработчики должны явным образом предоставлять разрешения на доступ к микрофону и камере своим собственным приложениям. В противном случае камера и микрофон системы не могут быть вызваны. Подробнее см.:Requesting Authorization for Media Capture on macOS

Среди них он отмечен в документе Apple.Если вы хотите использовать разрешения микрофона и камеры, вам нужно быть вplistВы можете указать соответствующие свойства в файле следующим образом:

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Укажите следующие свойства:

Итак, теперь финал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.