【问题标题】:$cordovaCapture.captureVideo Call Crashes Cordova App on iOS 10.1$cordovaCapture.captureVideo Call 在 iOS 10.1 上使 Cordova 应用程序崩溃
【发布时间】:2016-12-07 00:47:01
【问题描述】:

我有一个 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 权限问题,并在配置中使用了这些 iOS 设置(显示为 sn-p) .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
})

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

【问题讨论】:

  • 仅供参考的应用程序最初使用的是 Cordova v6.2.0。我升级到最新的 v6.4.0 并重新测试,但遇到相同的 iOS 问题。
  • 请两位建议我查看麦克风权限。我已经深入挖掘,这似乎是它崩溃的原因(来自崩溃报告。)必须在某个地方搞砸了,因为我包含了你的 config.xml 设置,而且我也可以在 Xcode 上看到原因字符串是存在,但该应用似乎没有它。
  • 尝试将麦克风设置保留在 config.xml 中,然后 cordova clean ios 然后重建并运行。成功了,我现在可以再次录制视频了。所以根本问题是麦克风设置,但在构建过程中还有其他问题。

标签: cordova cordova-plugins ios10 video-capture ngcordova


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的建议。非常感激!将对此进行调查,如果解决,请接受答案。有点奇怪,我们必须在 10.0 中解决权限问题,然后一切正常。也许此权限仅在 10.1 中强制执行。
  • 很遗憾没有解决问题。 (仍然崩溃。)将 +1,因为无论如何这是必需的权限。
  • 跟进... 崩溃日志(来自 Xcode 设备菜单)显示丢失的麦克风使用字符串是崩溃的罪魁祸首,即使它们位于 Xcode 的信息部分。因此,添加麦克风设置和运行 cordova clean ios 命令的组合终于成功了。由于您是第一个建议麦克风设置的人,而且您甚至使用了“干净”这个词 :) 会将其标记为正确答案。
【解决方案2】:

在 iOS 10 更新中,插件必须与具有权限描述的变量一起添加。 在你的 Cordova 项目的 config.xml 中使用下面的代码。

<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

【讨论】:

  • 感谢分享。不幸的是,这并没有什么不同。
  • 正如您在这张票的其他地方看到的那样,麦克风设置和 cordova clean ios 命令的组合就可以了。 jcesarmobile 首先指出了麦克风设置,因此将在那里奖励,但这也是一个不错的答案,对于不想使用我们已经在使用的设置挂钩插件的人来说,+1 也是如此。
猜你喜欢
  • 2018-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2015-12-29
  • 2018-05-09
相关资源
最近更新 更多