UserDefaultsとKeychainをgetterとsetterでアクセスできるようにしました

UserDefaultsとKeychainをgetterとsetterでアクセスできるようにしました
おはようございます。
ビンゴ中西です。

我らがガラパゴスのエンジニアブログですが、
はてなブログから、こちらのブログに引っ越し致しました。

UserDefaultsとKeychainをプロパティでアクセス可能に

UserDefaultsとKeychainをメタプログラミングによって、getterとsetterでアクセスできるようにしたものをgithubにあげました。

Github

shingo-nakanishi/GPUserDefaultsSample · GitHub
shingo-nakanishi/GPKeychain · GitHub

背景

NSUserDefaultsもキーチェーンもキーをNSStringで操作せねばならず、キーを#defineするなどである程度対処できるが、管理しにくい。またキー名を変えたときなどコンパイルエラーで捕まえにくいということがありました。

GPUserDefaultsとGPKeychainでできること

そこで

  • 補完できる!
  • キーの変更漏れチェックをコンパイラの仕事にする!

そんなユーザデフォルトとキーチェーンを作りました。

使い方

どちらもほとんど同じように使えますのでUserDefaultsを例に進めますと、とりあえず、何も考えずにGPUserDefaultsを継承して

継承したクラスのヘッダー

継承したクラスのボディー

と書くと

あら不思議!

でユーザでフォルトにアクセスできます。
そう! @propertyと@dynamicを書くだけ!まるでCore Dataのようですね!
sharedManagerメソッドはシングルトンを返しています。

仕組み

以下の関数を使い、動的に(メタプログラミングによって)ブロックをメソッドに変えてgetterとsetterを作っているので、継承したクラスではなにもする必要はありません。

継承するとファイルひとつ増えて嫌なんだけど…

継承するとファイルが増えて管理するのが嫌だという気持ちもあると思いますので、そういう方はGPUserDefaultsもしくはGPKeychainにそのまま@propertyと@dynamicを書くと継承なしでも使えます。
ただ、シングルトンを返していますので、プロジェクトで継承するファイルは1つだけになると思いますので、さほど気にならないかと思います。

全キーを削除するメソッドも用意してます

ユーザデフォルトは、removeAllメソッド、
キーチェーンは、deleteAllKeyメソッドですべてのキーを削除できます。
検証、テストなどがしやすくなると思います。

参考

GPKeychainは、LKKeychainをラップする形で作らせていただいております。
Cocoaの日々: [iOS] 簡易 Keychain Services ラッパー LKKeychain を公開
ありがとうございます。

課題

課題としては、ひとつひとつのキーを削除するメソッドも動的に作りたいが、ヘッダーファイルなどの宣言も動的に作らないといけないため、未実装(方法模索中)などがあります。

追記

nilを代入することで、キーを削除できる機能を追加しました。
http://engineerblog.glpgs.com/index.php/archives/78


この記事はあなたの役に立ちましたか?他の人達にも役立ちそうでしたら、上のボタンより共有をお願いします。共有して頂けたら今後提供する記事の参考やモチベーションアップにつながります。

Categorized: iOS