TOpenDialog / NSOpenPanel无法在沙盒Delphi应用程序中工作

时间:2012-11-25 14:23:22

标签: macos delphi sandbox firemonkey delphi-xe3

Firemonkey应用程序中的TOpenDialog似乎存在问题,该应用程序是为Mac Appstore沙箱化的。我使用XE3,但它也存在于XE2中。 我实际上在这里找到了QC报告,但它仍然没有得到解决:

http://qc.embarcadero.com/wc/qcmain.aspx?d=105344

有没有人遇到同样的问题,或者有任何想法如何解决它?

很容易检查。只需在表单上放置一个TOpenDialog并调用Execute方法即可。根据Embarcadero说明签署并沙箱申请:

http://docwiki.embarcadero.com/RADStudio/en/Mac_OS_X_Application_Development

当调用Execute时有一个延迟,应用程序冻结片刻,但没有显示任何内容。没有例外或错误消息。 如果应用程序没有沙盒,则对话框可以正常工作。

此代码也不起作用,因此问题可能出现在TNSOpenPanel中,由TOpenDialog调用,但遗憾的是我无法找到它。

var
  LOpenDir: NSOpenPanel;
begin
  LOpenDir := TNSOpenPanel.Wrap(TNSOpenPanel.OCClass.openPanel);
  LOpenDir.runModal;
  LOpenDir.release;

我在Apple docs中读到,使用Sandbox时,NSOpenPanel派生自不同的类,与没有沙盒的类相比。 我想这就是问题的原因。

任何想法都将不胜感激。我们无法真正发布一个必须使用没有打开/保存对话框的文件的应用程序:)

顺便说一下,我在项目选项中尝试了几种权利组合,但它们没有效果。

1 个答案:

答案 0 :(得分:0)

当应用程序位于沙箱中时,NSOpenPanel / NSSavePanel应由名为Powerbox的透明模块管理。 AppKit框架的常规面板无效。但要启用Powerbox以访问文件系统,权利列表应包括

com.apple.security.files.user-selected.read-write YES

配置。