У меня есть некоторые проблемы с пониманием новой песочницы Lion.
Я знаю, что Lion включает доверенный процесс демона, называемый Powerbox
, чья работа заключается в отображении и управлении диалоговыми окнами открытия / сохранения от имени изолированных приложений.
Как и в Руководстве по подписанию кода и изолированной программной среде приложений говорится:
Каждый раз, когда приложение, работающее внутри песочницы, вызывает диалог NSOpenPanel или NSSavePanel, вместо того, чтобы показывать панели напрямую, AppKit автоматически просит Powerbox представить диалог. С точки зрения разработчика, никаких изменений кода в отношении того, как используются эти панели, не требуется; этот процесс полностью прозрачен.
После того, как пользователь выберет набор файлов или каталогов, Powerbox использует новые функции в модуле ядра песочницы, чтобы расширить изолированную программную среду вызывающего приложения, чтобы разрешить доступ к выбранным файлам. К тому времени, когда код приложения запрашивает у панели возвращенные URL-адреса или имена файлов, оно уже имеет разрешение на доступ к этим файлам и может продолжать использовать файлы почти через любой API, который он уже использует.
Хорошо. Я провел несколько практических тестов, используя этот код:
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
?