【问题标题】:Give access to app's Documents folder to another app in iOS 11将应用程序的 Documents 文件夹的访问权限授予 iOS 11 中的另一个应用程序
【发布时间】:2018-09-23 01:00:00
【问题描述】:

我们使用 React Native 开发了一个应用程序,它可以下载并在内部查看文档,但要查看 PowerPoint 文件,它会将文件保存到其文档目录并使用外部应用程序查看文件(打开系统对话框以选择哪个应用程序)。

它在 iOS 10 中运行良好,但在 iOS 11 中它突然停止运行。我收到“没有这样的文件或目录”错误。我猜这是因为安全权限。我尝试在应用程序的 Info.plist 中添加 UISupportsDocumentBrowser 键、UIFileSharingEnabled 和 LSSupportsOpeningDocumentsInPlace 键,并将它们设置为 true 为 recommended by Apple 以访问我的应用程序的文档目录,但这并没有解决问题。我认为这些密钥可能仅适用于访问应用程序文档的用户,而不是其他应用程序。

我们使用react-native-document-controller 传递文件,但是当它将文档路径传递给另一个应用程序以打开时,我们从控制器代码中收到The file couldn’t be opened because there is no such file 错误。该文件在设备上,因为如果应用程序在内部或在对话框中呈现文件,我选择将其保存到我的文件夹而不是查看它,那工作正常。但是,我们尝试打开文件的所有应用程序都不能这样做。

我还需要做什么才能使外部应用程序能够访问我的应用程序的文档目录并打开文件吗?我不应该将文件保存到我的应用程序的文档目录吗?

较长的错误信息如下(编辑删除路径中的应用ID和文件的实际名称):

无法获取文件大小 文件:/var/mobile/Containers/Data/Application/.../Documents/filename.pptx -- file:///: Error Domain=NSCocoaErrorDomain Code=260 "文件“filename.pptx”无法打开,因为没有这样的文件 文件。” UserInfo={NSURL=file:/var/mobile/Containers/Data/Application/.../Documents/filename.pptx -- file:///, NSFilePath=/file:/var/mobile/Containers/Data/Application/.../Documents/filename.pptx, NSUnderlyingError=0x1c08429d0 {错误域=NSPOSIXErrorDomain 代码=2 "没有这样的文件或目录"}}

【问题讨论】:

    标签: ios react-native ios11


    【解决方案1】:

    UISupportsDocumentBrowser -> 您应用的文档可以显示在其他应用的文件应用/文档浏览器中。

    LSSupportsOpeningDocumentsInPlace -> 您知道如何使用文件协调和安全范围的 URL 就地打开文档,而无需先将它们复制到您的容器中。

    UIFileSharingEnabled -> 您的文档会显示在 iTunes 中。

    UIFileSharingEnabledLSSupportsOpeningDocumentsInPlace 的组合用作一种启发式方法,以确定容器中的 Documents 文件夹是否足够“干净”,使其可以在“文件”应用程序或其他应用程序的 UIDocumentBrowserVC 中显示,对于较旧的应用程序未指定UISupportsDocumentBrowser的应用

    这些都不会改变您的沙盒的工作方式。

    要在其他应用中打开文档,您必须使用UIDocumentInteractionController。这将让用户选择要使用的应用程序。您之前使用哪个 API 打开文件?

    【讨论】:

    • 我目前正在使用 react-native-document-controller 来传递文件,该文件使用 UIDocumentInteractionController。问题是当该代码执行时,它找不到要传递给另一个应用程序的文件。
    • 如何初始化 DIC?您的文档是否存储在容器内的 Documents 文件夹中?您正在使用一个将文件复制到其他应用程序收件箱的按钮,对吗?还是以某种方式尝试就地打开?它在哪个阶段失败?有任何错误信息吗?
    • 我们通过它上面的 react-native-document-controller 组件访问 DIC。我们显示文档的类有一个对它的引用,并将要打开的文档的路径传递给它,该路径存储在我们应用程序的文档文件夹中。此时,文档控制器无法归档文件并出现错误。我将在原始问题中添加有关错误消息的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2020-10-28
    • 2011-06-19
    • 2017-07-17
    相关资源
    最近更新 更多