macos - 在 Firemonkey 应用程序中使用 OSX 安全范围书签

标签 macos delphi sandbox firemonkey entitlements

我一直在使用 Delphi XE3 开发 OSX 应用程序并遇到各种问题。最新版本是为 Apple Appstore 构建的沙盒版本。

用户必须选择任意文件夹,并且应用程序需要访问它。既然有problem with the OpenDialog ,我不得不转向拖放功能。
用户将文件夹拖到应用程序中,沙箱为应用程序提供对其的临时访问权限,并且一切正常。
为了在应用程序重新启动时保留对此文件夹的访问权限,我必须使用所谓的“security-scoped bookmarks

我遇到两个问题:
1) 如何将“com.apple.security.files.bookmarks.app-scope”权限添加到XE3 firemonkey应用程序?它在“项目选项”->“权利”中不可用。如果我在“.entitlements”文件中手动添加它,那么在构建应用程序时它会被覆盖。 那么有没有办法添加项目选项列表中没有的自定义权利?

2) 要创建书签,我应该使用 NSURL.bookmarkDataWithOptions方法。我认为应该这样使用,但我不确定确切的语法:

var
  URL: NSURL;
  Err: NSError;
  Data: NSData;
...
URL := TNSURL.Create;
Data := URL.bookmarkDataWithOptions(NSURLBookmarkCreationWithSecurityScope, nil, @Err);
...

也许应该调用 Wrap(...) 而不是 Create。 我还没有尝试过,因为如果没有问题 1) 的答案,它就没有意义。

似乎没有人为 Delphi 写过任何关于这些问题的文章,但我希望这里有人有这方面的经验。

提前致谢。

编辑:
对于问题1)我尝试手动添加编辑OSX32文件夹中的“.entitlements”文件并将其设置为只读以防止其被覆盖。当然,这太容易让人难以置信了,因为链接器提示该文件无法修改......

最佳答案

好的,我终于找到了手动添加“项目选项”>“权利”中不可用的权利的方法。

您不必在项目管理器中选择“App Store”构建,而是必须选择正常发布构建并照常部署应用程序。
应用程序作为 APP 包部署在 PAServer 临时目录中。该包内有一个“Entitlements.plist”文件,该文件采用 XML 格式,可以使用文本编辑器进行编辑。打开文件后,如何添加新权利是非常明显的。

编辑后,必须手动对应用程序进行代码签名并准备包。它比使用 Delphi IDE 稍微复杂一些,但是 Embarcadero 上有相关说明。和苹果网站,实际上没有任何问题。

还没有尝试过 bookmarkDataWithOptions 功能。

关于macos - 在 Firemonkey 应用程序中使用 OSX 安全范围书签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671800/

相关文章:

objective-c - 如何创建基本的 osx prefPane?

excel - 你如何从 Excel 宏调用,一个与 Excel 电子表格交互的 applescript?

bash - 在子文件夹中查找具有特定文件命名的 mp4 文件,并使用 ffmpeg 每秒从中提取帧

Flash AS3 在尝试获取外部 swf 时获取安全沙箱违规

javascript - 安全的、可沙盒化的用户暴露编程语言/环境?

macos - 使用具有不同包标识符的 Sparkle 更新 .app

Delphi XE 建模 - 'Open diagram' 已禁用

delphi - Delphi 64中动态数组的最大长度?

delphi - 我如何知道字体是否具有给定 Unicode 字符的字形?

javascript - 如何从 Google Chrome 扩展程序访问网页的事件监听器