Не удается найти исторические данные 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))
Другие вопросы по тегам