【问题标题】:NSDocumentController openDocument: panel no longer permits access to app iCloud container in OS X 10.11 El CapitanNSDocumentController openDocument:面板不再允许访问 OS X 10.11 El Capitan 中的应用程序 iCloud 容器
【发布时间】:2016-01-06 17:16:18
【问题描述】:

我有一个 OS X/iOS 应用程序,它使用旧式通用容器 ID TEAMID.com.companyname.product,并在 OS X 上使用 NSDocument 和在 iOS 上使用 UIDocument 构建.

使用内置NSDocumentController openDocument: 面板在 OS X 10.8、10.9 和 10.10 上可以正常打开文件。在 10.10 中,Apple 扩展了该面板以允许 iCloud Drive 访问。在面板顶部,标题为“iCloud Library”的选择器显示“Appname - iCloud”和“iCloud Drive”作为选项。 选择前者可访问 App ubiquity 容器中的文档,后者显示可用的 iCloud Drive 文件夹。

在 10.11 El Capitan 中,选择“Appname - iCloud” - 视图不会改变(您会看到 iCloud Drive 文件夹的顶层视图)。没有警告信息。在侧边栏选择iCloud下的Appname也是一样的结果。

考虑到应用程序的性质(数据是私有的,并且不能被任何其他应用程序读取),将 ubiquity 文件夹公开并不理想 - 所以我不想走这条路。

解决方法是在请求面板中搜索适当的文件类型(种类),然后选择搜索:这台 Mac - 这工作正常,之前打开的保存的 URL 也是如此。所以应用沙盒不会导致问题。

显然,我希望 10.10 的行为继续下去 - 但如何实现这一点或者它是否是一个错误并不明显。 Apple 可能假设所有使用 NSDocument 构建的应用都希望公开其应用容器。

【问题讨论】:

  • 我可以确认,将适当的 NSUbiquitousContainers 键添加到 iOS 上的应用 plist 并将 NSUbiquitousContainerIsDocumentScopePublic 设置为 true(并触发 CFBundleVersion)立即使容器在 iOS 和 OS X 上都可见。不幸的是,这不是什么我想要。 :-(

标签: macos cocoa icloud osx-elcapitan


【解决方案1】:

这个问题似乎是 OS X 10.11 中的一个错误,标准的 NSDocument 文件打开/保存/移动面板无法强制转换为旧行为。然而,一个相当简单的解决方案是提供两个新的应用程序菜单项:

  • 打开 iCloud 列出(私有)普遍存在容器中的所有可用文档,
  • 移动到 iCloud 使用 [NSDocument moveDocumentToUbiquityContainer:]

【讨论】:

    【解决方案2】:

    您需要通过将以下内容添加到您的 info.plist 文件来使应用程序 iCloud 容器公开。

    <key>NSUbiquitousContainers</key>
        <dict>
            <key>HHWT75NS6T.au.com.ossh.appName</key>
            <dict>
                <key>NSUbiquitousContainerIsDocumentScopePublic</key>
                <true/>
                <key>NSUbiquitousContainerSupportedFolderLevels</key>
                <string>None</string>
            </dict>
        </dict>
    

    【讨论】:

    • 谢谢邓肯 我知道上述情况。麻烦的是这会使您的无处不在的容器公开。就我的应用程序而言,将其公开是不合适的(并且由于文件格式也不公开,因此没有任何意义)。文件请求者的行为发生了变化,这将破坏任何不希望公开应用普遍性容器的类似应用。
    • Well Public 意味着 Finder 或 iCloud Drive 等其他应用程序可以看到其内容。这意味着您可以以通常的 Finder 方式将文件复制到容器中或从容器中复制文件。许多应用程序具有专有格式,因此只要您使用适当的文档类型定义,这应该不是问题。当然,我并不真正了解您的用例,但唯一的选择是编写您自己的文件管理器。
    • 顺便说一句,我不认为这是一个错误,因为我前段时间为此记录了一个错误并且它已关闭 - “按设计工作”。
    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 2016-12-30
    • 2017-04-19
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多