由于“ _alwaysRunsAtForegroundPriority”

时间:2019-02-01 07:35:40

标签: ios ionic3 cordova-plugins wkwebview

在iOS 12.2上,我的应用在启动后立即终止,并在xcode中显示以下消息:

  

由于未捕获的异常“ NSUnknownKeyException”而终止应用程序,原因:“ [setValue:forUndefinedKey:]:此类不适用于_alwaysRunsAtForegroundPriority键的键值编码。”

有人能为我指出正确的方向吗?我发现之前对此有一些警告:

How to resolve app validation "The app references non-public selectors in Payload/MyApp.app/MyApp: _setAlwaysRunsAtForegroundPriority:"?

该帖子的答案是,它是来自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”

6 个答案:

答案 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)

这对我有帮助: “部署信息主界面必须为空” 来源:https://forum.ionicframework.com/t/app-crashes-when-i-try-to-open-in-it-on-tesflight-on-a-iphone/21005/3