Identidad de cliente de Apple Keychain Store para que solo mi aplicación pueda acceder a ella

Objetivo

Necesito almacenar la identidad del cliente en la aplicación OS X de manera segura de tal manera que solo mi aplicación pueda acceder a ella. Sin preguntar solicitando permisos.

Problema

El problema apareció inmediatamente cuando intentaba almacenar la identidad del cliente. Aquí está el ejemplo de código (qué he atado hasta ahora):

- (BOOL)saveClientIdentity:(SecIdentityRef)clientIdentity error:(NSError**) error
{
    NSDictionary *attributes = @{
        (__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly,
        (__bridge id)kSecValueRef:(__bridge id)clientIdentity,
        (__bridge id)kSecAttrApplicationTag:[kMyKeychainAttrApplicationTag dataUsingEncoding: NSUTF8StringEncoding],
        (__bridge id)kSecAttrAccessGroup:kMyKeychainAttrAccessGroup
    };

    OSStatus status = SecItemAdd((__bridge CFDictionaryRef)attributes, NULL);
    // status == -25299
    …
}

Constantemente obtengo el código -25299 y la herramienta expande el problema:

$ security error -25299
Error: 0xFFFF9D2D -25299 The specified item already exists in the keychain.

Por lo tanto, intenta anular la identidad global del cliente (nunca escribí con éxito una identidad de cliente para esta aplicación, por lo que no debería haber tal conflicto) y no sé qué hacer. Tiene que ser privado solo para esta aplicación.

Verifiqué lo que sucede para el código de carga respectivo. Carga mi identidad de desarrollador y no quiero eso.

- (SecIdentityRef)clientIdentity
{
    NSDictionary *attributes =
    @{
      (__bridge id)kSecClass:(__bridge id)kSecClassIdentity,
      (__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly,
      (__bridge id)kSecAttrApplicationTag:[kMyKeychainAttrApplicationTag dataUsingEncoding: NSUTF8StringEncoding],
      (__bridge id)kSecAttrAccessGroup:kMyKeychainAttrAccessGroup
      };

    CFTypeRef universalResult = NULL;
    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)attributes, &universalResult);
    SecIdentityRef result = (SecIdentityRef)universalResult;
    if (result)
    {
        CFAutorelease(result);
    }
    if (status != noErr)
    {
        NSLog(@"Failed to load client identity: %@", NSErrorFromStatusErrorCode(status));
    }
    return result;
}
Notas

Necesito usar el mismo código para iOS, pero aquí no debería haber ningún problema ya que, por defecto, el llavero de iOS no se comparte entre las aplicaciones.

Respuestas a la pregunta(2)

Su respuesta a la pregunta