【问题标题】:Why is my iCloud Drive AppFolder visible on MacOS, but disabled in iCloud Drive App on iOS?为什么我的 iCloud Drive AppFolder 在 MacOS 上可见,但在 iOS 上的 iCloud Drive App 中被禁用?
【发布时间】:2016-01-12 06:01:59
【问题描述】:

我为我的 iOS 应用程序开发了一个 iCloud Drive 导出功能,它可以工作。 我可以在 Mac OS X 10.11 上的 iCloud Drive 文件夹中的公共 AppContainerFolder 中看到导出的文档。

但在 iOS 上,我只能在 iCloud Drive 应用程序中看到 AppContainerFolder。它已被禁用,我无法打开该文件夹,也无法查看其中的文档。

Image of the disable folder in the iOS iCloud Drive App

从 iCloud Drive 设置中,我可以看到我导出的文件在 iCloud Drive 的那个 AppContainerFolder 中。

Image of the AppContainerFolder inside the iCloud settings

有人对 iCloud Drive 有过这样的问题吗?

我在我的应用程序中使用了两个应用程序容器,一个带有“iCloud.com...”标识符用于导出,另一个带有“TeamIdentifier.com...”标识符用于 Ensembles-CoreData 同步。 我使用以下方法明确使用容器的 URL:

[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com..."]

我已经尝试只使用 TeamIdentifier-Container,但 AppContainerFolder 的可见性没有变化。

我尝试调整 BundleVersion,我使用了 Info.plist NSUbiquitousContainers 设置。我还通过 TestFlight 向外部测试人员提供了 Build,看看它是否与开发设备有关。

我还没有做的唯一一件事是向 AppStore 发布一个带有新 BundleVersion 的新版本,看看它是否与生产性应用程序与开发中的应用程序有关。

欢迎任何提示和提示。

【问题讨论】:

  • 您是否在应用程序 info.plist 中设置了对 Public 的访问权限? (NSUbiquitousContainerIsDocumentScopePublic=YES)
  • NSUbiquitousContainersiCloud.au.com.ossh.AppNameNSUbiquitousContainerIsDocumentScopePublicNSUbiquitousContainerSupportedFolderLevels
  • 你好 Duncan,谢谢你的提示,但是是的,我做到了:iCloud.com...NSUbiquitousContainerIsDocumentScopePublicNSUbiquitousContainerNameTaptileAppsNSUbiquitousContainerSupportedFolderLevelsOne
  • 那么,对你来说它正在工作@Duncan?您正在将文件从 iOS 应用程序保存到 iCloud Drive,并且能够在保存后不久在同一设备上的 iCloud Drive 应用程序中看到该文件?
  • 该应用程序将其保存到应用程序普遍存在的容器中,并显示为 iCloud Drive 上的一个文件夹,您可以从那里添加/删除文档 - 您可以通过下载免费版本的应用程序(iProjectFree)。

标签: ios objective-c icloud uti icloud-drive


【解决方案1】:

经过 Apple 开发者技术支持的澄清后,我现在能够解决问题。

我的应用程序声明了两个导出的 UTI(自己的备份文件),因此当这些 UTI 之外的其他文件保存到该文件夹​​中时,iCloud 容器将默认为未启用(或灰显)。 我们的应用能够创建 PDF 和 CSV,但这些文件类型未在 info.plist 中声明为“文档类型”,因为我们的应用无法显示它们。

将 PDF 和 CSV 文档类型添加到 info.plist 时,iCloud 容器会立即在 iCloud Drive 应用中可见。

以下是 info.plist 的摘录,供您参考:

...
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>Adobe PDF</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternative</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.adobe.pdf</string>
        </array>
    </dict>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array/>
        <key>CFBundleTypeName</key>
        <string>CSV</string>
        <key>CFBundleTypeRole</key>
        <string>Viewer</string>
        <key>LSHandlerRank</key>
        <string>Alternative</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.comma-separated-values-text</string>
        </array>
    </dict>
</array>
...

【讨论】:

  • 这看起来很烦人。我的应用确实在云容器中放置了几个 .txt 文件。这些是我想跨设备共享的配置文件。它确实意味着我想说我的应用程序通常可以打开 .txt 文件。我想一个可能的解决方案是为这些发明自己的扩展并将其添加到我导出的 UTI 中。无论如何,感谢您提供的信息。
  • @btschumy 我的导出文件确实有自己的扩展名,我将它们添加到导出的 UTI 中(尽管我也有错误),但据我所知,我还必须添加 documentTypes,即使我的应用程序无法打开导出的 PDF。是的,这很烦人......更好的是错误,因为现在我们的应用程序显示在能够打开 PDF 的应用程序列表中。我将不得不更新 Apple Bug,但是 atm 我太忙了。也许苹果改变了他们的实施。无论如何 .. 先尝试不使用 DocumentTypes,但您现在知道接下来该尝试什么了,如果它不起作用。
  • 感谢这里的提示。我按照你的做法,但找到了一个稍微不同的解决方案。我无处不在的容器中只有一种文档类型——我自己的文档类型。所以我没有添加 CSV 或 PDF——因为我的应用程序没有对它们做任何事情。我确实发现我需要 CFBundleDocumentTypes 数组(我的文档类型有一个条目),还有 NSUbiquitousContainers 字典和 UTExportedTypeDeclarations 数组。在我的 iPad 上运行我的应用程序后,我注意到我的文件夹在 iCloud Drive 应用程序中仍然被禁用。我重新启动了 iCloud Drive 应用程序并启用了我的文件夹
  • @derekknight 我处于类似情况,并且已经完成了您拥有的一切,但它仍然被禁用。该应用程序不必获得批准并在商店中,对吗?
  • 没关系。我需要将 public.datapublic.content 添加到 UTTypeConformsTo.
【解决方案2】:

Why my app is not shown in iCloud Drive Folder 的帖子似乎表明您的应用需要在公共 iCloud 文件夹完全正常工作之前获得批准和发布。

【讨论】:

  • 不是这样,我有一些应用在 beta 测试中,并且它们的容器是可见的。
  • 谢谢@DuncanGroenewald - 你说的很对。我刚试过这个。预先存在的旧式容器 ID - 将 NSUbiquitousContainerIsDocumentScopePublic 从 false 更改为 true,并且容器出现在 iCloud Drive 应用程序中,并且文件可以访问。在 iOS 和 OS X 之间同步 NSUbiquitousContainerName 和 NSUbiquitousContainerIsDocumentScopePublic 似乎相当快。每次都会碰到 CFBundleVersion。
  • @Michael 感谢您的提示,我已经看到了这个问题,并且还发布了第一个具有 iCloud Drive Export 功能的版本。但它似乎与此无关。看来我将不得不向 Apple 提出技术请求,看看它是否是 Apple 服务器上的 iCloud 的其他某种“魔法”。
猜你喜欢
  • 2016-12-22
  • 2020-01-01
  • 2016-09-29
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2016-02-01
相关资源
最近更新 更多