【问题标题】:MacOS: How/where do I store a programmatically created file within my app folder?MacOS:如何/在我的应用程序文件夹中存储以编程方式创建的文件?
【发布时间】:2020-06-05 02:59:41
【问题描述】:

对 MacOS 开发非常陌生(如全新)。我开发了一个 MacOS 应用程序(SwiftUI / Swift),现在正在搞清楚与部署相关的事情。

我的应用程序生成一个文本文件,但我想将其保存在应用程序的文件夹(或其他任何名称)中 - 保存在用户指定的文件夹中,并在我阅读时阅读想。我可以从Assets.xcassets 读取资源,但我也希望能够在不让用户选择位置的情况下进行保存。

有没有办法可以从 app 文件夹中写入/读取(我很难解释,因为我对这个系统非常不熟悉)?

【问题讨论】:

  • 一般来说,您不应尝试在运行时将内容存储到应用程序包中,而应使用操作系统提供的适当“支持”位置,例如FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
  • 您可以查看the docs了解更多详情
  • @MadProgrammer 请注意,您不应将文件直接保存到此文件夹。您应该创建一个子文件夹并将文件存储在其中。 此目录中的所有内容都应放置在自定义子目录中,其名称为您的应用程序包标识符或您的公司的名称 developer.apple.com/library/archive/documentation/…
  • @LeoDabus 是的,我以它为起点——但感谢您的澄清

标签: swift macos installation macos-catalina


【解决方案1】:

是的,您可以在您的应用程序支持文件夹中创建一个目录,使用应用程序的捆绑标识符或您的公司为其命名,并将用户无法访问的所有文件存储在那里:

使用此目录来存储所有应用程序数据文件,但关联的文件除外 与用户的文件。例如,您可能会使用此目录 存储应用程序创建的数据文件、配置文件、模板或 由应用程序管理的其他固定或可修改资源。 安 应用程序可能会使用此目录来存储可修改的资源副本 最初包含在应用程序包中。游戏可能会使用这个 存储用户购买和下载的新关卡的目录 从服务器。此目录中的所有内容都应放在一个 自定义子目录,其名称是您的应用程序包标识符的名称 或您的公司。

您应该花点时间阅读文件系统基础知识documentation

do {
    let applicationSupport = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
    let bundleID = Bundle.main.bundleIdentifier ?? "company name"
    let appSupportSubDirectory = applicationSupport.appendingPathComponent(bundleID,isDirectory: true)
    try FileManager.default.createDirectory(at: appSupportSubDirectory, withIntermediateDirectories: true, attributes: nil)
    print(appSupportSubDirectory.path) // /Users/.../Library/Application Support/YourBundleIdentifier
} catch {
    print(error)
}

【讨论】:

  • 谢谢。我试图拼凑这一切有点迷茫,但这些指针在理解方面有很长的路要走。我确实找到了一些文档,但是当它说archive 时,我认为这是一些不相关的过时旧东西。我明天会试试这个,然后回来标记答案。
  • 能否在我的 Xcode 项目文件夹中预先创建此目录,以便在用户安装 .dmg 时它已经存在?还是我需要在首次启动时以编程方式创建它?我想先准备好一些文件。
  • 没有。您可以检查它是否存在,以及它是否不会在那里创建和复制您的文件。
猜你喜欢
  • 2020-02-21
  • 2012-09-25
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
相关资源
最近更新 更多