Help us understand the problem. What is going on with this article?

iOS8で復活した設定画面へのURLスキーム

More than 5 years have passed since last update.

iOS8から設定画面へのURLスキームが可能になりました。
設定画面へのURLスキームはiOS5.0.1までは可能だったのですが、
iOS5.1以降ずっと禁じられていました。

設定画面へのURLスキームの方法と遷移先に関係するプリファレンス設定画面についてまとめました。

iOSシミュレータのスクリーンショット 2014.06.25 21.39.55.png

(本記事の内容は一般公開されているiOS8の情報に基づいています。
iOS8に関するスクリーンショットは掲示していません。画像はiOS7のものです)

設定画面へURLスキームするメリット

設定画面へアプリからURLスキームが可能になるメリットとして、
iOS標準のソーシャル機能やプッシュ通知をアプリ内で使われている方は、
ユーザが各機能の許可設定をしていない場合などに設定画面への遷移を促すことができます。

方法

URLスキームをする方法はNSURLにUIApplicationOpenSettingsURLStringを指定してopenURLするだけです。

Objective-C

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];

Swift

let url = NSURL(string:UIApplicationOpenSettingsURLString)
UIApplication.sharedApplication().openURL(url)

※注意
iOS8から使える機能であるため、iOS7以前のOSで実行する場合アプリが落ちる可能性があります。

余談 iOS5.0時代での方法

iOS5.0.1では以下のコードで設定画面にURLスキームができました。
iOS7.1.1では何も動作しません。

NSURL *url = [NSURL URLWithString:@"prefs:root=General"];
[[UIApplication sharedApplication] openURL:url];

おすすめ利用方法

機能が制限されているためユーザに設定変更を求めるときにダイアログで表示してあげると良いと思います。

Objective-C
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:@"設定画面で◯◯を許可してください。" preferredStyle:UIAlertControllerStyleAlert];

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// 何もしない
}]];

[alertController addAction:[UIAlertAction actionWithTitle:@"設定" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
    // 設定画面へのURLスキーム
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:url];
}]];

[self presentViewController:alertController animated:YES completion:nil];

設定画面への遷移先

アプリがプリファレンス設定画面を持っているか否かでURLスキームの遷移先が異なります。
プリファレンス設定画面とは設定画面の下部にある各アプリ毎の設定画面です。

条件 遷移先
プリファレンス設定画面を持っていない場合 設定画面のトップ
プリファレンス設定画面を持っている場合  設定画面内の自身のアプリの設定画面

iOS8では自動生成されるプリファレンス設定画面

iOS8からはプライバシー設定に関わる機能を利用している場合、自動的にプリファレンス設定画面が作成されます。
(例:カメラのプライバシー許可など)

プリファレンス設定画面の作成方法

プロジェクトに以下の設定を実施することで設定画面のトップ下部にあなたのアプリの設定画面を作成できます。

手順:
1. Xcode→File→New→Fileを選択
2. iOSのResourceを選択
3. Setting Bundleを選択
4. 適当な名前で保存
5. アプリを実行

スクリーンショット 2014-06-25 22.12.52.png

以上の手順で設定画面内にあなたのアプリの設定画面が作成されます。
設定する項目についてはプロジェクト内に生成されたRoot.plistの要素を書き換えることで変更できます。

参考

公式Class Reference
https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/doc/constant_group/Settings_Launch_URL

Night___
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away