Проблемы с созданием закладок с защитой
Я конвертирую свое приложение Lion в "песочницу" приложения. Я пытаюсь использовать функцию закладок в области безопасности, представленную в 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);
}
Обновление (х3)
Теперь, когда у меня это работает, я могу проверить, что звонки на -startAccessingSecurityScopedResource
а также -stopAccessingSecurityScopedResource
в приведенном выше коде нет необходимости, так как Powerbox предоставляет доступ к ресурсу после того, как пользователь выберет его в NSOpenPanel
,
Если вы создаете закладку из другого URL-адреса, относящегося к области безопасности, например, создаваете закладку в области документа из закладки в области приложения, созданной в другом сеансе приложения, то сначала необходимо получить доступ к файлу.
1 ответ
Оказывается, мне не хватало важного права, не указанного в пользовательском интерфейсе, но перечисленного в документации:
com.apple.security.files.bookmarks.app-scope