LoginSignup
10
11

More than 5 years have passed since last update.

UICKeyChainStoreについて知っているいくつかのこと

Last updated at Posted at 2015-02-18

UICKeyChainStoreはiOSのkeychainをNSUserDefaultsみたいに簡単に操作するためのライブラリですね。

https://github.com/kishikawakatsumi/UICKeyChainStore (release notes)

大変便利に使っていますが、いくつか知っておくべきことがあるのでメモしておきます。

エラーハンドリング

最初のバージョンはエラーハンドリングができませんでしたが、v1.1.0でできるようになりました。KeyChainの操作はまれに失敗することがります(たとえば status=-34018)。この種のエラーは原因不明で回復もできないため、仮にユーザーの端末でおきても対処のしようがありません。

とはいえユーザーの手元で起きているかどうかは把握したいところ。エラーが起きたらアプリをクラッシュさせて、Crashlyticsなどのエラー収集サービスに送りましょう。

前方互換性(forward compatibility)

v1で保存したデータはv2で読み込めます。つまり後方互換性はある。一方で、v2で保存したデータはv1で読み込めません。つまりv1 - v2間で前方互換性はないのです。これはv1のデータ保存&検索のやり方がおかしかったので、実装としてはv2が妥当です。しかし、まれにv2で書き込んだデータをv1で読み込みたいこともあります。

そこでv2.0.4からは、v1で読み込める形式でデータを保存することができるようになってます。

使い方は UICKeyChainStoreForwardCompatibilityTests.m のように、 genericAttribute:key にkeyと同じ文字列を渡してください。

- (void)testReadV2DataFromV1
{
    // v2でデータを書き込む(v1互換形式)
    [UICKeyChainStore setString:@"http://example.com/" forKey:@"url" genericAttribute:@"url"];

    // v1でデータを読み込む(genericAttribute:keyがなければfailする)
    XCTAssertEqualObjects([UICv1KeyChainStore stringForKey:@"url"], @"http://example.com/");
}

その他

最新版だと allKeys などもあるし、なるべく最新版を使うほうがいいです。一方で、オプションが微妙に異なるAPIが増えてきて、正しく使うのがむずかしくなってきています。実用上は、ラッパークラスを作ってそれ経由でのみ操作するのがよさそうです。

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11