NSDocumentController openDocument:面板不再允许在OS X 10.11 El Capitan中访问app iCloud容器

时间:2015-10-08 22:03:45

标签: macos cocoa icloud osx-elcapitan

我有一个OS X / iOS应用程序,它使用旧式无处不在的容器ID TEAMID.com.companyname.product ,并在OS X和{{1上使用NSDocument构建在iOS上。

使用内置的UIDocument面板,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 Folders的顶级视图)。没有警告信息。在侧栏中选择iCloud下的Appname会产生相同的结果。

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

解决方法是在请求面板中搜索相应的文件类型(种类),然后选择搜索:此Mac - 这样可以正常工作,之前打开的已保存网址也是如此。因此App沙盒不会导致问题。

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

2 个答案:

答案 0 :(得分:0)

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

  • 打开iCloud 列出(私人)无处不在容器中的所有可用文档,
  • 使用[NSDocument moveDocumentToUbiquityContainer:]移至iCloud

答案 1 :(得分:0)

您需要将以下内容添加到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>