Не удается найти исторические данные WeatherKit и проблемы с атрибуцией
Я хотел бы добавить некоторые исторические данные о погоде в приложение. Я могу использовать новый WeatherKit для получения текущей погоды, но не могу найти НИКАКОЙ информации, чтобы сказать мне, как получить доступ к историческим данным. В одном из видеороликов WWDC упоминалось о добавлении даты начала и окончания к вызову WeatherService, но я не могу найти никакой информации об этом.
Кроме того, я борюсь с требованиями атрибуции. Я могу заставить его работать, но только в легком режиме. Когда устройство находится в темном режиме, логотип Apple Weather представляет собой просто белое поле на темном фоне (я предполагаю, что логотип есть, но белый, но не могу это доказать).
Это упрощенная версия — получение только текущей погоды:
struct ContentView: View {
@Environment(\.colorScheme) var colorScheme
@State private var weather: Weather?
@State private var attLogo: URL?
@State private var attributionURL: URL?
@State private var logoImage: Image?
let weatherService = WeatherService.shared
var body: some View {
VStack {
if let weather {
VStack {
Text("San Francisco")
.font(.largeTitle)
Text("\(weather.currentWeather.temperature.formatted()) | \(weather.currentWeather.condition.description)")
}
}//if let
Spacer()
//white letters on white box if device in dark mode
AsyncImage(url: attLogo)
Group{
if let attributionURL {
Link("Weather Attribution", destination: attributionURL)
}
}//att group
}//outer v
.padding()
.task {
do {
let location = CLLocation(latitude: 37.77, longitude: -122.41)
self.weather = try await weatherService.weather(for: location)
} catch {
print(error)
}//do catch
}//task 1
.task {
do {
let attribution = try await weatherService.attribution
let attributionLink = attribution.legalPageURL
self.attributionURL = attributionLink
let attributionLogo = colorScheme == .light ? attribution.combinedMarkDarkURL : attribution.combinedMarkLightURL
self.attLogo = attributionLogo
} catch {
print("failed to load attribution")
}
}//task for logo and link
}//body
}//struct
Любое руководство будет оценено. Xcode 14.0 Beta, iOS 16.0 (20A5283p) в симуляторе
1 ответ
По состоянию на 10 июля оба логотипа недоступны по указанным ссылкам. я создалplaceholder
вAsyncImage
на данный момент я не знаю, пройдет ли он когда-нибудь проверку Apple, но кажется жизнеспособным для бета-версии / автономного решения.
if let arributionLogo = arributionLogo{
AsyncImage(url: arributionLogo) { image in
image.scaledToFit()
} placeholder: {
Label("Apple Weather", systemImage: "cloud.sun.fill")
}
}else{
ProgressView()
}
if let arributionLink = arributionLink{
Link("Other data sources", destination: arributionLink)
}else{
ProgressView()
}
Историческая погода теперь доступна с
let forecast = try await weatherService.weather(for: location, including:.hourly(startDate: startDate, endDate: endDate))
И
let forecast = try await weatherService.weather(for: location, including: .daily(startDate: startDate, endDate: endDate))