小部件未更新

Widget is not updating

我有一个应用程序和一个小部件,我想在每天午夜后更新。该应用程序正在更新,但小部件未更新。尝试了时间轴的不同方法,但它不起作用。在模拟器中它工作正常,但当我 运行 我的 phone 上的应用程序时(通过 TestFlight)。你们谁能帮帮我!

小部件代码下方:

...

import WidgetKit
import SwiftUI

struct Provider: TimelineProvider {

func placeholder(in context: Context) -> SimpleEntry {
    SimpleEntry(date: Date())
}

func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) {
    let entry = SimpleEntry(date: Date())
    completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) ->    Void) {
     let currentDate = Date()
     let entries = [
         SimpleEntry(date: currentDate)
         ]
     let timeline = Timeline(entries: entries, policy: .atEnd)
     completion(timeline)
    }
}

struct SimpleEntry: TimelineEntry {
let date: Date
}

struct AhackadayWidgetEntryView : View {
var entry: Provider.Entry

var body: some View {
    VStack {
        Spacer()
        Text("Your Hack of the Day")
            .font(.footnote)
        Divider()
          .padding(.horizontal)
          .foregroundColor(Color.gray)
        
        Spacer()
        Text(mijnPlaatje.mijnKop())
            .font(.headline)
            .multilineTextAlignment(.center)
            .padding(.horizontal)
        
        Image(mijnPlaatje.WidgetPicture())
            .resizable()
            .aspectRatio(contentMode: .fit)
            .clipShape(RoundedRectangle(cornerRadius: 15))
            .padding(.horizontal)
        Spacer()
    }
    .widgetURL(URL(string: "myapp://link"))
}
}

@main
struct AhackadayWidget: Widget {
let kind: String = "AhackadayWidget"

var body: some WidgetConfiguration {
    StaticConfiguration(kind: kind, provider: Provider()) { entry in
        AhackadayWidgetEntryView(entry: entry)
    }
    .configurationDisplayName("My Widget")
    .description("This is an example widget.")
}
}

struct AhackadayWidget_Previews: PreviewProvider {
static var previews: some View {
    AhackadayWidgetEntryView(entry: SimpleEntry(date: Date()))
        .previewContext(WidgetPreviewContext(family: .systemSmall))
}
}

...

应用程序本身的代码,用于调用下方时间线的更新。

该应用程序本身每晚都会进行更新。所以 TimeChangeNotification 正在正常工作。但是,小部件没有更新。

       .onReceive(NotificationCenter.default.publisher(
                    for: UIApplication.significantTimeChangeNotification)) { _ in
                    ContentView.displayDate = Date()
                    curDate = myPict.myPicture()
                    WidgetCenter.shared.reloadAllTimelines()

let timeline = Timeline(entries: entries, policy: .atEnd)

您告诉 IOS 尽快重新加载您的小部件。即使没有新数据可用。由于 IOS 正在管理 Widget 更新的时间点,因此它会在开始时大约每 5 - 15 分钟开始更新一次。但随着时间的推移,它会开始花费更多。

TLDR:您很可能超出重新加载的预算。

尝试:

let timeline = Timeline(entries: entries, policy: .never)

有了这个,您的时间轴只会在您的应用需要重新加载时重新加载。

确保您的

WidgetCenter.shared.reloadAllTimelines()

接到电话。

参考: https://developer.apple.com/documentation/widgetkit/keeping-a-widget-up-to-date

编辑:

In the simulator it is working fine, but not when I run the app on my phone (via TestFlight).

在调试器中进行更新不计入预算。