1

私の MacOS アプリではメール アカウント データを保存しているので、5 つのアプリケーション パスワードがキーチェーンに保存されます。アプリの起動時に、キーチェーンは常に許可するように 5 回要求します... キーチェーンにアプリを 1 回受け入れるように要求する方法はありますか? たとえば、Adium は複数のアカウント データを保存し、キーチェーンには 1 つのエントリ (種類: 「インターネット パスワード」) しかありません。

これを回避する唯一の方法はコード署名ですか?

店:

+(void)storePasswordKeychainWithPassAndKey:(NSString *)passwordStr:(NSString *)accountNameStr {
const char * accountName = [accountNameStr UTF8String];
const char * password = [passwordStr UTF8String];

OSStatus status;
status = SecKeychainAddGenericPassword(NULL, 
                                      strlen(serviceName), serviceName,
                                      strlen(accountName), accountName,
                                      strlen(password), password, 
                                      NULL);

}

得る

+(NSString *) getPasswordKeychainWithKey: (NSString *)accountNameStr {
    const char * accountName = [accountNameStr UTF8String];
    void *password = nil;
    UInt32 passwordLen = 0;
    SecKeychainItemRef itemRef = nil;

    OSStatus status1;
    status1 = SecKeychainFindGenericPassword(NULL, 
                                             strlen(serviceName), serviceName,
                                             strlen(accountName), accountName,
                                             &passwordLen, &password,
                                             &itemRef);

    if (status1 == noErr) {
        NSData* passwordData = [NSData dataWithBytes:password length:passwordLen];
        SecKeychainItemFreeContent (NULL, password);
        return [NSString stringWithCString:[passwordData bytes] encoding:NSUTF8StringEncoding];
    }

    return nil;
}
4

0 に答える 0