12

アプリサンドボックスを使用するようにLionアプリを変換しています。10.7.3で導入されたセキュリティスコープのブックマーク機能を利用して、フォルダへの永続的なアクセスを許可しようとしています。以下のコードはnilブックマークを返し、次のログメッセージを生成します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);
}

アップデート(x3)

これで動作するようになったので、ユーザーがでリソースを選択した後にPowerboxがリソースへのアクセスを許可するため、上記のコードでの呼び出しが不要である-startAccessingSecurityScopedResourceことを確認できます。-stopAccessingSecurityScopedResourceNSOpenPanel

別のアプリセッションで作成されたアプリスコープのブックマークからドキュメントスコープのブックマークを作成するなど、別のセキュリティスコープのURLからブックマークを作成する場合は、最初にファイルにアクセスする必要があります。

4

1 に答える 1

10

UIにはリストされていませんが、ドキュメントにはリストされている重要な資格が不足していることがわかりました。

com.apple.security.files.bookmarks.app-scope

2018年12月18日更新

このTwitterスレッドによると、この資格はもう必要ないかもしれません。これについて私に警告してくれた@pkambに感謝します。

于 2012-04-06T12:27:37.057 に答える