iOS/Android設定画面の各アプリの画面から独自の設定やライセンス表示をするには?


iOS/Android において、変更頻度の低いアプリの設定や、直接ユーザーには関係のないライセンス表示のような画面は、アプリの中から遷移させる必要性は薄いですし、その遷移のためのボタンの領域を確保するのはもったいないですよね。

ということで、各OSの設定画面にあるアプリ情報の画面でそれを行う方法をまとめます。

iOS

iOS では Settings.bundle を用いることで iOS設定画面の各アプリの画面でそのアプリの設定項目を表示することができます。

Appleサポート アプリの場合

アプリの設定

アプリの設定項目を Settings.bundle として定義しておくだけです。ここで設定された項目はアプリからは UserDefaults により取得できるようになります。詳細は公式ドキュメントを読みましょう!

Preferences and Settings Programming Guide / Implementing an iOS Settings Bundle

ライセンス表示

LicensePlist を使いましょう!
CocoaPods や Carthage でインストールしたライブラリからライセンス一覧を生成して Settings.bundle への組み込みまで自動でやってくれます。

Android

Android N 以降限定ですが、マニフェストファイル中の Activity の Intent Filter に ACTION_APPLICATION_PREFERENCES を追加することで、Android 設定画面のアプリ情報画面にその Activity への導線が表示されるようになります。

AndroidManifest.xml
<activity android:name=".SettingActivity">
    <intent-filter>
        <action android:name="android.intent.action.APPLICATION_PREFERENCES" />
    </intent-filter>
</activity>

Android P の場合

Android N,O の場合

アプリの設定

Android Jetpack の Preference 機能を使うことで、XML でアプリの設定項目を定義するだけで設定画面を構築することができます。ここで設定された項目はアプリからは SharedPreferences により取得できるようになります。詳細は公式ドキュメントを読みましょう!

Android Developers / Android Jetpack / 設定

ライセンス表示

com.google.gms:oss-licenses を使いましょう!これによりアプリが依存しているライブラリのライセンス情報を取得し、それを OssLicensesMenuActivity で表示することができます。

上記の Preference 機能では設定項目からインテントを投げるアクションも定義できるので、そこから OssLicensesMenuActivity を開くと良さそうです。