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