Problemas ao criar um marcador com escopo de segurança
Estou convertendo meu aplicativo Lion para usar o Sandbox do aplicativo. Eu estou tentando fazer uso domarcadores com escopo de segurança Recurso introduzido em 10.7.3 para permitir o acesso persistente a uma pasta. O código que tenho abaixo retorna um indicador nulo e produz a seguinte mensagem de log:XPC couldn't look up the Mach service for scoped bookmarks agent
.
Eu definir oUser Selected File Access
direito aRead/Write Access
, e também tentou com e sem o ambiente..AccessingSecurityScopedResource
chamadas.
Eu acho que estou fazendo tudo certo de acordo com a documentação, então eu gostaria de agradecer todos os ponteiros. O código estava funcionando para recuperar um URL simples antes de começar a usar o sandbox no aplicativo.
<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>
Atualização (x3)
Agora que estou trabalhando, posso verificar que as chamadas para-startAccessingSecurityScopedResource
e-stopAccessingSecurityScopedResource
não são necessárias no código acima, uma vez que o Powerbox concede acesso ao recurso após o usuário selecioná-lo noNSOpenPanel
.
Se você estiver criando um marcador de outro URL com escopo de segurança, como criar um marcador com escopo de documento a partir de um marcador com escopo de aplicativo criado em outra sessão de aplicativo, será necessário primeiro acessar o arquivo.