2015-10-14 33 views
5

我为我的iOS应用程序开发了一个iCloud Drive Export功能,它起作用。 我可以在Mac OS X 10.11的iCloud Drive文件夹的公共AppContainerFolder中看到导出的文档。为什么我的iCloud Drive AppFolder在MacOS上可见,但在iOS上的iCloud Drive App中禁用?

但是在iOS上,我只能看到iCloud Drive应用程序中的AppContainerFolder。它被禁用,我无法打开该文件夹,或看到里面的文件。

Image of the disable folder in the iOS iCloud Drive App

从iCloud中驱动器的设置,我可以看到我已经导出的文件中的iCloud云端硬盘AppContainerFolder。

Image of the AppContainerFolder inside the iCloud settings

有没有人有iCloud的驱动器这样的问题?

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

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

我已经尝试过只使用TeamIdentifier容器,但有在AppContainerFolder的知名度没有变化。

我试图碰到BundleVersion,我玩了Info.plist NSUbiquitousContainers设置。我还通过TestFlight将构建版提供给外部测试人员,以查看它是否与开发设备有关。

我唯一没做过的,就是用新的BundleVersion发布一个新版本到AppStore,看看它是否与开发中的应用程序和应用程序有关。

欢迎任何提示和提示。

+0

你有设置在应用程序的info.plist访问公共? (NSUbiquitousContainerIsDocumentScopePublic = YES) –

+0

NSUbiquitousContainers \t \t \t iCloud.au.com.ossh。AppName的 \t \t \t \t \t NSUbiquitousContainerIsDocumentScopePublic \t \t \t \t \t \t NSUbiquitousContainerSupportedFolderLevels \t \t \t \t \t \t

+1

您好邓肯,谢谢你的提示,但没错,我这样做: iCloud.com ... \t \t \t \t \t NSUbiquitousContainerIsDocumentScopePublic \t \t \t \t \t \t NSUbiquitousContainerName \t个\t \t TaptileApps \t \t \t NSUbiquitousContainerSupportedFolderLevels \t \t \t 一个 \t \t Bernd

回答

6

经过苹果开发者技术支持澄清后,我现在能够解决这个问题。

我的应用程序声明了两个导出的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> 
... 
+0

这似乎很烦人。我的应用程序确实在云容器中放置了几个.txt文件。这些是我想要跨设备共享的配置文件。它不*意味着我想说我的应用程序可以在一般情况下打开.txt文件。我想一个可能的解决方案是发明我自己的扩展,并将其添加到我导出的UTI。无论如何,谢谢你的信息。 – btschumy

+0

@btschumy我的导出文件有自己的扩展名,我将它们添加到导出的UTI中(尽管我也有错误),但据我了解,我也必须添加documentTypes,即使我的应用程序不能打开导出的PDF。是的,这很烦人...更好的错误,因为现在我们的应用程序显示在能够打开PDF的应用程序列表中。我将不得不更新Apple Bug,但是atm我太忙了。也许苹果改变了他们的实施。无论如何..首先尝试它没有DocumentTypes,但你现在知道下一步该怎么做,如果它不工作。 – Bernd

+0

感谢您的提示。我遵循你所做的,但发现了一个稍微不同的解决方案。我的无处不在的容器中只有一种文档类型 - 我自己的文档类型。所以我没有添加CSV或PDF - 因为我的应用程序没有对他们做任何事情。我发现我需要有CFBundleDocumentTypes数组(我的文档类型有一个条目),还有NSUbiquitousContainers字典和UTExportedTypeDeclarations数组。 在我的iPad上运行我的应用程序后,我发现我的文件夹在iCloud Drive应用程序中仍然被禁用。我重新启动了iCloud Drive应用程序,并启用了我的文件夹 –

0

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

+0

并非如此,我有测试版应用程序,它们的容器可见。 –

+0

谢谢@DuncanGroenewald - 你说得很对。我只是试过这个。预先存在的旧式容器标识 - 将NSUbiquitousContainerIsDocumentScopePublic从false更改为true,并且该容器显示在iCloud Drive应用程序中,并且可以访问这些文件。在iOS和OS X之间同步NSUbiquitousContainerName和NSUbiquitousContainerIsDocumentScopePublic似乎相当快。每次碰撞CFBundleVersion。 –

+0

@Michael感谢您的提示,我已经看到了这个问题,并且还发布了iCloud Drive Export功能的第一个版本。但似乎它没有对此做任何事情。看起来,我将不得不向Apple发布技术请求,看看它是否与Apple的服务器上的iCloud具有某种“魔力”。 – Bernd

相关问题