打开相机需要 2-3 分钟,并导致状态栏在 ionic 3 应用程序中消失

Opening Camera takes 2-3 minutes and causes status bar to disappear in ionic 3 app

我们有一个 ionic 3 应用程序,它使用相机和图库来 select 图像。我正在展示一个动作 sheet,用户可以 select 画廊或相机到 select 图像。

错误

尝试在应用中打开相机时,需要很长时间才能请求许可并开始拍摄图像。与此同时,应用程序只是冻结。捕获图像后,状态栏消失。 它抛出以下堆栈跟踪;

  Main Thread Checker: UI API called on a background thread: -[UIImagePickerController init]
PID: 3140, TID: 1450459, Thread name: (none), Queue name: com.apple.root.default-qos, QoS: 0
Backtrace:
4   ManyTutors                          0x00000001027a87a4 +[CDVCameraPicker createFromPictureOptions:] + 112
5   ManyTutors                          0x00000001027a2d1c __25-[CDVCamera takePicture:]_block_invoke + 1148
6   libdispatch.dylib                   0x00000001030c3bcc _dispatch_call_block_and_release + 32
7   libdispatch.dylib                   0x00000001030c56c0 _dispatch_client_callout + 20
8   libdispatch.dylib                   0x00000001030c80ec _dispatch_queue_override_invoke + 952
9   libdispatch.dylib                   0x00000001030d8ae0 _dispatch_root_queue_drain + 364
10  libdispatch.dylib                   0x00000001030d9488 _dispatch_worker_thread2 + 140
11  libsystem_pthread.dylib             0x00000001f6dbb7c8 _pthread_wqthread + 216
12  libsystem_pthread.dylib             0x00000001f6dc275c start_wqthread + 8
2021-01-11 17:13:01.703428+0800 ManyTutors[3140:1450459] [reports] Main Thread Checker: UI API called on a background thread: -[UIImagePickerController init]
PID: 3140, TID: 1450459, Thread name: (none), Queue name: com.apple.root.default-qos, QoS: 0
Backtrace:
4   ManyTutors                          0x00000001027a87a4 +[CDVCameraPicker createFromPictureOptions:] + 112
5   ManyTutors                          0x00000001027a2d1c __25-[CDVCamera takePicture:]_block_invoke + 1148
6   libdispatch.dylib                   0x00000001030c3bcc _dispatch_call_block_and_release + 32
7   libdispatch.dylib                   0x00000001030c56c0 _dispatch_client_callout + 20
8   libdispatch.dylib                   0x00000001030c80ec _dispatch_queue_override_invoke + 952
9   libdispatch.dylib                   0x00000001030d8ae0 _dispatch_root_queue_drain + 364
10  libdispatch.dylib                   0x00000001030d9488 _dispatch_worker_thread2 + 140
11  libsystem_pthread.dylib             0x00000001f6dbb7c8 _pthread_wqthread + 216
12  libsystem_pthread.dylib             0x00000001f6dc275c start_wqthread + 8


[Camera] Failed to read exposureBiasesByMode dictionary: Error Domain=NSCocoaErrorDomain Code=4864 "* -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]: data is NULL" UserInfo={NSDebugDescription=* -[NSKeyedUnarchiver _initForReadingFromData:error:throwLegacyExceptions:]: data is NULL}

预计会发生什么?

当我第一次 select 相机时,它应该立即请求许可,在给予许可后它应该拍照并在应用程序中使用该照片。

实际发生了什么?

当我第一次点击相机时,需要 2 多分钟才能显示权限对话框,当我们返回应用程序时点击图片后,应用程序 header 消失并且应用程序开始滞后并且无法正常工作。

环境、平台、设备

我只在 IOS 个应用中遇到过这个问题。 Android 工作正常。对于IOS,我已经在模拟器上测试过,在调试模式下在真实设备上测试过,也通过上传来试飞。

版本信息

  cli packages: (C:\nvm\v10.15.1\node_modules)

    @ionic/cli-utils  : 1.19.2
    ionic (Ionic CLI) : 3.20.0

global packages:

    cordova (Cordova CLI) : not installed

local packages:

    @ionic/app-scripts : 3.2.4
    Cordova Platforms  : android 7.0.0 ios 5.0.1
    Ionic Framework    : ionic-angular 3.9.10

System:

    Android SDK Tools : 26.1.1
    Node              : v10.15.1
    npm               : 6.4.1
    OS                : Windows 10

Versions:

    Xcode Version   : 12
    IOS Version       : 14
    


任何建议将不胜感激。

缓慢问题在 中得到解答。 您需要编辑 src/ios/CDVCamera.m 以移动代码块,如其他 post.

中所述

另请参阅 this GitHub issue 处的混乱情况,其中没有人合并修复程序。