由于未捕获的异常“ NSUnknownKeyException”而终止应用程序,原因:setValue:forUndefinedKey,_requiresUserActionForMediaPlayback

时间:2018-10-02 10:43:06

标签: xcode ionic3

我正在尝试使用xcode模拟器,但在启动时始终出现此错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<WKWebViewConfiguration 0x7f9dce800d40> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key _requiresUserActionForMediaPlayback.'

我尝试卸载/重新安装cordova-plugin-ionic-webview,并用尽了我可以在SO上找到的所有解决方案,但它们没有任何作用。

这是一个离子Cordova项目,因此我无法更改xcode中的任何代码,因为下次我构建该项目时,它将被覆盖。任何其他解决方案将不胜感激。

我不确定是否相关,但是当我在命令行上执行android ionic仿真时,它可以工作,但是ios emulation没有,并且出现此错误:

/Users/path-to-project/platforms/ios/build/emulator/project.app/Info.plist file not found.

问题在于ios尚未在ios 1下创建任何构建文件夹,这可能就是为什么在其中找不到任何内容的原因。我认为我已将问题跟踪到输出结果上方的以下消息:

CONFIGURATION_BUILD_DIR = /Users/path-to-project/platforms/ios/build/emulator
SHARED_PRECOMPS_DIR = /Users/path-to-project/platforms/ios/build/sharedpch

但是,我不知道这些配置在哪里设置。有谁知道ionic从哪里获得这些配置的?

但是我想到一个问题:如果将CONFIGURATION_BUILD_DIR设置为此位置,为什么不在此处创建构建目录?

1 个答案:

答案 0 :(得分:6)

这是一个笨拙而又晦涩难懂的东西,它花了很长时间才弄清楚。

该溶液用于离子。 Xcode有很多“解决方案”,但是它们不能用于离子项目,因为ios文件夹中的任何代码更改都将在下次编译时覆盖。

提示在消息中:_requiresUserActionForMediaPlayback。但是,消息的另一部分提到WKWebView,这是一条红色的鲱鱼,因为它实际上与问题无关。

实际问题出在/cordova-plugin-background-mode/src/ios/APPBackgroundMode.m文件中的cordova-plugin-background-mode插件中。在类底部的swizzleWKWebViewEngine方法的末尾,更改:

forKey:@"_requiresUserActionForMediaPlayback"];

收件人:

forKey:@"requiresUserActionForMediaPlayback"];

即删除下划线。是的,确实如此简单,这浪费了我一生的日子。

这是Github上提到的错误:https://github.com/katzer/cordova-plugin-background-mode/issues/381。截至2018年10月9日,该插件已两年未更新,并且该错误在npm中仍未得到纠正,因此您必须自己进行更改,直到更改为止。

相关问题