Не удалось создать закладку безопасности

Я конвертирую свое приложение Lion для использования Sandbox приложения. Я пытаюсь использовать функцию закладок в области безопасности, представленную в 10.7.3, чтобы разрешить постоянный доступ к папке. Код, который у меня ниже, возвращает нулевую закладку и создает следующее сообщение журнала: XPC couldn't look up the Mach service for scoped bookmarks agent.

Я установил право User Selected File Access на Read/Write Access, а также попытался с и без окружающих вызовов ..AccessingSecurityScopedResource.

Я думаю, что я делаю все правильно в соответствии с документацией, поэтому я буду благодарен за любые указатели. Код работал на получение простого URL-адреса, прежде чем я начал использовать песочницу приложения.

NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];

NSInteger result = [openPanel runModal];

if( result == NSFileHandlingPanelCancelButton ) {
    return;
}

NSArray *urls = [openPanel URLs];

if( urls != nil && [urls count] == 1 ) {
    NSURL *url = [urls objectAtIndex:0];

    NSData *bookmark = nil;
    NSError *error = nil;
    bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
             includingResourceValuesForKeys:nil
                              relativeToURL:nil // Make it app-scoped
                                      error:&error];
    if (error) {
        NSLog(@"Error creating bookmark for URL (%@): %@", url, error);
        [NSApp presentError:error];
    }

    NSLog(@"bookmark: %@", bookmark);
}

Обновление (x3)

Теперь, когда я заработал, я могу проверить, что вызовы -startAccessingSecurityScopedResource и -stopAccessingSecurityScopedResource не нужны в коде выше, так как Powerbox предоставляет доступ к ресурсу после того, как пользователь выбирает его в NSOpenPanel.

Если вы создаете закладку из другого URL-адреса с областью безопасности, например, чтобы сделать закладку с областью действия с документами из закладки приложения, созданной в другом сеансе приложения, вам необходимо сначала получить доступ к файлу.

Ответ 1

Оказывается, мне не хватало важного права, не указанного в пользовательском интерфейсе, но перечисленного в документации:

com.apple.security.files.bookmarks.app-scope

Обновление 18/12/2018

Согласно этой ветке Twitter, это право больше не требуется. Спасибо @pkamb за то, что предупредил меня об этом.