我们使用React Native开发了一个应用程序,用于下载和内部查看文档,但是要查看PowerPoint文件,它会将文件保存到其文档目录,并使用外部应用程序查看文件(打开系统对话框进行选择)哪个app)。
它在iOS 10中运行良好,但在iOS 11中突然停止工作。我得到了一个"没有这样的文件或目录"错误。我因为安全权限而猜测它。我尝试在应用程序的Info.plist中添加UISupportsDocumentBrowser键,UIFileSharingEnabled和LSSupportsOpeningDocumentsInPlace键,并将它们设置为true recommended by Apple,以访问我的应用程序的文档目录,但是没有&#39 ; t修复问题。我认为这些密钥可能仅供用户访问应用程序的文档,而不是其他应用程序。
我们正在使用react-native-document-controller来传递文件,但是当它将文档路径传递给另一个应用程序打开时,我们会从控制器代码中收到The file couldn’t be opened because there is no such file
错误。该文件位于设备上,因为如果应用程序在内部或在对话框中呈现文件,我选择将其保存到我的文件夹而不是查看它,这样可以正常工作。但是,我们尝试打开文件的所有应用都无法执行此操作。
我还需要做些什么才能让外部应用访问我的应用文档目录并打开文件吗?我不应该将文件保存到我的应用程序的文档目录吗?
较长的错误消息如下(已编辑以删除路径中的应用ID和文件的实际名称):
无法获取文件大小 文件:在/ var /移动/集装箱/数据/应用程序/.../文件/ filename.pptx - file:///:Error Domain = NSCocoaErrorDomain Code = 260"无法打开文件“filename.pptx”,因为没有这样的 。文件#&34; 的UserInfo = {NSURL =文件:在/ var /移动/容器/数据/应用/.../文档/ filename.pptx - file:///,NSFilePath = / file:/ var / mobile / Containers / Data / Application /.../ Documents / filename.pptx, NSUnderlyingError = 0x1c08429d0 {错误域= NSPOSIXErrorDomain代码= 2 "没有这样的文件或目录"}}
答案 0 :(得分:0)
UISupportsDocumentBrowser
- >您应用的文档可以显示在其他应用的文件应用/文档浏览器中。
LSSupportsOpeningDocumentsInPlace
- >您知道如何使用文件协调和安全范围的URL打开文档,而不是先将它们复制到容器中。
UIFileSharingEnabled
- >您的文档显示在iTunes中。
UIFileSharingEnabled
和LSSupportsOpeningDocumentsInPlace
的组合用作启发式方法,以确定容器中的Documents文件夹是否足够"清洁"对于未指定UISupportsDocumentBrowser
这些都不会改变沙箱的工作方式。
要在其他应用中打开文档,您必须使用UIDocumentInteractionController
。这将让用户选择要使用的应用程序。您之前使用哪个API来打开文件?