設定アプリ(Settings Bundle)にUUIDを表示する方法
たまにですが、設定アプリに「ユーザーID」といった項目名でUUIDを表示しているアプリを見かけます。 開発中のアプリでも端末識別用のUUIDを設定アプリに表示する必要があったため方法を調べてみたのですが、 予め決まっている固定値を表示する方法がほとんどで、アプリ側で生成したUUIDを表示させるといった情報が意外と見つからなかったため、自分が試して実現した方法を書き記しておこうと思います。
結論
Settings Bundleの値はUserDefaultsで取得出来る、ということはアプリ側から書き込みすれば設定アプリに表示出来るのではと考え、予め設定項目だけ作成しておき、アプリ起動時にUserDefaultsに書き込むことで表示することが出来ました。
※ただ、当然ながらアプリインストール直後で起動していない時点では書き込みが出来ておらずデフォルト値が表示されます。この辺りの解決方法は見つかっていません。
実装手順
Settings.bundle を作成
通常通り、ターゲットのルートディレクトリにSettings.bundleを作成します。
公式の情報はこの辺りでしょうか。 → Implementing an iOS Settings Bundle
設定値の作成
以下のように設定値をRoot.plist
に作成します。
- Item 0: Group
- Title: "UUID"
- Item 1: Title
- Default Value: "xxx"
- Identifier: "uuid"
- UUIDは長い文字列のため、項目名は専用のGroup(
Item 0
)のTitleに表示するようにし、Item 1
にTitleを表示させずに横幅を伸ばすようにしています。 Default Value
は何かしら記載しておかないと項目自体が設定アプリに表示されないようです。(半角スペース(" ")でも項目の表示はされましたが、これ良いのかな...)Item 1
のIdentifierの値は後ほどUserDefaultsに書き込む際に使用します。
UserDefaultsに書き込み
今回はUUIDとして UIDevice.current.identifierForVendor
を使用しています。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { ... // UUID取得 let uuid = UIDevice.current.identifierForVendor! // UserDefaultsに書き込み。 // Settings.bundleの"Identifier"で指定した値をKeyにして書き込む。 UserDefaults.standard.set(uuid.uuidString, forKey: "uuid") ... }
このようにしてアプリを起動後、設定アプリを確認するとUUIDが表示されているかと思います。
まとめ
所々微妙な部分があるのですが、この方法でとりあえずは実現出来ました。
またここまでの内容を簡単なサンプルコードとしてGitHubにアップしています。