3

私のMac OSアプリは、ユーザーの操作(ドラッグアンドドロップ)によってエイリアスのNSURLを取得するため、アプリにはエイリアスファイルを読み取る権限がありますが、アプリサンドボックス内の元のファイルを読み取る権限がありません(Mac OS X 10.7 /8)。

エイリアスを解決する

NSData* bookmark = [NSURL bookmarkDataWithContentsOfURL:aliasURL error:nil];
origURL = [NSURL URLByResolvingBookmarkData:bookmark
                                    options:NSURLBookmarkResolutionWithoutUI
                              relativeToURL:nil
                        bookmarkDataIsStale:nil
                                      error:&error];

origURL ファイルを読み取ろうとすると、次のエラーが表示されます: The file couldn’t be opened because you don’t have permission to view it.

origURL で を呼び出してみstart/stopAccessingSecurityScopedResourceましたが、助けにはなりませんでした。

NSURLBookmarkResolutionWithSecurityScopeオプションでブックマークデータの解決も試みましたが"The file couldn’t be opened because it isn’t in the correct format."、URLByResolvingBookmarkData メソッドでエラーが発生します。

それで、どうやって?ありがとう。

4

2 に答える 2

3

私はこれを試したことはありませんが、何が起こっているのか考えられると思います。OS X がドラッグ アンド ドロップでサンドボックスを通過する方法は、アプリが終了するまで、ファイルがドロップされたファイルへのアクセスにドロップされることをアプリに許可することです。これは、ペーストボード上のプレーンNSStringファイル パスを使用して機能するため、セキュリティ スコープ メカニズムに依存しません。

あなたのアプリはおそらくエイリアスファイルにアクセスできますが、それが参照するファイルではなく、そのファイルのみにアクセスできます。サンドボックスのホール パンチ メカニズムは、おそらくエイリアスに従っておらず、基になるファイルへのアクセスを許可していません。エイリアスが指すファイルのパスを取得できる場合 (それが可能かどうかはわかりません)、ユーザーにNSOpenPanel. これは、Apple が「Power Box」と呼んでいるものを使用して、サンドボックスを突破する別の方法です。

これを行う方法の詳細については、https ://stackoverflow.com/a/11786156/105717 に書いた回答を確認してください。別の回答にリンクし、何が起こっているのかをユーザーに明確にするためにいくつかの便利な機能を追加します。

于 2012-10-17T14:28:56.520 に答える
0

たぶん、私の同様の状況と解決策が役立つかもしれません:

資格ファイルで資格「com.apple.security.files.bookmarks.app-scope」を「yes」に設定しましたか?

「ファイルの形式が正しくないため、ファイルを開くことができませんでした。」ブックマークを解決しようとしたときに同じエラーが発生しました。これは、ファイルが Finder でロックされていたという事実であることが判明しました (ファイルの「情報を取得」を実行し、「ロックされた」ボックスがオフになっていることを確認します)。そもそもデータが生成されていません。

そこに役立つ何かがあることを願っています!

トッド。

于 2012-10-14T10:28:22.913 に答える