ページ

2010年4月2日金曜日

Keychain Services 調査 (25) Keychain Item を削除する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

(前回)Cocoaの日々: Keychain Services 調査 (24) twitpic へ画像をアップロード(その4)レスポンスXMLを処理

登録してある Keychain Item を削除する。削除には SecKeychainItemDelete を使う。
Mac Dev Center: Keychain Services Reference - SecKeychainItemDelete

-[AccountManager deleteLoginAccoun] に実装する。

AccountManager.m

- (BOOL)deleteLoginAccount:(LoginAccount*)loginAccount
{
OSStatus status;
const char *serviceNameUTF8 = [loginAccount.serviceName UTF8String];
const char *loginIdUTF8 = [loginAccount.loginId UTF8String];
SecKeychainItemRef itemRef = nil;

status = SecKeychainFindGenericPassword(NULL,
strlen(serviceNameUTF8),
serviceNameUTF8,
strlen(loginIdUTF8),
loginIdUTF8,
NULL,
NULL,
&itemRef);
if (status == errSecSuccess) {
status = SecKeychainItemDelete(itemRef);
if (status == errSecSuccess) {
return YES;
} else {
NSLog(@"ERROR:SecKeychainItemDelete");
return NO;
}
} else {
NSLog(@"ERROR:SecKeychainFindGenericPassword:%d", status);
return NO;
}

if (itemRef) {
CFRelease(itemRef);
}
}

SecKeychainFindGenericPassword で SecKeychainItemRef を取得し、それを SecKeychainItemDelete へ渡す。SecKeychainItemRef は最後に CFRelease するのを忘れずに。

組み込んで実行してみる。既に Keychain Item が登録された状態から始める。
アプリを起動し delete ボタンを押して -[AccountManager deleteLoginAccount:] を呼び出す。

すると消えた。

- - - -
ここまでで Keychain の単純な使い方はわかった(寄り道が多かったが)。
次回からは Twitpic アップローダの制作に入る。一通りちゃんと動くものを使って公開する予定。