如何在iPhone的“文件”应用程序中显示我的应用程序文档

16

我正在尝试在我的iPhone上的文件应用程序中展示我的数据。我进行了大量搜索,并且一切都做得正确,但我不知道错误出在哪里。

func fileManger(nameFolder: String) {

    let manager = FileManager.default
    let DecomentFolder = manager.urls(for: .documentDirectory, in: .userDomainMask).last
    let Folder = DecomentFolder?.appendingPathComponent("\(nameFolder)")

    do {
        try manager.createDirectory(at: Folder!, withIntermediateDirectories: true, attributes: [:])
    } catch let error {
        print(error.localizedDescription)
    }
}

在这里,我将值发送到一个文件夹

@objc func alertNewFolder () {
    let alert = UIAlertController(title: "Create an album", message: "", preferredStyle: .alert)
    alert.addTextField(configurationHandler: nil)
    alert.textFields![0].placeholder = "name album"
    alert.textFields![0].textAlignment = .right
    alert.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil))
    alert.addAction(UIAlertAction(title: "save", style: .default, handler: { ـ in
        if let textFileds = alert.textFields {
            let links = textFileds[0].text
            self.arrS1.append(addCatogrey(nameCatog: links!, imageSection: UIImage(named: "folder")))
// Here Send FileManager
            helperCoding().fileManger(nameFolder: links!)
            self.collection.reloadData()
        }
    }))
    self.present(alert, animated: true, completion: nil)
}

在模拟器中,它保存在“文档”文件夹中,这里是正确的。
/Users/badrshammry/Library/Developer/CoreSimulator/Devices/7986A27F-7026-45E1-9073-78CCD6A9B90A/data/Containers/Data/Application/3173C4DC-BCDE-41B9-89E1-6E8D9B52EF25/Documents

你为什么认为将它保存在你的库文件夹中会显示在文件应用程序中? - Leo Dabus
我不知道,这是我从研究中猜测的。 - Badrshammry
你的问题是什么? - Leo Dabus
我只想在文件应用程序中显示文件。 - Badrshammry
3个回答

28

如果您想在苹果的“文件”应用程序中公开显示您的应用程序文档文件,您需要在信息属性列表文件中包括“Supports Document Browser”关键字,并将其设置为YES:

输入图像说明


1
如果您不想向用户公开某些文件,应将它们写入应用程序支持目录。请查看文件系统基础知识文档。 - Leo Dabus
1
使用此目录存储所有应用程序数据文件,除了与用户文档相关的文件。例如,您可以使用此目录存储应用程序创建的数据文件、配置文件、模板或其他由应用程序管理的固定或可修改资源。应用程序可能会使用此目录来存储最初包含在应用程序包中的资源的可修改副本。游戏可能会使用此目录来存储用户购买并从服务器下载的新级别。 - Leo Dabus
1
所有内容都应该放在一个自定义子目录中,其名称为您的应用程序的包标识符或公司名称。在iOS中,此目录的内容由iTunes和iCloud备份。 - Leo Dabus
1
非常感谢。 - pir800
1
谢谢,我不知道为什么我需要花这么长时间来寻找这个简单的答案! - Simon Henn
显示剩余2条评论

9

将这两个键添加到 'info.plist' -

...
<key>UIFileSharingEnabled</key>
<true/>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
...

接下来,保存在'.documentDirectory'中的文件将会出现在“文件应用”中,该应用内有一个以您的应用名称命名的文件夹。

如果要在Xcode中编辑'info.plist',请添加以下键值 -

Application supports iTunes file sharing = YES
Supports opening documents in place = YES

info.plist


0

要设置 支持文档浏览器(Supports Document Browser),必须在 自定义iOS目标属性(Custom iOS Target Properties) 中的 信息(info) 选项卡中进行设置

Xcode13 不再使用 info.plist

无论如何,它都不起作用。应用程序将无法在您的应用程序包中找到文件。它们需要被“共享”(在 SwiftUI 中使用 UIViewControllerRepresentable

但是您的应用程序将没有一个目录在文件结构中对 Files 应用程序可见。添加该文件夹仍然是一个谜

参见: 如何通过应用程序创建可由文件应用程序看到的文件夹


你的答案可以通过添加更多支持信息来改进。请[编辑]以添加进一步细节,例如引用或文献,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关撰写良好答案的更多信息。 - Community
这实际上是正确的答案!在“自定义iOS目标属性”中设置“支持文档浏览器=YES”确实可以为目标工作。直接在info.plist中进行操作不起作用,对我来说根本不起作用。正如@Wrog指出的那样,在Xcode 13之后可能已经发生了变化。 - KeithTheBiped
@KeithTheBiped 如果你的文件夹是空的,它就不会显示在那里。请注意,捆绑文件夹无法共享。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接