私はネットとAppleの助けを精査して、これに関するある種のガイダンスを求めてきました。誰かが同じような状況に遭遇したのではないか、あるいは何が起こっているのか(または起こっていないのか)について何らかの洞察を持っているのではないかと思います。
アプリケーションが後のセッションで呼び出すファイルのアプリスコープのブックマークを取得しようとしています。パス自体が選択されたセッション中に開く(および再度開く)ことができるため、ユーザーが選択した後、パス自体がサンドボックスに正しく追加されていることを確認できます。
ただし、後でアクセスするためにセキュリティスコープのブックマークを取得しようとしても機能しません。
これが私がしていることです:
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
NSError *error = nil;
NSData *bookmarkData = [url
bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
[url release];
url
文字列から生成されたpath
ものと、たとえばNSSavePanelの結果でテストしたものの両方で試しましたURL
。(この文字列path
は、従来の理由から、私が使用できるようにしたい文字列です。)
bookmarkDataWithOptions
他のレガシーコードの理由で、利用できない10.6 SDKでコンパイルする必要があるため、定数の代わりにの値を使用する必要NSURLBookmarkCreationWithSecurityScope
があります。
パスが問題のファイルを「/Users/me/Documents/document.ext」として指していること、およびがNSURL
正しく初期化されているように見えること(または少なくとも同じパスを反映していること)を確認できます。
アプリケーションには資格が含まれていますcom.apple.security.files.bookmarks.app-scope
。
とにかく、これは機能しません。そのコードの結果bookmarkData
は0x0と0x0の両方error
になり、コンソールには次のように表示されます。ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.
の代わりにに変更relativeToURL
し、エンタイトルメントをに変更すると、正しく機能しているように見えます。つまり、少なくともゼロ以外の値を取得し、エラーはログに記録されません。しかし、それは私が望んでいることではないと確信しています(つまり、ドキュメントスコープのブックマーク)。url
nil
com.apple.security.files.bookmarks.document-scope
bookmarkData
私が間違っていることは明らかですか?