4

画像サイズを変換してから、新しいファイルを元の画像ファイルと同じディレクトリに保存しています。

「images」ディレクトリにしか権限を設定できません。アプリがそのディレクトリ内にある画像を選択する必要がある場合、期待どおりに機能します。別のディレクトリ (ユーザーが作成したディレクトリ フォルダなど) にある画像を選択すると、新しい画像が表示されません。App Sandbox には、"user selected file" ディレクトリ、"images" ディレクトリ、"download" ディレクトリ、"pictures" ディレクトリ、"music" ディレクトリ、"movies" ディレクトリしか表示されません。

プログラムでこの許可を与える方法はありますか?

4

1 に答える 1

11

あなたは、サンドボックス モデルに関する長年の懸念にぶつかりました。同じ場所で入力ドキュメントを出力ドキュメントに変換するアプリケーションをサポートすること。

NSIsRelatedItemTypeAppleは、アプリケーション内のドキュメント タイプのエントリに関する問題のサブセットに対処しましたInfo.plist。このフラグが存在しYES、複数のドキュメント タイプ エントリに存在する場合、それらのタイプのいずれかのファイルへのアクセス権がアプリケーションに与えられると、他のタイプのファイルを作成する権限がアプリケーションに与えられます。

たとえば、TextEdit では.txt、 、.rtfおよび.rtfdファイル タイプに対してこのフラグが設定されているため、これらのタイプのファイルへのアクセス権が与えられると、同じ名前のファイルを作成できますが、それ以上のユーザー許可を必要とせずに他のタイプのファイルを作成できます。「プレーンテキストに変換」などのコマンドを有効にします。

あなたの質問から、あなたはこれを行っていないように見えますが、「image.png」を「image-resized.png」に変換します。つまり、 typeではなく名前を変更します。これは、アプリケーションがユーザーから追加のアクセス許可を取得しない限りサポートされません。

最善の回避策は、サイズを変更したいファイルを含むフォルダーへの許可をユーザーに求めることです。アプリケーションがそのフォルダー内で任意の数のファイル作成を実行できることを確認すると、特定の特別なフォルダーへのアクセスを許可する資格について観察したように。

あなたが従うことができる1つのプロセスは次のとおりです。

1 - 出力ファイルを作成する必要がある場合、アプリケーションが含まれているフォルダにアクセスできるかどうかを確認します-accessこの機能を使用できます (OS X マニュアルのセクション 2 を参照してください。例: ターミナルで「man アクセス」を使用するか、Xcode のドキュメントでアクセスを検索してください)。 .

3 - (はい、2 を見逃しました。以下を参照してください) アクセス権がない場合は、含まれているフォルダーをユーザー要求します。適切なNSOpenPanelプロンプトを表示して、含まれているフォルダーを選択するように促し、理由を説明します。

4 - アクセス権が付与されたら、それを保存します- アプリケーションの「Application Support」ディレクトリ内のファイルに、そのフォルダへのセキュリティ スコープのブックマークを保存します。キャッシュを構築するときにキャッシュを「プルーニング」できます。任意のフォルダーへのブックマークにより、ファイルシステム ツリー内のその下のフォルダーへのブックマークの必要がなくなります。これにより、次のことが可能になります。

2 - アクセス権がない場合は、保存したブックマークのキャッシュを確認し、フォルダ用のブックマークがあるかどうかを確認し、ある場合はアクティブにします。このチェックは、ファイル システム ツリー内の格納フォルダーまたはその親フォルダーのブックマークに対するものであることに注意してください。

このプロセスを使用すると、ユーザーが使用するフォルダーへのアクセスが蓄積されます。ユーザーがキャッシュを消去する方法を提供する必要があります。

それは思ったほど悪くはありません!HTH。

于 2013-10-29T19:52:30.823 に答える