weatherkit

dpearson2699/swift-ios-skills · updated Apr 8, 2026

$npx skills add https://github.com/dpearson2699/swift-ios-skills --skill weatherkit
0 commentsdiscussion
summary

Fetch current conditions, hourly and daily forecasts, weather alerts, and

  • historical statistics using WeatherService. Display required Apple Weather
  • attribution. Targets Swift 6.3 / iOS 26+.
skill.md

WeatherKit

Fetch current conditions, hourly and daily forecasts, weather alerts, and historical statistics using WeatherService. Display required Apple Weather attribution. Targets Swift 6.3 / iOS 26+.

Contents

Setup

Project Configuration

  1. Enable the WeatherKit capability in Xcode (adds the entitlement)
  2. Enable WeatherKit for your App ID in the Apple Developer portal
  3. Add NSLocationWhenInUseUsageDescription to Info.plist if using device location
  4. WeatherKit requires an active Apple Developer Program membership

Import

import WeatherKit
import CoreLocation

Creating the Service

Use the shared singleton or create an instance. The service is Sendable and thread-safe.

let weatherService = WeatherService.shared
// or
let weatherService = WeatherService()

Fetching Current Weather

Fetch current conditions for a location. Returns a Weather object with all available datasets.

func fetchCurrentWeather(for location: CLLocation) async throws -> CurrentWeather {
    let weather = try await weatherService.weather(for: location)
    return weather.currentWeather
}

// Using the result
func displayCurrent(_ current: CurrentWeather) {
    let temp = current.temperature  // Measurement<UnitTemperature>
    let condition = current.condition  // WeatherCondition enum
    let symbol = current.symbolName  // SF Symbol name
    let humidity = current.humidity  // Double (0-1)
    let wind = current.wind  // Wind (speed, direction, gust)
    let uvIndex = current.uvIndex  // UVIndex

    print("\(condition): \(temp.formatted())")
}

Forecasts

Hourly Forecast

Returns 25 contiguous hours starting from the current hour by default.

func fetchHourlyForecast(for location: CLLocation) async throws -> Forecast<HourWeather> {
    let weather = try await weatherService.weather(for: location)
    return weather.hourlyForecast
}

// Iterate hours
for hour in hourlyForecast {
    print("\(hour.date): \(hour.temperature.formatted()), \(hour.condition)")
}

Daily Forecast

Returns 10 contiguous days starting from the current day by default.

func fetchDailyForecast(for location: CLLocation) async throws -> Forecast<DayWeather> {
    let weather = try await weatherService.weather(for: location)
    return weather.dailyForecast
}

// Iterate days
for day in dailyForecast {
    print("\(day.date): \(day.lowTemperature.formatted()) - \(day.highTemperature.formatted())")
    print("  Condition: \(day.condition), Precipitation: \(day.precipitationChance)")
}

Custom Date Range

Request forecasts for specific date ranges using WeatherQuery.

func fetchExtendedForecast(for location: CLLocation) async throws -> Forecast<DayWeather> {
    let startDate = Date.now
    let endDate = Calendar.current.date(byAdding: .day, value: 10, to: startDate)!

    let forecast = try await weatherService.weather(
        for: location,
        including: .daily(startDate: startDate, endDate: endDate)
    )
    return forecast
}

Weather Alerts

Fetch active weather alerts for a location. Alerts include severity, summary, and affected regions.

func fetchAlerts(for location: CLLocation) async throws -> [WeatherAlert]? {
    let weather = try await weatherService.weather(for: location)
    return weather.weatherAlerts
}

// Process alerts
if let alerts = weatherAlerts {
    for alert in alerts {
        print("Alert: \(alert.summary)")
        print("Severity: \(alert.severity)")
        print("Region: \(alert.region)")
        if let detailsURL = alert.detailsURL {
            // Link to full alert details
        }
    }
}

Selective Queries

Fetch only the datasets you need to minimize API usage and response size. Each WeatherQuery type maps to one dataset.

Single Dataset

let current = try await weatherService.weather(
    for: location,
    including: .current
)
// current is CurrentWeather

Multiple Datasets

let (current, hourly, daily) = try await weatherService.weather(
    for: location,
    including: .current, .hourly, .daily
)
// current: CurrentWeather, hourly: Forecast<HourWeather>, daily: Forecast<DayWeather>

Minute Forecast

Available in limited regions. Returns precipitation forecasts at minute granularity for the ne

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.659 reviews
  • Jin Jackson· Dec 24, 2024

    weatherkit reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Ren Johnson· Dec 24, 2024

    Useful defaults in weatherkit — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.

  • Diego Abbas· Dec 24, 2024

    Solid pick for teams standardizing on skills: weatherkit is focused, and the summary matches what you get after install.

  • Jin Harris· Dec 12, 2024

    We added weatherkit from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Aditi Ramirez· Nov 15, 2024

    We added weatherkit from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Ren Dixit· Nov 15, 2024

    I recommend weatherkit for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.

  • Aanya Haddad· Nov 15, 2024

    Registry listing for weatherkit matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Sakshi Patil· Nov 7, 2024

    weatherkit fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Meera Khan· Nov 3, 2024

    weatherkit reduced setup friction for our internal harness; good balance of opinion and flexibility.

  • Chaitanya Patil· Oct 26, 2024

    weatherkit has been reliable in day-to-day use. Documentation quality is above average for community skills.

showing 1-10 of 59

1 / 6