そのため、ボタンを押すだけでデバイスの設定アプリを開く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スキームでいくつかの変更が加えられたようですが、見つかりません。修正/回避策。
カスタムURLスキームは、Appleによって公式に文書化されていません。 iOS10では機能しなくなります。アプリは、ユーザーをアプリ独自の設定ページにのみ誘導できます。 iOS 10に設定ページがない場合、アプリはクラッシュします。
次のように「灰色の領域」APIで設定ページを開くことができます。しかし、私はSwiftで成功していません。幸運を!
プロジェクトに設定バンドルを追加し、次のコードを使用して、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!)
}
}