Проблема с созданием закладки с областью безопасности

Я конвертирую свое приложение Lion для использования песочницы приложений. Я пытаюсь использовать функцию закладок в области безопасности, представленную в 10.7.3, чтобы обеспечить постоянный доступ к папке. Приведенный ниже код возвращает нулевую закладку и создает следующее сообщение журнала: XPC не удалось найти службу Mach для агента закладок с областью действия.

Я установил право User Selected File 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-адреса с областью безопасности, например создаете закладку с областью документа из закладки с областью приложения, созданной в другом сеансе приложения, вам необходимо сначала получить доступ к файлу.

12
задан Dov 26 April 2012 в 19:53
поделиться