Problem z tworzeniem zakładki z zabezpieczeniami
Konwertuję aplikację Lion, aby korzystać z aplikacji Sandbox. Próbuję skorzystać zzakładki z zabezpieczeniami funkcja wprowadzona w 10.7.3, aby umożliwić stały dostęp do folderu. Kod, który mam poniżej, zwraca zerową zakładkę i generuje następujący komunikat dziennika:XPC couldn't look up the Mach service for scoped bookmarks agent
.
UstawiłemUser Selected File Access
uprawnienie doRead/Write Access
, a także próbował z i bez otoczenia..AccessingSecurityScopedResource
połączenia.
Myślę, że robię wszystko zgodnie z dokumentacją, więc docenię wszelkie wskazówki. Kod pracował nad pobraniem zwykłego adresu URL przed rozpoczęciem piaskowania aplikacji.
<code>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); } </code>
Aktualizacja (x3)
Teraz, kiedy to działa, mogę zweryfikować, czy połączenia do-startAccessingSecurityScopedResource
i-stopAccessingSecurityScopedResource
nie są konieczne w powyższym kodzie, ponieważ Powerbox zapewnia dostęp do zasobu po wybraniu go przez użytkownikaNSOpenPanel
.
Jeśli tworzysz zakładkę z innego adresu URL z zakresem zabezpieczeń, na przykład tworząc zakładkę o zasięgu dokumentu z zakładki o zasięgu aplikacji utworzonej w innej sesji aplikacji, musisz najpierw uzyskać dostęp do pliku.