在iOS 12.2上,我的应用在启动后立即终止,并在xcode中显示以下消息:
由于未捕获的异常“ NSUnknownKeyException”而终止应用程序,原因:“ [setValue:forUndefinedKey:]:此类不适用于_alwaysRunsAtForegroundPriority键的键值编码。”
有人能为我指出正确的方向吗?我发现之前对此有一些警告:
该帖子的答案是,它是来自Webview的安全警告,可以忽略。但是当它使我的应用程序崩溃时,它真的不能再被忽略了:)
在此先感谢您的帮助。
Lars
更新2019年2月2日:似乎是导致错误的cordova-plugin-background-mode。但是我必须承认我不知道如何解决这个问题。当我从项目中删除该插件时,它可以工作。但是我需要该插件,或者至少需要后台模式功能,所以我需要以某种方式修复它。
更新2019年2月5日: @coderroggie: 我也有cordova-plugin-ionic-webview插件的2.3.2版本。 奇怪的是,它仅在删除cordova-plugin-background-mode(0.7.2版)时才对我有用
如果可以为您提供任何有用的信息,我将发布我的离子信息。
离子:
ionic(Ionic CLI):4.9.0(/ usr / local / lib / node_modules / ionic)
离子框架:离子角3.9.2 @ ionic / app-scripts:3.2.1科尔多瓦:
cordova(Cordova CLI):8.1.2(cordova-lib@8.1.1)科尔多瓦 平台:ios 4.5.5 Cordova插件: 科尔多瓦-离子插件5.2.9,科尔多瓦-离子键盘2.1.3, cordova-plugin-ionic-webview 2.3.2,(和其他22个插件)
系统:
ios-deploy:1.9.2 NodeJS:v8.11.1(/ usr / local / bin / node)
npm:6.4.1操作系统:macOS Mojave Xcode:Xcode 10.1内部版本10B61
更新2月2日(再次)
我的插件
cordova-android-firebase-gradle-release 1.0.2“ cordova-android-firebase-gradle-release”
cordova-android-play-services-gradle-release 1.4.3“ cordova-android-play-services-gradle-release”
cordova-android-support-gradle-release 1.4.4“ cordova-android-support-gradle-release”
cordova-plugin-app-version 0.1.9“ AppVersion”
cordova-plugin-background-mode 0.7.2“ BackgroundMode”
cordova-plugin-badge 0.8.7“徽章”
cordova-plugin-camera 4.0.3“相机”
cordova-plugin-console 1.1.0“控制台”
cordova-plugin-customurlscheme 4.3.0“自定义URL方案”
cordova-plugin-device 2.0.2“设备”
cordova-plugin-file 6.0.1“文件”
cordova-plugin-file-transfer 1.7.1“文件传输”
cordova-plugin-geolocation 4.0.1“地理位置”
cordova-plugin-ionic 5.2.9“ cordova-plugin-ionic”
cordova-plugin-ionic-keyboard 2.1.3“ cordova-plugin-ionic-keyboard”
cordova-plugin-ionic-webview 2.3.2“ cordova-plugin-ionic-webview”
cordova-plugin-local-notification 0.9.0-beta.2“ LocalNotification”
cordova-plugin-mauron85-background-geolocation 3.0.0-alpha.49“ CDVBackgroundGeolocation”
cordova-plugin-network-information 2.0.1“网络信息”
cordova-plugin-safariviewcontroller 1.5.4“ SafariViewController”
cordova-plugin-splashscreen 5.0.2“启动画面”
cordova-plugin-vibration 3.1.0“振动”
cordova-plugin-whitelist 1.3.3“白名单”
cordova-support-google-services 1.1.0“ cordova-support-google-services”
cordova.plugins.diagnostic 4.0.7“诊断”
ionic-plugin-keyboard 2.2.1“键盘”
phonegap-plugin-push 2.1.3“ PushPlugin”
答案 0 :(得分:4)
在该插件的底部有一个“ setValue”,该值对应用程序不利。得到了一个用于12.2的构建。尝试
ionic cordova plugin add https://github.com/iowayankee/cordova-plugin-background-mode.git
package.json
"cordova-plugin-background-mode": "git+https://github.com/iowayankee/cordova-plugin-background-mode.git",
config.xml
<plugin name="cordova-plugin-background-mode" spec="git+https://github.com/iowayankee/cordova-plugin-background-mode.git" />
希望至少能帮助某人顺利构建
答案 1 :(得分:2)
尝试一下。在本地文件夹中下载插件 cordova-plugin-background-mode 或 cordova-plugin-better-background-mode ,并将其作为本地插件附加到项目中。转到插件文件src \ ios \ APPBackgroundMode.m并替换以下几行
+ (NSString*) wkProperty
{
NSString* str = @"X2Fsd2F5c1J1bnNBdEZvcmVncm91bmRQcmlvcml0eQ==";
NSData* data = [[NSData alloc] initWithBase64EncodedString:str options:0];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
使用
+ (NSString*) wkProperty
{
NSString* str = @"YWx3YXlzUnVuc0F0Rm9yZWdyb3VuZFByaW9yaXR5";
NSData* data = [[NSData alloc] initWithBase64EncodedString:str options:0];
return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
答案 2 :(得分:1)
要查找您使用的哪个插件会导致错误运行,请执行以下操作:
cd %HOME%/src/myProject
grep -r "_alwaysRunsAtForegroundPriority" node_modules
找到后,寻找解决该问题的升级或用其他插件替换。
在我们的例子中,插件是WKWebView。在Google上进行的快速搜索找到了they had an error and fixed it。我们对该插件进行了升级,并且运行顺利。
答案 3 :(得分:0)
我的ionic 3应用在iOS beta 12.2启动时崩溃时遇到了类似的问题。我也有最新版本的cordova-plugin-background-mode。
我通过升级到cordova-plugin-ionic-webview插件的version 2.3.2来解决问题。
尝试一下。如果它不能解决问题,请发布您的插件和版本,以便我进行比较。
更新2019年2月5日
我搞砸了早些回答。我目前正在使用cordova-plugin-better-background-mode@0.7.5,它是fun getBitmapFromView(view: View): Bitmap {
//Define a bitmap with the same size as the view
val returnedBitmap = Bitmap.createBitmap(250, 250, Bitmap.Config.ARGB_8888)
//Bind a canvas to it
val canvas = Canvas(returnedBitmap)
//Get the Imageview's src drawable
val bgDrawable = (view as ImageView).drawable
if (bgDrawable != null) {
bgDrawable.setbounds(10,10,240,240); // setting bounds with padding of 10
longToast("bgDrawable not null")
//has background drawable, then draw it on the canvas
bgDrawable.draw(canvas)
}
else {
//does not have background drawable, then draw white background on the canvas
canvas.drawColor(Color.WHITE)
// draw the view on the canvas
view.draw(canvas)
longToast("bgDrawable null")
}
//return the bitmap
return returnedBitmap
}
}
的分支。
尝试切换到那个。如果那不起作用,我将发布我们可能存在的其余差异。
答案 4 :(得分:0)
我认为您的基本问题是您正在WKWebView中运行,该WKWebView不允许可靠地在后台运行。我面临着类似的问题,我担心我能想到的最好的短期解决方案是使用UIWebView。 UIWebView并不是一个很好的长期解决方案,因为它现在被标记为不推荐使用。看来您还没有使用Ionic 4,在这种情况下,这真的很好。我认为您可以删除2个离子插件,使用cordova@6.5.0和cordova引擎ios 4.5.4。希望,然后,当在Xcode中运行时,一切都会起作用,并且您会在一开始看到关于“使用UIWebView”的消息。这个问题是我发现WKWebView不能在后台运行的证据的一部分:https://issues.apache.org/jira/browse/CB-10657 https://issues.apache.org/jira/browse/CB-11561
答案 5 :(得分:-1)