【问题标题】:QLPreviewView can not show the quicklook preview in sandboxQLPreviewView 无法在沙箱中显示 quicklook 预览
【发布时间】:2015-06-01 10:27:16
【问题描述】:

我使用 QLPreviewView 在应用中显示 quicklook 预览。没有沙盒,这个功能很好,但是一旦将应用程序更改为沙盒,预览就无法显示。

我在控制台中发现错误:QuickLookUIHelpe(20786) deny file-read-data XXX.

我已使用 安全范围的书签 & com.apple.security.files.user-selected.read-write 来授予用户主目录的访问权限,然后:

[allowedURL startAccessingSecurityScopedResource];
self.myPreiviewItem.myURL = fileURL;
self.myQLPreviewView.previewItem = self.myPreiviewItem;
[self.myQLPreviewView refreshPreviewItem];
[allowedURL stopAccessingSecurityScopedResource];

有了这些,我可以删除用户主目录的文件,但是 QLPreviewView 不能工作。 我不知道这两个场景有什么区别,QLPreviewView 需要更多的沙盒吗?

如果我将com.apple.security.files.downloads.read-only添加到授​​权中,“下载”中的文件可以预览,但用户主目录的其他文件不能预览。

【问题讨论】:

  • fileURL 和 allowedURL 有什么区别?
  • allowedURL 只是表示 com.apple.security.files.user-selected.read-write 授予的目录,例如用户主目录,而 fileURL 是一个文件被预览,并且它在被授予的目录中。

标签: macos cocoa sandbox appstore-sandbox quicklook


【解决方案1】:

我终于找到了解决办法!

refreshPreviewItem是异步调用,所以在Mac加载完预览之前,下面的apistopAccessingSecurityScopedResource立即关闭访问,结果Mac加载预览失败。

所以解决方法是:NOT在这里调用stopAccessingSecurityScopedResource,保持allowedURL的访问权限,直到不需要QL预览功能,然后在那里调用stopAccessingSecurityScopedResource,比如关闭的时候窗户。

【讨论】:

    【解决方案2】:

    我不久前(在小牛队)遇到过这个问题,或者至少是类似的问题。

    这就是为什么我开始要求用户访问他们希望快速查看的文件的父文件夹。在撰写本文时,请随意查看我在 this app of mine 的 1.1 版中是如何做到的。只需进入 Chikoo → 首选项... → 文件夹访问。下面是两张截图:

    我承认这不是一个很好的解决方案。这是我想出的一个折衷方案来解决这个问题。

    【讨论】:

    • 我还要求用户访问用户主文件夹,仍然不行~~
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多