UIApplicationOpenSettingsURLStringが使えない?
現在、Objective-Cで書かれている自作アプリをSwiftに移植しています。
その中でアプリ内で設定アプリ内の自アプリ用の設定画面へ遷移するメソッドを移植して稼動確認すると以下のメッセージが表示されて開きません。
canOpenURL: failed for URL: "UIApplicationOpenSettingsURLString:" - error: "This app is not allowed to query for scheme uiapplicationopensettingsurlstring"
環境
Xcode 8.3.3
Swift 3.1
macOS Sierra 10.12.6
iOS 10.0、10.3.1
該当のコードは以下
func showPermission() -> Void { guard let settingsUrl = URL(string: "UIApplicationOpenSettingsURLString:") else { return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, options: ["":""], completionHandler: nil) } }
ちなみにUIApplicationクラスで定義されている定数です。調べたわかったのですが、値は"app-settings:"です。
Appleのリファレンス
https://developer.apple.com/documentation/uikit/uiapplicationopensettingsurlstring
移植中のアプリはDevelopment Targetを10.0にしてAPIもiSO10以降のものに変更してしまったのでこのアプリではiO9以前で検証はできないため、Objective-Cで書かれている別アプリで確認してみました。
Objective-Cのコード
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url];
結果は動きました。。。はて???
ググってみてもSwift3でUIApplicationOpenSettingsURLString動いているっぽい。。。謎。
iOS10.2.1での記事もあったので10.0でも動かないのはよくわからない・・・
で、調査の途中で定数の値を知ったのでそっちに変えたところ、あっさり動きました。。。
一応コード載せておきます。
func showPermission() -> Void { guard let settingsUrl = URL(string: "app-settings:") else { // 引数を変更 return } if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, options: ["":""], completionHandler: nil) } }
自分の環境はUIApplicationOpenSettingsURLStringの定数がなくなった?
何が原因なんでしょか?
エラーメッセージだと「このアプリは"UIApplicationOpenSettingsURLString"のURLスキームが許可されていない」と言ってます。
Info.plistの別件で登録済みのLSApplicationQueriesSchemesにこの定数を登録して再度実行してもエラーのままでした。
取り敢えず上記のコードで行くことにしました。
何だろうなぁ。気持ちが悪い。同じこと言ってる人いないし。
教えてエロい人!!
追記
SNSでお友達が指摘してくれました。
定数なのに""で括ってたからでした!
何と!初歩的ミス!!!
(´・ω・`).;:…(´・ω...:.;::..(´・;::: .:.;: サラサラ..