概要
Keychain Services
というとパスワードを保存する仕組みだと思われる方が多いと思います。
実際にそうなのですが、Keychainに保存した情報はNSUserDefaults
と違ってアプリを削除した後もデータを保持することができるという別のメリットがあります。
(Keychainの事を知らない人はこちらにとても分かりやすい説明が書いてあります)
そういった要件があるときにNSUserDefaults
のように簡単にデータを保存するライブラリがあったらいいなと思ったら既に作ってる人がいました。
LUKeychainAccessという名前のライブラリです。
Keychain Services
はNSUserDefaults
と違い、気軽に使うにはちょっと面倒な仕組みなのでとてもありがたいです。
追記:
iOSのバックアップを暗号化していない場合はキーチェーンの内容はバックアップされません。
機種変更の時などに初期化されてしまう環境もありますので、その辺も踏まえて利用しましょう。
takayamaさん、ご指摘いただきありがとうございます。
使い方
Security.framework
をターゲットに追加してください。
次にソースをダウンロードしましょう。
ダウンロードしたソースコード内のLUKeychainAccess
ディレクトリごとプロジェクトにコピーして、
LUKeychainAccess.h
ファイルをインポートしましょう。
使い方もとてもシンプルでNSUserDefaults
とほぼ同様の使い方でデータを扱えます。
データの保存
// integer
[[LUKeychainAccess standardKeychainAccess] setInteger:1 forKey:@"integerKey"];
// float
[[LUKeychainAccess standardKeychainAccess] setFloat:1.0 forKey:@"floatKey"];
// double
[[LUKeychainAccess standardKeychainAccess] setDouble:1.0 forKey:@"doubleKey"];
// BOOL
[[LUKeychainAccess standardKeychainAccess] setBool:YES forKey:@"boolKey"];
// NSString
[[LUKeychainAccess standardKeychainAccess] setString:@"string" forKey:@"stringKey"];
// NSObject
[[LUKeychainAccess standardKeychainAccess] setObject:@"object" forKey:@"objectKey"];
セットした値はすぐに保存されます。
保存したデータの読み込み
// integer
NSInteger integerValue = [[LUKeychainAccess standardKeychainAccess] integerForKey:@"integerKey"];
// float
float floatValue = [[LUKeychainAccess standardKeychainAccess] floatForKey:@"floatKey"];
// double
float doubleValue = [[LUKeychainAccess standardKeychainAccess] doubleForKey:@"doubleKey"];
// BOOL
BOOL boolValue = [[LUKeychainAccess standardKeychainAccess] boolForKey:@"boolKey"];
// NSString
NSString *stringValue = [[LUKeychainAccess standardKeychainAccess] stringForKey:@"stringKey"];
// NSObject
NSString *objectValue = [[LUKeychainAccess standardKeychainAccess] objectForKey:@"objectKey"];
と正にNSUserDefaults
と同じ使い勝手でした。