Swift library to communicate with the DarkSky weather API

What's New

Added back SPM product



Build Status codebeat badge Swift Version codecov Documentation Coverage

HPDarkSky is a cross-platform Swift framework to fetch weather data from Dark Sky's JSON API. See their documentation for further details.


To install HPDarkSky, either add the URL of this repository directly to your Xcode project by clicking "File" -> "Swift Packages" -> "Add Package Dependency" or if you prefer the installation via CocoaPods, simply add pod HPDarkSky to your Podfile

Deployment target OS Version
iOS 9.0+
watchOS 3.0+
macOS 10.13+
tvOS 9.0+



To get started, you need an API key from Dark Sky (register here). Then set your API key like this:

import HPDarkSky

// Use singleton
HPDarkSky.shared.secret = "YOUR_APIKEY"
// Or custom init
let api = HPDarkSky(secret: "YOUR_APIKEY", language: ..., units: ...)

For a list of supported languages see Dark Sky's website

Making a request

let location = CLLocationCoordinate2D(latitude: 12.231, longitude: 69.420)
HPDarkSky.shared.requestWeather(forLocation: location, exlcudedFields: [.hourly]) { response, error in
	// Evaluate result here

Note: HPDarkSky automatically validates passed in locations (since you can initialize CLLocationCoordinate2D with any Double value) to stop you from making a request that will return an error anyways.

Standalone request object

You may also initialise a standalone request object to use with your custom URLSession like this:

let location = CLLocationCoordinate2D(latitude: 12.231, longitude: 69.420)
let request = DarkSkyRequest(secret: "YOUR_APIKEY", location: location)

// URLSession extension included
URLSession.shared.dataTask(with: request) { data, response, error in
	// Do your thing here

Excludable Fields

ExcludableFields is an enum that you can pass to either the API or a request object to tell the API that the fields in the array should be omitted from the response. You can use this to reduce used bandwidth for example or in cases where you're only interested in certain data and not the whole set.

Time Machine

You may also pass an optional Date object to the API or a request object, which will return data from that point in time in the past (starting midnight 1970 UTC, you know the drill) or future.

Note: The timezone is only used for determining the time of the request; the response will always be relative to the local time zone.


[x] Finish API interface

[X] Add unit tests

[ ] Reach 100% test coverage

[ ] Add conversion methods to convert between units

Henrik Panhans 2019, you can find me on Twitter


  • Swift Tools 5.0.0
View More Packages from this Author


  • None
Last updated: Sun Jan 29 2023 16:14:07 GMT-1000 (Hawaii-Aleutian Standard Time)