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