【问题标题】:Ionic app crashes on iOS 12.2 because of '_alwaysRunsAtForegroundPriority'由于“_alwaysRunsAtForegroundPriority”,Ionic 应用程序在 iOS 12.2 上崩溃
【发布时间】:2019-06-25 18:14:09
【问题描述】:

在 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 的安全警告,可以忽略。但是当它让我的应用程序崩溃时,它真的不能再被忽视了:)

提前感谢您的帮助。

拉尔斯

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 信息。

离子:

离子(离子 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) Cordova 平台:ios 4.5.5 Cordova 插件: 科尔多瓦插件离子 5.2.9,科尔多瓦插件离子键盘 2.1.3, cordova-plugin-ionic-webview 2.3.2,(和其他 22 个插件)

系统:

ios 部署: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"
科尔多瓦插件背景模式 0.7.2 “背景模式”
科尔多瓦插件徽章 0.8.7 “徽章”
科尔多瓦插件相机 4.0.3 “相机”
科尔多瓦插件控制台 1.1.0 “控制台”
cordova-plugin-customurlscheme 4.3.0 “自定义 URL 方案”
cordova-plugin-device 2.0.2“设备”
科尔多瓦插件文件 6.0.1 “文件”
cordova-plugin-file-transfer 1.7.1 “文件传输”
cordova-plugin-geolocation 4.0.1 “地理位置”
科尔多瓦插件离子 5.2.9 “科尔多瓦插件离子”
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“启动画面”
科尔多瓦插件振动 3.1.0 “振动”
cordova-plugin-whitelist 1.3.3 “白名单”
科尔多瓦支持谷歌服务 1.1.0 “科尔多瓦支持谷歌服务”
cordova.plugins.diagnostic 4.0.7“诊断”
ionic-plugin-keyboard 2.2.1 “键盘”
phonegap-plugin-push 2.1.3 “PushPlugin”

【问题讨论】:

    标签: ios ionic3 cordova-plugins wkwebview


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      要查找您使用的哪个插件导致错误运行:

      cd %HOME%/src/myProject    
      grep -r "_alwaysRunsAtForegroundPriority" node_modules
      

      一旦你找到它,寻找解决问题的升级或用替代插件替换它。

      在我们的例子中,插件是 WKWebView。在谷歌上快速搜索发现they had an error and fixed it。我们升级了插件,它运行顺利。

      【讨论】:

        【解决方案3】:

        我认为您的基本问题是您在 WKWebView 中运行,不允许在后台可靠地运行。我面临着类似的问题,恐怕我能想出的最好的短期解决方案是使用 UIWebView。 UIWebView 不是一个好的长期解决方案,因为它现在被标记为已弃用。看起来您还没有使用 Ionic 4,这在这种情况下非常好。我认为您可以删除 2 个离子插件,使用 cordova@6.5.0 和 cordova engine ios 4.5.4。希望,然后,当在 Xcode 中运行时,一切都会正常工作,并且您会在开头看到一条关于“使用 UIWebView”的消息。这个问题是我发现 WKWebView 不能在后台工作的证据的一部分:https://issues.apache.org/jira/browse/CB-10657https://issues.apache.org/jira/browse/CB-11561

        【讨论】:

          【解决方案4】:

          试试这个。在本地文件夹中下载插件 cordova-plugin-background-modecordova-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];
          }
          

          【讨论】:

          • 如果打算发布到 App Store,我认为这不是一个好的解决方案。看起来这只是一种隐藏它正在使用私有 API 的方法,并且可能已经更改了名称(因为它是私有 API,Apple 会更改这些而不考虑向后兼容性)。
          • 这个方法完全是 hack!它停止工作并不奇怪
          【解决方案5】:

          在插件中,底部有一个“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" />
          

          希望至少可以帮助某人进行构建

          【讨论】:

          • 或者只是删除行 [obj setValue:[NSNumber numberWithBool:YES forKey[APPBackgroundMode wkProperty]];在 APPBackgroundMode.m 中使用现有插件
          • 安装上述命令后出错:无法通过注册表获取插件github.com/iowayankee/cordova-plugin-background-mode.git。这可能是连接问题,或者插件规范不正确。
          • @larschla,你真的应该试试这里链接的 iowayankee 的分支。我已经经历了大约 6 个不同的 cordova-plugin-background-mode 分支,这是我在 iOS 12.3 和安卓 8.1。 :)
          • 没有改变
          • 谢谢。这为我解决了这个问题。
          【解决方案6】:

          我们的 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,它是cordova-plugin-background-mode@0.7.2 的一个分支。

          尝试切换到那个。如果这不起作用,我将发布我们可能存在的其他差异。

          【讨论】:

          • 我确实尝试过,但我仍然得到同样的错误。不过谢谢:)
          • 由于某种原因,cordova-plugin-better-background-mode 在运行 ionic cordova plugin ls 时显示为 cordova-plugin-background-mode
          • @larschla - 是的,确实如此。我不相信它是一个真正的插件,更多的是一个补丁/解决方法,用于解决一段时间未更新的其他插件的一些问题。此外,我现在看到的错误与您看到的“(NSKeyValueCoding) setValue:forKey:]”相同,并且正在尝试调试。不知道我有什么不同的设置来允许它构建和运行......
          • 哦,快乐 ;) 那不只是我。如果我对编辑插件有任何线索,我可能会修复它。可悲的是,我没有。
          • 这看起来很相关。不是很有帮助。 github.com/ionic-team/cordova-plugin-ionic-webview/issues/286
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-17
          • 2016-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          相关资源
          最近更新 更多