web-dev-qa-db-ja.com

iOS10のオープン設定がクラッシュする

そのため、ボタンを押すだけでデバイスの設定アプリを開くiOSアプリを作成しています。 iOS10とSwift 3でメソッドが少し変更されているのを確認したので、コードを実行する前に、条件を使用してユーザーが使用しているiOSバージョンを確認しています。

if let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) {

    if #available(iOS 10.0, *) {

        // iOS 10.0.

        UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

    } else {

        // Fallback on earlier versions.

        UIApplication.shared.openURL(settingsUrl)
    }
}

これはiOS9デバイスでは完全に正常に機能しますが、iOS10デバイスでは機能しません。問題は、アプリがユーザーをiOS 10の設定アプリに送信している間、クラッシュログなしですぐにクラッシュすることです。これと同じ方法を使用してGoogleのようなWebサイトを開くと、iOS 9と10の両方で完全に正常に機能します。多くの調査を行ったところ、URLスキームでいくつかの変更が加えられたようですが、見つかりません。修正/回避策。

10
BenSDConway

カスタムURLスキームは、Appleによって公式に文書化されていません。 iOS10では機能しなくなります。アプリは、ユーザーをアプリ独自の設定ページにのみ誘導できます。 iOS 10に設定ページがない場合、アプリはクラッシュします。

次のように「灰色の領域」APIで設定ページを開くことができます。しかし、私はSwiftで成功していません。幸運を!

iOS 10(ベータ1および2)では問題にならない「設定」URLスキーム

5
DàChún

プロジェクトに設定バンドルを追加し、次のコードを使用して、iOSで設定アプリを開く方法を見つけました。

    let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil)

アプリケーションにカスタムキーボードがない場合、ネイティブ設定アプリケーションを開くために使用できる唯一の方法のようです。

UIApplicationOpenSettingsURLStringを開くと、アプリケーションがクラッシュします。

「App-Prefs:root = WIFI」URLを使用していますが、正常に動作します。

let settingsUrl = URL(string: "App-Prefs:root=WIFI")
        if UIApplication.shared.canOpenURL(settingsUrl!) {
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(settingsUrl!, options: [:], completionHandler: {(success) in debugPrint("Successfully opened settings")})
            } else {
                UIApplication.shared.openURL(settingsUrl!)
            }
    }
0
Jala Ganapathy