$ cordovaCapture.captureVideo呼叫崩溃在iOS 10.1上的科尔多瓦应用程序

问题描述:

我有一个Cordova应用程序(针对Android和iOS编写),在一定的安全性调整一个月后,一直在使用相当数量的用户或两个前。现在随着更新的10.1升级(目前在10.1.1上测试),我发现调用视频捕获功能的尝试完全崩溃了Cordova,没有任何从JS角度进行调试的选项。 Android方面没有问题。这只是对iOS的最新更新,并没有代码或插件更新或更改。

我们使用最新的cordova-plugin-media-capture plugin,v1.4.0和ngCordova。打电话给这个插件,通过$cordovaCapture.captureImage拍摄照片在iOS 10.1.1中正常工作。这只是拨打电话$cordovaCapture.captureVideo,它完全立即崩溃科尔多瓦。我已经看过Xcode,以防有任何新的或者失控的设置,并且一切看起来都正确,因此欢迎任何关于解决这个问题的建议。

早些时候(一个月或两个月前),我们解决了使用科尔多瓦 - 插件的设置挂机插件与这些iOS的设置(如图片段)config.xml中的新的iOS 10权限问题:

<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 
}) 

希望其他人管理,以解决同样的问题,并愿意分享的解决方法。

+0

FYI应用程序最初使用Cordova v6.2.0。我升级到最新的v6.4.0并重新测试,但获得相同的iOS问题。 –

+0

对于两位亲切地建议我看麦克风权限的人。我已经深入挖掘,这似乎是它崩溃的原因(来自崩溃报告)。因为我的config.xml设置都包含在内,所以必须将某些东西搞砸,并且我也可以在Xcode上看到原因字符串是目前,但该应用程序似乎并没有它。 –

+0

尝试将话筒设置保存在config.xml中,然后'cordova clean ios'然后重建并运行。诀窍,我现在可以再次录制视频。所以根本问题是麦克风设置,但在构建过程中还有其他问题。 –

您错过了录制视频时需要的NSMicrophoneUsageDescription

奇怪的是,插件的1.4.0版本应该添加所有的UsageDescriptions,你不应该需要cordova-plugin-settings-hook,但是由于某种原因,如果你需要添加插入。

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

+0

感谢您的建议。不胜感激!将研究这一点,如果解决,接受答案。有点奇怪,我们不得不在10.0版本中解决权限问题,然后一切都奏效。也许这个权限只能在10.1中执行。 –

+0

不幸的是没有解决问题。(仍然崩溃。)请问+1,因为无论如何这都是需要的权限。 –

+0

跟进...崩溃日志(来自Xcode设备菜单)显示丢失的麦克风使用字符串应该归咎于崩溃,即使他们在Xcode的信息部分。所以,添加麦克风设置和运行cordova clean ios命令的组合终于成功了。由于您是第一个推荐麦克风设置的人,而且您甚至使用了“干净”这个词,所以将其标记为正确答案。 –

在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

+0

感谢分享。这不幸的是没有任何区别。 –

+0

正如你在这张票上的其他地方看到的那样,话筒设置组合和一个cordova clean ios命令组合起来了。 jcesarmobile首先指出了麦克风的设置,所以会在那里奖励,但这也是一个很好的答案,对于不想使用我们已经使用的settings-hook插件的人来说,+1也是如此。 –