我一直在使用Delphi XE3开发OSX应用程序并遇到各种问题。最新版本是为Apple Appstore构建的sanboxed版本。
用户必须选择任意文件夹,并且应用程序需要访问它。由于有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”文件并将其设置为只读以防止被覆盖。当然太容易了,因为链接器抱怨文件无法修改......
答案 0 :(得分:0)
好的,我终于找到了手动添加项目选项>中不可用的权利的方法。授权。
您不必在项目管理器中选择“App Store”构建,而是必须选择正常版本构建并照常部署应用程序。
该应用程序作为APP包部署在PAServer scratch-dir中。在这个包中有一个“Entitlements.plist”文件,它是XML格式的,可以用文本编辑器编辑。打开文件后,如何添加新的权利是非常明显的。
编辑完成后,必须手动对应用程序进行代码签名,并且必须准备一个包。它比使用Delphi IDE稍微复杂一点,但在Embarcadero和Apple网站上有关于它的说明,它实际上没有问题。
还没有尝试过bookmarkDataWithOptions函数。
答案 1 :(得分:0)
另一种方法是停用部署页面中权利文件的复选框。
但注意:在Build / Release或App Store / Normal之间改变时,delphi会激活复选框。这意味着您必须在deplayment页面中再次停用它,以避免将此文件传输到mac PC。
顺便问一下:您是否尝试过StartAccessingSecurityScopedResource函数? 在MacApi.Foundation单元中,该函数未在NSURL接口中声明。
您是否找到了使用此功能的方法?