Skip to content

WeatherKit

WeatherKit gives your app current conditions, minute/hourly/daily forecasts, severe-weather alerts, and historical averages from the Apple Weather service. The Swift API is a one-liner, but two things sink apps that skip them: mandatory attribution (App Review rejects without it) and the 500,000-call/month quota.

Part of the axiom-integration suite (skills/weatherkit.md).

When to Use

Use this skill when you're:

  • Showing current conditions or forecasts (hourly, daily, minute precipitation)
  • Surfacing severe-weather alerts or historical climate averages
  • Deciding between the Swift API and the REST API (web / other platforms)
  • Managing the 500K/month quota or planning paid tiers
  • Getting attribution right before App Review

Example Prompts

  • "How do I show the weather forecast with WeatherKit?"
  • "Why was my weather app rejected by App Review?"
  • "How much does WeatherKit cost / what's the quota?"
  • "How do I fetch only the daily forecast to save quota?"
  • "How do I set up the WeatherKit REST API?"

Key Concepts

Two query shapes, very different cost

weather(for:) fetches all datasets; weather(for:including:) fetches only the ones you name (returning a typed tuple). Use the focused form and cache results — every full fetch counts against your quota.

Attribution is mandatory

Any screen showing WeatherKit data must show the Apple Weather mark and link to legalPageURL. Fetch WeatherService.shared.attribution once and cache it; use legalAttributionText as the fallback where you can't render a logo. Skipping this is the most common WeatherKit rejection.

Pricing and quota

500,000 calls/month are included with Apple Developer Program membership. Paid tiers run from 1M ($49.99) to 200M ($9,999.99) per month. Upgrades reset the counter to 0; unused calls don't roll over.

Setup

Enable the WeatherKit capability on your App ID (Swift), or create a Service ID + .p8 key and sign a JWT (REST). WeatherKit needs a CLLocation — acquire one via Core Location first.

Regional availability

Minute precipitation and alerts are region-limited. Query .availability and treat those datasets as optional.

Common Mistakes

MistakeCostFix
No attributionApp Review rejectionShow the mark + link to legalPageURL
weather(for:) every refreshQuota burnUse including:, cache, honor expirationDate
Capability/Service not configured401 auth errorsEnable WeatherKit; verify REST keys
Assuming alerts exist everywhereCrashes / empty UICheck WeatherAvailability
Querying with no locationNo dataAcquire a CLLocation first
  • For acquiring a CLLocation, see the axiom-location suite
  • For REST JWT signing, see the axiom-networking suite
  • Attribution is also an App Review gate — see the axiom-shipping suite

Resources

WWDC: 2022-10003

Docs: /weatherkit, /weatherkit/weatherservice, /weatherkit/weather, /weatherkit/weatherattribution, /weatherkit/weatherquery, /weatherkit/weatheravailability

Released under the MIT License