Almanac, a weather app set like a printed page: a complete Xcode project with an hour-by-hour forecast, a dot-matrix radar, saved places, alerts, widgets and three brand presets.
A weather app on four tabs. First run asks for location, units and places to follow before a StoreKit 2 paywall for minute-by-minute radar. Today scrubs the next 24 hours on a ruled tape over a ten-day table; Radar plays the next two hours as a dot matrix; Places lists saved cities; Settings holds units, alerts and the subscription.
$199 once, every piece included. See how installing works · Sign in
The screens this template wires together, in the order someone meets them.
First run
Location, units, places to follow and severe weather alerts, then the StoreKit 2 paywall. Runs once, then records completion.
Tabs
Today, Radar, Places and Settings. Today is the Forecast tape; Radar is the dot matrix.
SwiftUI source you own, built on Apple frameworks only.
How it behaves, what it handles, and the decisions behind it.
WeatherApp is one root view. On first launch it asks where to report on: your location, or a designed "not now" path that picks a city from a ruled list. Then it sets your units and hands off to the Purchase screen's StoreKit 2 paywall. Closing, purchasing or restoring finishes first run and records it under a completion key, so the root switches to the app on its own.
The app sits under a floating ruled bar with four destinations. Today is the Forecast screen under a newspaper masthead: the hour under the indicator as a giant tabular figure, the next 24 hours on a tape of hairline ticks you scrub while the sun or moon travels its arc, and a ten-day table of range bars on one shared scale. Radar is the Radar screen's dot matrix playing the next two hours over a drawn coast. Places lists followed cities as ruled rows, with reorder, swipe to unfollow and each city's forecast page. Settings holds units, warnings, the subscription and "Start over" back to first run.
AlmanacSample draws believable sample weather from a few numbers per city. Conform a type to ForecastRepository (WeatherKit, or your provider's API) and pass it as forecasts.DotRadarSample.frames over its drawn coast. Map your provider's radar to [RadarFrame] grids and your coast to land polygons.productIDs. Until they exist, the paywall shows its designed "plans didn't load" state and its close button still finishes first run.NSLocationWhenInUseUsageDescription to Info.plist, then reverse-geocode the fix in WeatherFirstRun.useLocation.WeatherApp. Without a brand it wears Almanac Press; SPBrandTheme(.almanacSol) or .almanacNeon re-skin every page, and softer brands lift the ruled cells onto cards.The download is a complete project on Tuist: sample weather for thirty cities behind a ForecastRepository protocol, with hours eased from three-hourly readings, sunrise and sunset from latitude, UV, wind and warnings; SwiftData places in an App Group with search, reorder and unfollow; a full first run with units, places to follow and severe weather warnings; Almanac Plus with radar every five minutes and a fifteen-day outlook; a warnings ticker and a morning briefing; Conditions and Hourly widgets; three presets; unit tests and a first-run UI test.
@main: put WeatherApp() in your own WindowGroup.Pieces that work well next to this one.