Как читать файлы, созданные приложением с помощью iOS WidgetKit?

Я разрабатываю приложение с расширением widgetKit и хочу отображать в виджете данные, созданные пользователем. Как widgetKit может читать файлы, созданные приложением?


person Collin Zhang    schedule 09.09.2020    source источник
comment
Этот ответ может быть полезным: Поделиться данными между основным приложением и виджетом в SwiftUI для iOS 14   -  person pawello2222    schedule 22.09.2020


Ответы (2)


Вы должны использовать Возможность групп приложений для обмена данными между вашими целями.

Вот хороший руководство от RayWanderlich

person Daniel E. Salinas    schedule 09.09.2020

Чтобы читать файлы, созданные iOS widgetKit, вам необходимо создать файлы в общем контейнере.

let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "yourapp.contents")?.appendingPathComponent("hello")
let data = Data("test read".utf8)
try! data.write(to: url!)

И вы можете читать данные в классе Widget

@main
struct StuffManagerWidget: Widget {
    let kind: String = "TestWidget"

    var body: some WidgetConfiguration {
        IntentConfiguration(kind: kind, intent: TestIntent.self, provider: Provider()){ entry in
            WidgetEntryView(entry: entry, string: string)
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
    
    var string: String = {
        let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "yourapp.contents")?.appendingPathComponent("hello")
        let data = try! Data(contentsOf: url!)
        let string = String(data: data, encoding: .utf8)!
        return string
    }()
}
person Collin Zhang    schedule 09.09.2020
comment
ВНИМАНИЕ: когда вы запускаете приложение на реальном устройстве, вам необходимо настроить общий контейнер в TARGET - ›Capabilities -› App Group как для целевого приложения, так и для целевого виджета. - person Collin Zhang; 16.09.2020
comment
Я получаю сообщение об ошибке: дополнительный аргумент 'строка' в вызове при написании этого: (запись: запись, строка: строка) - person submariner; 16.10.2020
comment
Это здорово, но знаете ли вы, может ли виджет читать файлы, созданные приложением? Я храню данные в универсальном контейнере и не могу прочитать их из виджета. - person CristianMoisei; 20.10.2020
comment
Как я могу очистить данные? - person Vlad Bruno; 02.07.2021