Flutter web应用程序在调试中崩溃DUE_TO_PRIVACY_VIOLATION(相机权限)



我正在开发一些使用相机和麦克风输入的Flutter网络应用程序。为了进行开发,我在macOS(Catalina(上使用VS代码。当我启动应用程序时,Chrome实例就会启动。这个实例是某种">开发"Chrome窗口(我对Web和Flutter开发完全陌生,所以我不确定术语(,它与(比方说(">production’Chrome窗口完全分离。

问题是:

  • 当请求相机输入时,此">开发"Chrome提示用户允许访问相机和麦克风。之后如果允许访问,应用程序会立即崩溃,原因如下CCD_ 1
  • 另一方面,如果我运行web服务器(在本地机器上(使用相同的代码,并从">生产"访问该端口Chrome,一切正常。在允许访问相机和麦克风(在Chrome中(,操作系统提示其请求允许访问摄像头和麦克风(代表Chrome(,以及允许后,我得到相机输入

使用这种方法(web服务器+'production'Chrome(似乎不是进行开发的好方法,因为我不知道如何以这种方式调试代码。我知道Mac上的每个应用程序都必须定义权限使用说明才能访问相机和麦克风,如果是本机应用程序,这将是一个简单的解决方案。但在这种情况下,我不知道如何让">开发"Chrome像">productionChrome"一样运行。它的行为就像是错过了相机和麦克风使用的权利,并崩溃了。

有人知道如何克服这个障碍吗?我在设置Flutter环境时遗漏了什么吗?

附言:在这里张贴一些飞镖/飞镖代码不会有任何区别。flutter webrtc演示将以同样的方式崩溃。任何使用摄像头的网络应用程序,当在">开发"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'
  • 启动Flutter应用程序,要求提供摄像头/麦克风
  • 您将被要求获得权限,应用程序不应崩溃
  • 终端将在具有摄像头/麦克风权限的应用程序列表中,从现在起,Flutter应用程序应该可以像这样运行

有关详细信息,请参阅Visual Studio代码的Mac OS Mojave麦克风权限。

我允许对相机和麦克风使用vscode权限,但我必须首先创建这些权限。

看看这个,这是我发现它的地方:https://github.com/microsoft/vscode/issues/95062#issuecomment-751241372

最新更新