iOS 9 个 Ionic Cordova 应用程序在 iPhone 上崩溃;在 iPad 工作

iOS 9 Ionic Cordova App Crashes on iPhone; works on iPad

Cordova v5.3.1 / Ionic v1.1.0(库 v1.6.4)

将我们的应用程序从 8.4 升级到 iOS9。该应用程序在 iPad/iPad mini 上构建并运行良好。但是,它在部署到 iPhone 时崩溃。

下面是调试输出:

2015-09-23 11:17:09.920 AnApplicaiton[6490:1359695] *** Assertion failure in -[UIApplication _cachedSystemAnimationFenceCreatingIfNecessary:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:1697

2015-09-23 11:17:09.926 AnApplication[6490:1359695] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'accessing _cachedSystemAnimationFence requires the main thread'

到目前为止,调试控制台是相同的。

我不知道真正的原因,但是当应用程序有 WebView 和第三方键盘(例如 Swype)时,程序会崩溃。我多次重复这个问题。因此,如果您的应用程序使用 Cordova、iAd、Admob 等 WebView,您将看到这些奇怪的崩溃。我不知道如何防止这个问题。它只发生在 iOS 并且只发生在 iPhone 秒。我的崩溃报告显示 iPhone 5s,iPhone 6,iPhone 6 Plus。

编辑:我认为@Kurt.F 给出的代码可以暂时解决这个问题。将以下代码添加到您的 AppDelegate.swift 文件中。所有学分转到@Kurt.F

func application(application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: String) -> Bool {

    if extensionPointIdentifier == UIApplicationKeyboardExtensionPointIdentifier {
        return false
    }

    return true

}

这似乎是第 3 方键盘与 WebView 之间的冲突。我还能够在 iOS 上崩溃 Chrome(Cordova 之外)9。我只是去一个流行的网站并专注于一些编辑字段几次。您可以在加载页面时执行此操作,以在启用某个自定义键盘并崩溃时调出键盘。

我创建了一个简单的 Cordova 插件,不允许使用该应用程序对 运行 进行任何键盘扩展。这不是一个永久的解决方案,但它会暂时停止崩溃。只需添加插件,无需更改代码。

https://github.com/kurtisf/cordova-plugin-restrict-keyboard