0

C++ API を使用して、macOS のキーチェーンに単純な文字列シークレットを追加しようとしています。残念ながら、SecItemAdd職場への電話を受けることができません。kSecValueRefキーの値が間違ったタイプであることはわかっていますが、これまでのところ、Google/ Apple ドキュメント/既存の StackOverflow の質問では、どのタイプを使用する必要があるか、およびその作成方法が明らかにされていません。これが私がこれまでに持っているものです:

CFStringRef keys[4];
keys[0] = kSecClass;
keys[1] = kSecValueRef;
keys[2] = kSecAttrAccount;
keys[3] = kSecAttrService;

CFTypeRef values[4];
values[0] = kSecClassGenericPassword;
values[1] = CFSTR("password");
values[2] = CFSTR( "account-1" );
values[3] = CFSTR( "service-1" );
CFDictionaryRef attributes = CFDictionaryCreate
(
    ( CFAllocatorRef )NULL,
    ( const void ** )keys,
    ( const void ** )values,
    4,
    &kCFTypeDictionaryKeyCallBacks,
    &kCFTypeDictionaryValueCallBacks
);
CFShow(attributes);
OSStatus status = SecItemAdd(attributes, NULL);

それで、私は何を入れるべきkSecValueRefですか?CFStringRef への参照を作成しようとしましたが、うまくいきませんでした。また、 Appleのドキュメントには次のように書かれていることもわかります。

対応する値は、要求されたアイテム クラスに応じて、タイプ SecKeychainItem、SecKey、SecCertificate、または SecIdentity です。

しかしSecKeychainItem、アイテムをまだ追加していないため、持っていません。他のタイプは、通常の文字列には適していないようです。

考え?

4

1 に答える 1