ファイルが追加されたときにアクションを送信できるように、ユーザーのゴミ箱を監視するにはどうすればよいですか。
前もって感謝します!
サンドボックス化されたアプリケーションはゴミ箱にアクセスできません。サンドボックス化されたアプリケーションは、セキュリティ上の理由からサンドボックス化され、ユーザーが削除したすべての種類のドキュメントや、サンドボックス化されたアプリケーションが以前の目的地ではアクセスできなかったであろうすべての種類のドキュメントがゴミ箱にある可能性があります。もちろん、ユーザーは、これらのファイルがゴミ箱に入れられた後も保存されることを期待しています。
アプリがゴミ箱にアクセスすることが本当に理にかなっている場合、たとえば、それがゴミ箱管理アプリであるため (ばかげた例ですが、私は知っています)、Apple は、要求するだけでアプリケーションにゴミ箱へのアクセスを許可します。そのため、タイプのいずれかの一時的な例外資格を指定する必要があります
com.apple.security.temporary-exception.files.home-relative-path.read-only
読み取り専用アクセスで十分な場合、または
com.apple.security.temporary-exception.files.home-relative-path.read-write
書き込みアクセスも必要な場合。これらはエンタイトルメント ディクショナリのキーで、値は文字列の配列で、各文字列はディレクトリを指定します。あなたの場合、それらの配列には、現在のユーザー/.Trash
に変換されるが含まれます。/Users/<username>/.Trash
例えば:
<key>com.apple.security.temporary-exception.files.home-relative-path.read-write</key>
<array>
<string>/.Trash</string>
</array>
これにより、アプリがこのディレクトリ (またはそのサブディレクトリ) にのみアクセスする限り、アプリをサンドボックスから部分的に解放できます。
Apple は、 App Store Connect Web サイドにリストされている特定の条件下で、一時的な例外資格の 1 つを使用するアプリのみを承認することに注意してください (その側面を表示するにはログインする必要があり、App Store Connect を使用する権限を持つ Apple ID が必要です)。 .
知る限り、これらの条件には、Apple のフィードバック アシスタントでバグ レポートを提出する必要があることが含まれます。(繰り返しになりますが、Web サイドにログインする必要がありますが、今回はすべての Apple ID がログインを許可されています)。Apple に、この例外が必要な理由を説明する必要があります。あなたはそれをうまく説明したほうがいいです!Apple があなたのユース ケースを正当であると見なさない場合、Apple はこのバグを無効としてクローズし、アプリの提出は拒否されます。バグが有効であると見なされた場合、アプリを提出する際にアプリが一時的な資格を使用していることを Apple に通知し、作成したバグ レポートを Apple に提示する必要があります。彼らはそれをもう一度読み、これが正当な理由であるとストア チームが開発チームに同意する場合、あなたの提出を通過させます。
アプリに適切な権利が付与されると、サンドボックス化されていないアプリと同じ方法でゴミ箱を監視できるようになります。たとえば、FSEvent APIを使用します。関数FSEventStreamCreate()
を使用すると、FSEventStreamRef
特定のパス(あなたの場合はゴミ箱)を監視し、このパスのコンテンツが変更され、RunLoopでスケジュールできるたびにユーザー定義のコールバック関数を呼び出します。スケジュールが設定されると、ディレクトリの内容が変更されるたびに、コールバック関数が呼び出されます。コールバック関数では、より高いレベルのイベントを取得するなど、やりたいことは何でもできます (コールバック関数は単純な C のみであるため、Obj-C コードで処理できる NSNotification を投稿することができます。 UIコードで)、または何らかのオブジェクトのObj-Cメソッドを直接呼び出すことができます(コールバックコンテキスト、グローバル変数に保存されるか、シングルトンとしてアクセス可能など)。