在 Firemonkey 应用程序中使用 OSX 安全范围的书签
Posted
技术标签:
【中文标题】在 Firemonkey 应用程序中使用 OSX 安全范围的书签【英文标题】:Using OSX Security-Scoped Bookmarks in a Firemonkey app 【发布时间】:2013-02-03 11:07:15 【问题描述】:我一直在使用 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”文件并将其设置为只读以防止其被覆盖。当然这太容易了,因为链接器抱怨文件无法修改......
【问题讨论】:
拜托,我是不是总是问太难的问题 :) 到目前为止还没有收到任何有效的答案 :) 关于 1) 投诉是否以类似 ShowMessage 的窗口形式出现?然后也许您可以安装madExcept
并在显示投诉时使用其Tools
文件夹中可用的程序madTraceProcess
,然后您会发现Embarcadero 如何调用链接器中困扰您的部分。如果它只是输出窗格中的一个文本行,那么这不起作用。
感谢您的建议,这是一个有趣的建议。它不是一条消息,而是构建日志输出中的一行。我可能可以使用其他工具来调试和捕获引发错误的位置,但是调试和修补编译器本身似乎有点过头了。与在应用程序中做一些解决方法相比,我可能需要更多的时间。
【参考方案1】:
好的,我终于找到了手动添加项目选项>权利中没有的权利的方法。
您不必在项目管理器中选择“App Store”构建,而是必须选择正常版本构建并像往常一样部署应用程序。 应用程序作为 APP 包部署在 PAServer 暂存目录中。在这个包中有一个“Entitlements.plist”文件,它是 XML 格式的,可以用文本编辑器进行编辑。打开文件后如何添加新的权利非常明显。
编辑后,必须手动对应用程序进行代码签名,并准备一个包。它比使用 Delphi IDE 稍微复杂一些,但在 Embarcadero 和 Apple 网站上有关于它的说明,它实际上没有问题。
还没有尝试过 bookmarkDataWithOptions 功能。
【讨论】:
【参考方案2】:另一种方法是取消激活部署页面中权利文件的复选框。
但请注意:每次在 Build/Release 或 App Store/Normal 之间切换时,delphi 都会激活该复选框。这意味着您必须在 deplayment-page 中再次停用它,以避免将此文件传输到 mac PC。
顺便问一下:您是否同时尝试过 StartAccessingSecurityScopedResource 功能? 在 MacApi.Foundation 单元中,该函数未在 NSURL 接口中声明。
你找到使用这个功能的方法了吗?
【讨论】:
嗨,欢迎来到 Stack Overflow!您已将答案和问题合二为一。由于您有一个单独的问题,您应该 ask a new question 解决您的具体问题。 我已从答案中删除了您的问题,以防止您的答案被删除(这似乎很有帮助)。 @Jesse 我不认为该用户试图提出新问题;只是用户没有足够的代表发表评论。我建议用户将他们的问题移到这个答案下。以上是关于在 Firemonkey 应用程序中使用 OSX 安全范围的书签的主要内容,如果未能解决你的问题,请参考以下文章
Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完整实例
使用 FireMonkey 及其跨平台,我应该在哪里存储我的应用程序数据?