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

前端之家收集整理的这篇文章主要介绍了macos – TOpenDialog / NSOpenPanel无法在沙盒Delphi应用程序中工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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来自不同的类,与没有沙盒的类相比.
我想这就是问题的原因.

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

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

解决方法

当应用程序位于沙箱中时,NSOpenPanel / NSSavePanel应由名为PowerBox的透明模块管理. AppKit框架的常规面板无效.但要启用PowerBox以访问文件系统,权利列表应包括
com.apple.security.files.user-selected.read-write YES

组态.

猜你在找的Delphi相关文章