Getting Started

August 6, 2024 ยท View on GitHub

Deprecated, consider using Jupiter instead.

CZWeatherKit is a simple, extensible weather library for iOS, tvOS, and OS X that allows for easy fetching of weather data from various weather services.

What's New in v2.2.7

Features
  • tvOS Support*.
  • Caching Support.
  • Support for historical and hourly data.
  • Request batching when using a weather service.
  • Improved request management when sending frequent requests.
  • Addition of more data, including humidity, wind speed, and more.

*Note: Features requiring MapKit are unsupported with tvOS.

Getting Started

CocoaPods

Add the following to your Podfile:

    pod "CZWeatherKit"

Usage

Included in this project is a Swift playground, CZWeatherKit.playground, that will let you play around with CZOpenWeatherMapRequest. However if you're as lazy as I am, here are some code snippets to get you started:

Wunderground

Getting Current Conditions, Obj-C
#import <CZWeatherKit/CZWeatherKit.h>

CZWundergroundRequest *request = [CZWundergroundRequest newConditionsRequest];
request.location = [CZWeatherLocation locationFromCity:@"Seattle" state:@"WA"];
request.key = @"wundergroundApiKey";
[request sendWithCompletion:^(CZWeatherData *data, NSError *error) {
	CZWeatherCurrentCondition *condition = data.current;
	// dreams come true here
}];
Getting Forecast Conditions, Swift
import CZWeatherKit

let request = CZWundergroundRequest.newForecastRequest()
request.location = CZWeatherLocation(fromCity: "Seattle", state: "WA")
request.key = "wundergroundApiKey"
request.sendWithCompletion { (data, error) -> Void in
    if let weather = data {
  		for forecast in weather.dailyForecasts {
  			// dreams come true here
  		}
    }
}

OpenWeatherMap

Getting Current Conditions, Obj-C
#import <CZWeatherKit/CZWeatherKit.h>

CZOpenWeatherMap *request = [CZOpenWeatherMapRequest newCurrentRequest];
request.location = [CZWeatherLocation locationFromCity:@"Seattle" state:@"WA"];
[request sendWithCompletion:^(CZWeatherData *data, NSError *error) {
	CZWeatherCurrentCondition *condition = data.current;
	// dreams come true here
}];
Getting Forecast Conditions, Swift
import CZWeatherKit

let request = CZOpenWeatherMapRequest.newDailyForecastRequestForDays(3)
request.location = CZWeatherLocation(fromCity: "Seattle", state: "WA")
request.sendWithCompletion { (data, error) -> Void in
    if let weather = data {
  		for forecast in weather.dailyForecasts {
  			// dreams come true here
  		}
    }
}

Using a Weather Service

A weather service allows for the dispatching of weather data requests and allows for more fine-grained control over how requests are handled as opposed to the interface provided by CZWeatherDataRequest. An ideal use case for a weather service is powering a weather app.

import CZWeatherKit

let service = CZWeatherService()
request = CZOpenWeatherMapRequest.newCurrentRequest()
request.location = CZWeatherLocation(fromCity: "Seattle", state: "WA")
service.dispatchRequest(request, completion: { (data, error) -> Void in
    if let weather = data {
        // dreams come true here
    }
})

Supported Weather APIs

CZWeatherKit currently supports the following weather services:

Climacons

CZWeatherKit supports Climacons out of the box. The Climacons Font is a font set created by Adam Whitcroft featuring weather icons.

Architecture

CoreDescription
CZWeatherServiceAsyncronously dispatches requests, caches responses, and simplifies key management when making frequent API calls.
CZPINWeatherDataCacheAn implementation of the CZWeatherDataCache protocol that uses PINCache for caching weather data.
Model TypeDescription
CZWeatherLocationRepresents a location to retrieve weather data for.
CZWeatherDataTop-level container for all other weather data.
CZWeatherCurrentConditionContains data for current conditions.
CZWeatherForecastConditionContains data for a day's forecasted conditions.
CZWeatherHourlyConditionContains data for an hour's conditions.
CZWeatherRequestThe abstract base class for all request classes.
CZWundergroundRequestUsed for calling the Wunderground API.
CZOpenWeatherMapRequestUsed for calling the OpenWeatherMap API.
CZForecastioRequestUsed for calling the Forecast.io API.
CZWorldWeatherOnlineRequestUsed for calling the World Weather Online API.
API TypeDescription
CZWundergroundAPIWunderground API class.
CZOpenWeatherMapAPI OpenWeatherMap API class.
CZForecastioAPIForecastio API class.
CZWorldWeatherOnlineAPIWorldWeatherOnline API class.
ProtocolsDescription
CZWeatherAPIThe protocol for weather API classes.
CZWeatherDataCacheThe protocol for a cache used by a CZWeatherService.
HeadersDescription
CZClimaconsContains mappings for Climacons to chars.
CZWeatherKitTypesContains varions type definitions.

Contributing

If you would like to contribute to the development of CZWeatherKit, please take care to follow the style conventions and please include unit tests in your pull request.

For feature requests or general questions, feel free to post an issue.

Contributers