【问题标题】:Sharing files in FileManager or App target to a WidgetExtension target将应用程序目标文件管理器中的文件共享到小部件扩展目标
【发布时间】:2021-05-05 14:55:29
【问题描述】:

我有一个 json 文件存储在我的应用程序的 FileManager 中,我想为我的小部件访问和解码它。我对文件使用以下网址:

let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        
let jsonURL = documentDirectory
    .appendingPathComponent(filename)
    .appendingPathExtension("json")

其中文件名是“列表”。

但是我不认为目标可以访问我应用的 FileManager 中的文件,因为我收到错误 Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=260 "The file “list.json” couldn’t be opened because there is no such file."

我的previous question可能会提供一些额外的详细信息

【问题讨论】:

    标签: json swift swiftui widgetkit


    【解决方案1】:

    如果您想在小部件和应用之间共享文件,而不是使用典型的.documentDirectory,您可以改用“应用组”。

    您需要添加“应用程序组”权利 (https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups),然后您才能访问共享容器 url (https://developer.apple.com/documentation/foundation/filemanager/1412643-containerurl)

    然后您的容器 URL 将可以通过执行类似 FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "APP_GROUP_ID_HERE") 的操作来访问,这将返回 URL?

    您可以将组件附加到 URL,就像您在原始代码中所做的那样。

    补充阅读:https://useyourloaf.com/blog/sharing-data-with-a-widget/

    【讨论】:

    • 要明确一点,因为我的应用程序已经发布了几个月,我还需要将应用程序文件传输到这个新路径,以便应用程序和小部件保持同步。因为我必须添加一些代码才能将文件从 documentDirectory 移动到共享容器?
    • 是的,很遗憾,你会
    • 如果这回答了您的问题,您可以用绿色复选标记将其标记为已接受。
    猜你喜欢
    • 2010-11-15
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多