您应该将您的条目设置为使用Result
,这样您就可以直观地看到正在发生的任何错误。
struct SimpleEntry: TimelineEntry {
let date: Date
let configuration: ConfigurationIntent
let result: Result<any CurrentWeatherProtocol, Error>
}
然后在视图中您可以显示错误或天气视图。
struct PWCWidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
Text(entry.date, style: .time)
switch entry.result{
case .success(let weather):
Image(systemName: weather.symbolName)
case .failure(let error):
Text(error.localizedDescription)
let nserror = error as NSError
Text(nserror.userInfo.description)
Text("\(error)")
}
}
}
我的整个代码库是一个更复杂的项目的一部分,但这就是getTimeline
好像。
func getTimeline(for configuration: ConfigurationIntent, in context: Context, completion: @escaping (Timeline<Entry>) -> ()) {
Task{
let now = Date.now
let inHr = Calendar.current.date(byAdding: .hour, value: 1, to: now)!
do{
let location = try await locSvc.requestSingleLocation()
let wSvc = try await CDWeatherService().currentWeather(for: WeatherEntry(location: .init(location: location)))
//Return a successful result
let entry = SimpleEntry(date: now, configuration: configuration, result: .success(wSvc))
let timeline = Timeline(entries: [entry], policy: .after(inHr))
completion(timeline)
}catch{
//Return a failure result
let entry = SimpleEntry(date: now, configuration: configuration, result: .failure(error))
let timeline = Timeline(entries: [entry], policy: .after(inHr))
completion(timeline)
}
}
}
我发现 macOS 和 iOS Widget 扩展是我的问题,你必须确保选择正确的一个。
另外,请确保您已将“WeatherKit”添加到小部件扩展的“签名和功能”中。
WeatherDaemon.WDSJWTAuthenticatorServiceListener.Errors 错误 2。
与 AppStore Connect 中的“应用程序服务”中未包含 Weather Kit 有关,它必须包含在
App Store Connect - 小部件标识符 - 功能
App Store Connect - 小部件标识符 - AppServices
Xcode 中应用程序和/或小部件的签名和功能