$cordovaCapture.captureVideo 在 iOS 10.1 上调用使 Cordova 应用程序崩溃

$cordovaCapture.captureVideo Call Crashes Cordova App on iOS 10.1

我有一个 Cordova 应用程序(为 Android 和 iOS 编写)在生产环境中运行良好,有相当数量的用户,包括在 iOS 10.0 上经过必要的安全保护后一两个月前调整。现在随着最近的 10.1 升级,(目前在 10.1.1 上测试)我发现尝试调用视频捕获功能会完全崩溃 Cordova,没有任何选项可以从 JS 角度进行调试。 Android 方面没有问题。这只是 iOS 的最新更新,没有任何代码或插件更新或更改。

我们将最新的 cordova-plugin-media-capture 插件 v1.4.0 与 ngCordova 一起使用。通过 $cordovaCapture.captureImage 调用此插件拍照在 iOS 10.1.1 中工作正常。它只是对 $cordovaCapture.captureVideo 的调用,它会立即使 Cordova 崩溃。我查看了 Xcode 以防有任何新的或异常的设置并且一切似乎都是正确的,因此欢迎任何解决此问题的建议。

早些时候(一两个月前)我们使用 cordova-plugin-settings-hook 插件解决了新的 iOS 10 权限问题 =33=] config.xml 中的设置(显示的片段):

<platform name="ios">
    <config-file parent="NSLocationWhenInUseUsageDescription" platform="ios" target="*-Info.plist">
        <string>Reason goes here...</string>
    </config-file>
    <config-file parent="NSCameraUsageDescription" platform="ios" target="*-Info.plist">
        <string>Reason goes here....</string>
    </config-file>
    <config-file parent="NSPhotoLibraryUsageDescription" platform="ios" target="*-Info.plist">
        <string>Reason goes here...</string>
    </config-file>

我使用 Xcode 确认了这些设置。我们实际调用时传入的参数如下:

$cordovaCapture.captureVideo
({
    limit:      1,  // how many clips to record (iOS must be 1)
    duration:   300 // maximum length (in seconds) = 5 minutes
})

希望其他人设法解决了同样的问题并愿意分享解决方法。

您缺少录制视频时需要的 NSMicrophoneUsageDescription

奇怪的是,1.4.0版本的插件应该添加所有的UsageDescriptions,你不应该需要cordova-plugin-settings-hook,但由于某些原因,如果你需要添加它就不起作用了那个插件。

在一个只有 1.4.0 媒体插件的全新项目中,它按预期工作,没有崩溃。

在iOS 10 更新中,必须添加插件以及具有权限描述的变量。 在您的 config.xml of cordova 项目中使用以下代码。

<plugin name="cordova-plugin-media-capture" spec="1.4.0">
    <variable name="CAMERA_USAGE_DESCRIPTION" value="To take videos"/>
    <variable name="MICROPHONE_USAGE_DESCRIPTION" value="To record voice while taking videos"/>
    <variable name="PHOTO_LIBRARY_USAGE_DESCRIPTION" value="To provide photo browsing."/>
</plugin>

这将解决问题。

参考 ios 怪癖:https://github.com/apache/cordova-plugin-media-capture