Ошибка добавления элемента цепочки для ключей в цепочку ключей с ошибкой «ошибка разрешения на запись» в OS X?

#objective-c #macos

#objective-c #macos

Вопрос:

создайте один объект доступа к элементу цепочки для ключей:

 {
    (SecAccessRef)createKeychainAccessForLabel:(NSString *)accessLabel appPahts:(NSArray *)appPaths
    {
        OSStatus err = noErr;
        SecAccessRef access=nil;

        //Create trusted application references; see SecTrustedApplications.h:
        NSMutableArray *trustedApplications = [NSMutableArray array];
        for (NSString *aPath in appPaths)
        {
            SecTrustedApplicationRef appRef = NULL;
            err = SecTrustedApplicationCreateFromPath([aPath UTF8String], amp;appRef);
            [trustedApplications addObject:(id)appRef];
            CFRelease(appRef);
        }

        //Create an access object:
        err = SecAccessCreate((CFStringRef)accessLabel, (CFArrayRef)trustedApplications, amp;access);

        if (err != noErr)
        {
            access = nil;
        }

        // the momery would be released by the invoker
        return access;
    }
}
 

создать элемент цепочки для ключей:

 {
        const char *serviceUTF8 = [serviceName UTF8String];
        const char *accountUTF8 = [account UTF8String];
        const char *passwordUTF8 = [password UTF8String];
        const char *itemLabelUTF8 = [label UTF8String];

        //Create initial access control settings for the item:
        SecAccessRef access = [self createKeychainAccessForLabel:label appPahts:appPaths];

        //Set up the attribute vector (each attribute consists of {tag, length, pointer}):
        SecKeychainAttribute attrs[] =
        {
            {kSecLabelItemAttr, strlen(itemLabelUTF8), (char *)itemLabelUTF8},
            {kSecAccountItemAttr, strlen(accountUTF8), (char *)accountUTF8},
            {kSecServiceItemAttr, strlen(serviceUTF8), (char *)serviceUTF8}
        };

        SecKeychainAttributeList attributes = {sizeof(attrs) / sizeof(attrs[0]), attrs};

        err = SecKeychainItemCreateFromContent(
                                               kSecGenericPasswordItemClass,
                                               amp;attributes,
                                               strlen(passwordUTF8),
                                               passwordUTF8,
                                               NULL, // use the default keychain
                                               access,
                                               amp;item);

        CFStringRef message = SecCopyErrorMessageString(err, NULL);
        NSLog(@"create keychain item: %@", (NSString *)message);
}
 

запустите эти коды в тестовой версии os x 10.10, но с окончанием ошибки: создать элемент keychain: ошибка разрешения записи, выполните поиск по этому вопросу в Google и stack overflow, но ничто
не является относительным, есть идеи??

Комментарии:

1. Этот вопрос, похоже, не по теме, поскольку он касается OSX 10.10, который в настоящее время находится на стадии предварительного просмотра для разработчиков 2 и не был выпущен для широкой публики. Ожидается, что в операционных системах до бета-тестирования будут проблемы. В настоящее время проблемы с OSX 10.10 должны быть сообщены Apple и обсуждаться только на developer.apple.com форумы.

2. Спасибо, Merlin069, за ваш ответ, я перейду к developer.apple.com форумы, чтобы что-то искать.

3. @thethirdtiger Вы решили эту проблему? Я также сталкиваюсь с такой же проблемой. Заранее спасибо.