2

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

用户必须选择一个任意文件夹,并且应用程序需要访问它。由于OpenDialog存在问题,我不得不转向拖放功能。
用户将文件夹拖到应用程序中,沙箱使应用程序可以临时访问它并且一切正常。
为了在应用程序重新启动时保留对该文件夹的访问权限,我必须使用所谓的“安全范围的书签

我有两个问题:
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”文件并将其设置为只读以防止它被覆盖。当然这太容易了,因为链接器抱怨文件无法修改......

4

2 回答 2

0

另一种方法是在部署页面中停用权利文件的复选框。

但请注意:每次在 Build/Release 或 App Store/Normal 之间切换时,delphi 都会激活该复选框。这意味着您必须在播放页面中再次停用它,以避免将此文件传输到 mac PC。

顺便说一句:您是否同时尝试过 StartAccessingSecurityScopedResource 功能?在 MacApi.Foundation 单元中,该函数未在 NSURL 接口中声明。

你找到使用这个功能的方法了吗?

于 2013-03-17T13:38:20.007 回答
0

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

而不是在项目管理器中选择“App Store”构建,您必须选择正常版本构建并像往常一样部署应用程序。
应用程序作为 APP 包部署在 PAServer 暂存目录中。在这个包中有一个“Entitlements.plist”文件,它是 XML 格式的,可​​以用文本编辑器进行编辑。打开文件后如何添加新权利是非常明显的。

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

还没有尝试过 bookmarkDataWithOptions 功能。

于 2013-02-07T16:53:46.583 回答