Flutter Web 应用程序在调试中崩溃 DUE_TO_PRIVACY_VIOLATION(相机权限)
Flutter web app is crashing DUE_TO_PRIVACY_VIOLATION in debug (camera permissions)
我正在开发一些使用摄像头和麦克风输入的 Flutter 网络应用程序。对于开发,我在 macOS (Catalina) 上使用 VS Code。当我启动应用程序时,Chrome 实例启动。这个实例是某种'development'Chromewindow(我对Web和Flutter开发完全陌生,所以我不确定术语)并且它与(比方说)'production' Chrome window.
完全分开
问题是:
- 当请求相机输入时,这个'开发'Chrome
提示用户允许访问相机和麦克风。后
允许访问,应用程序立即崩溃,原因
__CRASHING_DUE_TO_PRIVACY_VIOLATION__
.
- 另一方面,如果我 运行 网络服务器(在本地机器上)
使用相同的代码并从“production”访问该端口
Chrome,一切正常。允许访问后
摄像头和麦克风(在 Chrome 中),OS 提示其请求
允许访问摄像头和麦克风(代表 Chrome),以及
允许那个之后,我得到了相机输入。
使用这种方法 (web-server + 'production' Chrome) 似乎不是进行开发的好方法,因为我不知道如何以这种方式调试我的代码。
我知道 Mac 上的每个应用程序都必须定义 entitlements 和 usage descriptions 才能访问相机和麦克风,这将是如果它是本机应用程序,则很容易修复。但是在这种情况下,我不确定如何让'development'Chrome 表现得像'production'Chrome.它就像缺少相机和麦克风使用的 entitlements 和崩溃一样。
有没有人知道如何克服这个障碍?我在设置 Flutter 环境时遗漏了什么吗?
P.S。在这里发布一些 Flutter/Dart 代码不会有任何区别。 flutter-webrtc-demo 会以同样的方式崩溃。任何使用摄像头的 Web 应用程序,当在此“development”Chrome 实例中打开时,都会以同样的方式崩溃(我只尝试过使用 Teams,但我'我很确定所有其他人都会这样做)。
崩溃日志:
Identifier: com.google.Chrome
Version: 85.0.4183.83 (4183.83)
Code Type: X86-64 (Native)
Parent Process: dart [11176]
Responsible: Electron [5097]
User ID: 515352633
Date/Time: 2020-09-02 12:55:10.488 +0200
OS Version: Mac OS X 10.15.5 (19F101)
Report Version: 12
Bridge OS Version: 4.5 (17P5300)
Anonymous UUID: 9159D7A7-AA5D-B3F0-C032-A79F092DC4C1
Time Awake Since Boot: 9100 seconds
System Integrity Protection: enabled
Crashed Thread: 31 Dispatch queue: com.apple.root.default-qos
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace TCC, Code 0x0
Application Specific Information:
Calling encodeRestorableStateWithCoder: on window of class 'NSKVONotifying_BrowserNativeWidgetWindow' with title 'localhost:54518/#/' (delegate is 0x7fca60ec9ac0)
...............
Thread 31 Crashed:: Dispatch queue: com.apple.root.default-qos
0 libsystem_kernel.dylib 0x00007fff6bdb3ad6 __abort_with_payload + 10
1 libsystem_kernel.dylib 0x00007fff6bdb53df abort_with_payload_wrapper_internal + 80
2 libsystem_kernel.dylib 0x00007fff6bdb5411 abort_with_payload + 9
3 com.apple.TCC 0x00007fff6249759f __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 163
4 com.apple.TCC 0x00007fff62495531 __TCCAccessRequest_block_invoke.114 + 500
5 com.apple.TCC 0x00007fff62495a58 __tccd_send_message_block_invoke + 231
6 libxpc.dylib 0x00007fff6be9828f _xpc_connection_reply_callout + 36
7 libxpc.dylib 0x00007fff6be98217 _xpc_connection_call_reply_async + 69
8 libdispatch.dylib 0x00007fff6bbf96c2 _dispatch_client_callout3 + 8
9 libdispatch.dylib 0x00007fff6bc1015d _dispatch_mach_msg_async_reply_invoke + 369
10 libdispatch.dylib 0x00007fff6bc085f9 _dispatch_kevent_worker_thread + 1316
11 libsystem_pthread.dylib 0x00007fff6be53a85 _pthread_wqthread + 362
12 libsystem_pthread.dylib 0x00007fff6be52b77 start_wqthread + 15
这似乎与此处的问题类似:https://github.com/microsoft/vscode/issues/95062。
Flutter 应用程序需要通过您用于调试的任何 IDE 权限。
- 运行 VSCode 从终端使用命令
'sudo /Applications/Visual\ Studio\ Code.app/Contents/MacOS/Electron'
- 启动请求 camera/microphone.
的 Flutter 应用程序
- 系统会要求您提供权限,应用程序不应崩溃。
- Terminal 将在具有 camera/mic 权限的应用程序列表中,Flutter 应用程序应该在 运行 从现在开始这样工作。
有关详细信息,请参阅 Mac OS Mojave microphone permission for Visual Studio Code。
我可以通过允许相机和麦克风的 vscode 权限,但我必须首先创建这些授权权限。
看看这个,这是我找到它的地方:
https://github.com/microsoft/vscode/issues/95062#issuecomment-751241372
我正在开发一些使用摄像头和麦克风输入的 Flutter 网络应用程序。对于开发,我在 macOS (Catalina) 上使用 VS Code。当我启动应用程序时,Chrome 实例启动。这个实例是某种'development'Chromewindow(我对Web和Flutter开发完全陌生,所以我不确定术语)并且它与(比方说)'production' Chrome window.
完全分开问题是:
- 当请求相机输入时,这个'开发'Chrome
提示用户允许访问相机和麦克风。后
允许访问,应用程序立即崩溃,原因
__CRASHING_DUE_TO_PRIVACY_VIOLATION__
. - 另一方面,如果我 运行 网络服务器(在本地机器上) 使用相同的代码并从“production”访问该端口 Chrome,一切正常。允许访问后 摄像头和麦克风(在 Chrome 中),OS 提示其请求 允许访问摄像头和麦克风(代表 Chrome),以及 允许那个之后,我得到了相机输入。
使用这种方法 (web-server + 'production' Chrome) 似乎不是进行开发的好方法,因为我不知道如何以这种方式调试我的代码。 我知道 Mac 上的每个应用程序都必须定义 entitlements 和 usage descriptions 才能访问相机和麦克风,这将是如果它是本机应用程序,则很容易修复。但是在这种情况下,我不确定如何让'development'Chrome 表现得像'production'Chrome.它就像缺少相机和麦克风使用的 entitlements 和崩溃一样。
有没有人知道如何克服这个障碍?我在设置 Flutter 环境时遗漏了什么吗?
P.S。在这里发布一些 Flutter/Dart 代码不会有任何区别。 flutter-webrtc-demo 会以同样的方式崩溃。任何使用摄像头的 Web 应用程序,当在此“development”Chrome 实例中打开时,都会以同样的方式崩溃(我只尝试过使用 Teams,但我'我很确定所有其他人都会这样做)。
崩溃日志:
Identifier: com.google.Chrome
Version: 85.0.4183.83 (4183.83)
Code Type: X86-64 (Native)
Parent Process: dart [11176]
Responsible: Electron [5097]
User ID: 515352633
Date/Time: 2020-09-02 12:55:10.488 +0200
OS Version: Mac OS X 10.15.5 (19F101)
Report Version: 12
Bridge OS Version: 4.5 (17P5300)
Anonymous UUID: 9159D7A7-AA5D-B3F0-C032-A79F092DC4C1
Time Awake Since Boot: 9100 seconds
System Integrity Protection: enabled
Crashed Thread: 31 Dispatch queue: com.apple.root.default-qos
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace TCC, Code 0x0
Application Specific Information:
Calling encodeRestorableStateWithCoder: on window of class 'NSKVONotifying_BrowserNativeWidgetWindow' with title 'localhost:54518/#/' (delegate is 0x7fca60ec9ac0)
...............
Thread 31 Crashed:: Dispatch queue: com.apple.root.default-qos
0 libsystem_kernel.dylib 0x00007fff6bdb3ad6 __abort_with_payload + 10
1 libsystem_kernel.dylib 0x00007fff6bdb53df abort_with_payload_wrapper_internal + 80
2 libsystem_kernel.dylib 0x00007fff6bdb5411 abort_with_payload + 9
3 com.apple.TCC 0x00007fff6249759f __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 163
4 com.apple.TCC 0x00007fff62495531 __TCCAccessRequest_block_invoke.114 + 500
5 com.apple.TCC 0x00007fff62495a58 __tccd_send_message_block_invoke + 231
6 libxpc.dylib 0x00007fff6be9828f _xpc_connection_reply_callout + 36
7 libxpc.dylib 0x00007fff6be98217 _xpc_connection_call_reply_async + 69
8 libdispatch.dylib 0x00007fff6bbf96c2 _dispatch_client_callout3 + 8
9 libdispatch.dylib 0x00007fff6bc1015d _dispatch_mach_msg_async_reply_invoke + 369
10 libdispatch.dylib 0x00007fff6bc085f9 _dispatch_kevent_worker_thread + 1316
11 libsystem_pthread.dylib 0x00007fff6be53a85 _pthread_wqthread + 362
12 libsystem_pthread.dylib 0x00007fff6be52b77 start_wqthread + 15
这似乎与此处的问题类似:https://github.com/microsoft/vscode/issues/95062。 Flutter 应用程序需要通过您用于调试的任何 IDE 权限。
- 运行 VSCode 从终端使用命令 'sudo /Applications/Visual\ Studio\ Code.app/Contents/MacOS/Electron'
- 启动请求 camera/microphone. 的 Flutter 应用程序
- 系统会要求您提供权限,应用程序不应崩溃。
- Terminal 将在具有 camera/mic 权限的应用程序列表中,Flutter 应用程序应该在 运行 从现在开始这样工作。
有关详细信息,请参阅 Mac OS Mojave microphone permission for Visual Studio Code。
我可以通过允许相机和麦克风的 vscode 权限,但我必须首先创建这些授权权限。
看看这个,这是我找到它的地方: https://github.com/microsoft/vscode/issues/95062#issuecomment-751241372