新しいライオンのサンドボックスを理解するのにいくつか問題があります。
Powerbox
Lionには、サンドボックス化されたアプリケーションに代わってダイアログボックスを開いたり保存したりすることを任務とする信頼できるデーモンプロセスが含まれていることを知っています。
サンドボックス内で実行されているアプリケーションがパネルを直接表示するのではなく、NSOpenPanelまたはNSSavePanelダイアログを呼び出すたびに、AppKitは自動的にPowerboxにダイアログを表示するように要求します。開発者の観点からは、これらのパネルの使用方法に関してコードを変更する必要はありません。このプロセスは完全に透過的です。
ユーザーがファイルまたはディレクトリのセットを選択すると、Powerboxはサンドボックスカーネルモジュールの新機能を使用して、呼び出し元のアプリケーションのサンドボックスを拡張し、選択したファイルにアクセスできるようにします。アプリケーションコードが返されたURLまたはファイル名をパネルに照会するときまでに、アプリケーションコードはそれらのファイルにアクセスする権限をすでに持っており、すでに使用しているほとんどすべてのAPIを介してファイルを引き続き使用できます。
Ok。私はこのコードを使用していくつかの実用的なテストを行いました:
NSSavePanel *savePanel = [NSSavePanel savePanel];
savePanel.delegate = self;
savePanel.directoryURL = ...;
savePanel.nameFieldStringValue = ...;
[savePanel beginSheetModalForWindow:self.window
completionHandler:^(NSInteger returnCode) {
/* the completion handler */
}];
奇妙なことにNSOpenSavePanelDelegate
、完了ハンドラーの前に呼び出されるメソッドは、ファイルシステム上のファイルにアクセスできません。
これは正しいです?
しかしそうだとすれば、デリゲートのような方法panel:validateURL:error:
は役に立たなくなります!
アプリとの関係について詳しく説明してもらえますPowerbox
か?