11

私はネットと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し、エンタイトルメントをに変更すると、正しく機能しているように見えます。つまり、少なくともゼロ以外の値を取得し、エラーはログに記録されません。しかし、それは私が望んでいることではないと確信しています(つまり、ドキュメントスコープのブックマーク)。urlnilcom.apple.security.files.bookmarks.document-scopebookmarkData

私が間違っていることは明らかですか?

4

2 に答える 2

10

私の永遠の恥に、それは私のせいでした。

どういうわけか、テストとデバッグのためにプロジェクトを別のマシンに移動する際に、開発ビルドのコード署名がオフになりました。

どうやらこれは物事を(ほとんど)静かに失敗させ、エラーコードはなく、コンソールに不可解なメッセージだけが表示され、他のものが正しく機能していないことを示すものは他にありません。

他の誰かが誤って同じことをした場合に備えて、これをここに残しておきます。

于 2012-11-16T05:28:29.513 に答える
0

こんにちは2019年とGoogle社員を超えて。同じ問題が発生し、開発証明書をやり直すことで修正しました。[署名を自動的に管理する]のチェックを外して、再度チェックします(別のチームに切り替えて元に戻す場合があります)。

于 2019-05-20T01:25:37.320 に答える