この記事はiOS Second Stage Advent Calendar 2013の19日目の記事です。 Advent Calendar に参加したのはギャングであるaguuu の中の人に脅されたわけではありません。

iOS のアプリケーションを iOS自体の設定画面で設定を行えるアプリケーション があります。その画面内に稀にバージョン番号が表示されているようなものがあると思います。 これを行うには方法として紹介されているのはビルドする際に値を差し替える方法があります。 ググるとこればっかりでてきます。

今回はそれをせずに、アプリ内で設定できたので紹介しておこうと思います。 動的設定とでも言えばいいのでしょうか。

この設定画面を用意する方法は Settings.bundle を追加し Root.plist を作成することで作ることができます。

今回のゴール

バージョンってタイトルには書いてますが、最終起動時刻のほうがわかりやすいので、最終起動時刻に焦点を当てます。 、設定画面に値を表示するには、Setting Bundle を追加します。

root.plist に type を table のアイテムを追加し、DefaultValue を設定します。

DefaultValue を設定します。

大事なことなので強調しておきます。

あとは [NSUserDefaults standardUserDefaults] に値を書き込めばよいです。

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
NSDate* now = [[NSDate alloc] initWithTimeIntervalSinceNow:0];
[userDefaults setObject:[now descriptionWithLocale:[NSLocale currentLocale]]
                 forKey:@"lastLaunched"];

とっても簡単ですね。

プロジェクトファイルはこちらにおいておきます

たまたま最初に思いつく方法を試したらうまくいきました。(最初は Documents や Cache ディレクトリの中身を確認して plist を直接書き換えたなんて言えない…。しかも、何か勘違いをして UserDefaults を経由せずに書き換えたとか言えない…。)

ざっくりと公式のドキュメントをみましたが、記述をみつけられなかったので、裏技的なテクニックなのかもしれません。

明日はみんなのハーレムである makowis さんです。楽しみですね。