web-dev-qa-db-ja.com

「設定」URLスキームがiOS 10(ベータ1および2)で機能しない

IOS 10(ベータ1)で「設定」URLスキームを機能させることができません。
同じアプリがiOS 9で正常に動作するため、正しく設定されています。

これはバグですか、それとも名前が変更または削除されましたか?

コード:

let settingsUrl = NSURL(string: "prefs:root=SOMETHING")
if let url = settingsUrl {
    UIApplication.sharedApplication().openURL(url)
}

更新:(ベータ2)
ベータ2ではまだ機能しません。
バグと思われます。たとえば、iOS 10でGameCenterを使用して誰かを招待したいが、iMessageにログインしていない場合は、ログインを求めるポップアップが表示されます。ただし、[設定]ボタンは何もしません。

12
123FLO321

IOS 10の場合、prefsApp-Prefsに置き換えるだけです

以下のコードはiOS 8、9、10で機能します

Swift 3.0およびXcode> = 8.1

if #available(iOS 10.0, *)
{
       UIApplication.shared.openURL(URL(string: "App-Prefs:root=SOMETHING")!)
}
else
{
       UIApplication.shared.openURL(URL(string: "prefs:root=SOMETHING")!)
}

Swift 2.2

if #available(iOS 10.0, *)
{
      UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=SOMETHING")!)
}
else
{        
    UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=SOMETHING")!)
}

私のために働く。

ハッピーコーディング????

19
Saumil Shah

UIApplicationOpenSettingsURLStringを使用してyour ownアプリの設定(iOS 8以降で利用可能)を開くことができますが、その他のprefs: URLはプライベートAPIと見なされ、使用するとアプリが拒否されます。

4
Paulw11

Prefs:root=SOMETHINGを使用できます

iOS 10は設定のURLスキームを更新しました。「p」を大文字にする必要があります。

参照: https://github.com/cyanzhong/app-tutorials/blob/master/schemes.md

注意:ウィジェットでのみ機能し、アプリでは機能しません。 (iOS 10.0.2)

@Saumil Shahのソリューションはアプリで機能し、より便利です。

4
GeXiao

記録については、位置情報サービスについてはApp-Prefs:root=Privacy&path=LOCATIONは私のために働きました。シミュレータではなくデバイスでテストした場合。

うまくいかなかったものをリストアップするつもりはありません。長いリストです。

位置情報サービスが無効になっている、または権限が拒否されている、または決定されていないことを想定した使用例:

if !CLLocationManager.locationServicesEnabled() {
    if let url = URL(string: "App-Prefs:root=Privacy&path=LOCATION") {
        // If general location settings are disabled then open general location settings
        UIApplication.shared.openURL(url)
    }
} else {
    if let url = URL(string: UIApplicationOpenSettingsURLString) {
        // If general location settings are enabled then open location settings for the app
        UIApplication.shared.openURL(url)
    }
}
3
Joe Susnick

誰かが「灰色の領域」のAPIに興味がある場合は、以下を使用できます。

//url = "prefs:root=SOMETHING"
[[LSApplicationWorkspace defaultWorkspace] openSensitiveURL:url withOptions:nil];

これはあなたが望むものをあなたに与えます。 うまく隠す、そしてiOS 10で動作します。

1
Leo Natan

これはiOS 11では利用できません。次のような設定を開くだけです。

if let url = URL(string:UIApplicationOpenSettingsURLString) {
   if UIApplication.shared.canOpenURL(url) {
     UIApplication.shared.open(url, options: [:], completionHandler: nil)
   }
}
1
chawki