将文件管理器或 App 目标中的文件共享到 Widget Extension 目标

Sharing files in FileManager or App target to a WidgetExtension target

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

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

中的一些额外详细信息

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

您需要添加“应用组”授权 (https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups) and then you can access a shared container url (https://developer.apple.com/documentation/foundation/filemanager/1412643-containerurl)

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

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

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