2013-08の書きかけの記事の投稿です。
Xcode 4.6.3, iOS 6 当時の情報になります。
Keychain Serviceが使えるとできることが広がるようなので使ってみようと悪戦苦闘したメモです。
すでに自分で書いたコードが分からなくなっています。
記憶をたどりコードのコメントを頼りに編集しました。
オレのためだけのメモです。
Keychainって?
Cocoaの日々: [iOS] Keychain Services とは
Cocoaの日々: [iOS] 複数アプリケーション間でのデータ共有 〜 Keychain Services を使った第三の方法
Use Your Loaf: Keychain Group Access
iOS Developer Library: Keychain Services Programming Guide
iOS Developer Library: Keychain Services Reference
iOS Keychain を使ってできること
かなり難解だったけど以下のように理解した。
あってる?
– パスワードなど秘匿性の高い情報を保存する。
– 同一App IDアプリ間の情報共有に使える。
– アプリを削除しても情報を残すことができる。
Keychainへパスワードの保存ができると、2回目以降の自動ログインなどにも使えそうです。
永続的なアプリ情報の保存場所に使えるかも。
Keychainコード開発
PDF: iOSアプリケーション プログラミングガイド
PDF: ファイルシステム プログラミングガイド
iOS Developer Library: Secure Coding Guide
【Sample Code】
iOS Developer Library: GenericKeychain
サンプルコードは古くARC対応では無いので新規のARCなプロジェクトでは使いにくい。
Sample Code “KeychainItemWrapper” を ARC対応にする。
stackoverflow: How can I get keychain to work in iOS 5 with ARC?
同じ悩みの人がいました。
gistでARC対応へ修正したコードを公開してくれています。
dhoerl / KeychainItemWrapper.h
ただこれも複数データ保存に対応していないのでstackoverflowの情報をもとに修正を施しました。
iOS Keychain Services: only specific values allowed for kSecAttrGeneric Key?
//[genericPasswordQuery setObject:identifier forKey:(__bridge id)kSecAttrGeneric]; [genericPasswordQuery setObject:identifier forKey:(__bridge id)kSecAttrAccount]; |
kSecAttrGenericをkSecAttrAccountへ変更しました。
Keychain へパスワードを保存するコードは以下のブログを参考にしました。
b2cloud: Using the Keychain to store passwords on iOS
Keychainは Key / Value な形式。
Keychain Access Groupを事前に登録する。
APP_NAME.entitlements
Keychain Access Groups へ登録しておく。