Skip to content
This repository has been archived by the owner on Jun 27, 2024. It is now read-only.

Library to configure secure DNS in macOS, iOS, tvOS, and watchOS

License

Notifications You must be signed in to change notification settings

madsolar8582/SLRDNSConfigurator

Repository files navigation

SLRDNSConfigurator

Actions Status License: LGPL v3 Platforms: iOS | macOS | tvOS | watchOS

Provides convenience methods for configuring Network Privacy Contexts with secure DNS via DNS over HTTPS (DoH) or DNS over TLS (DoT).

Table of Contents

Getting Started

These instructions will get you up and running with SLRDNSConfigurator.

Installation

Requirements

Version Minimum Xcode Version Minimum macOS SDK Minimum iOS SDK Minimum tvOS SDK Minimum watchOS SDK
1.0.0 -> Current 13.0 11.0 14.0 14.0 7.0

This library depends on a few system frameworks. If you have Modules and Link Frameworks Automatically enabled, then there isn't much that needs to be done. However, if you do not, you need to link against the Network, & Foundation frameworks.

Swift Package Installation

This is the recommended installation method. Follow the instructions provided by Apple using this repository's URL.

Binary Installation

You may download the latest binary from the releases page and then include it in your project.

Source Installation

If you want to build the library from source in your own project, you can either:

  1. Add the project as a submodule.
  2. Add the project as a subtree.
  3. Copy the source files directly into your project.

The submodule or subtree approaches are preferred over the copying of source files since you can easily obtain updates.

Carthage

If you do not already have Carthage installed, you can install it via Homebrew:

brew install carthage

Once Carthage is installed, add SLRDNSConfigurator to your Cartfile:

github "madsolar8582/SLRDNSConfigurator" ~> 1.0.0

Finally, run carthage and take the resulting SLRDNSConfigurator.framework and put it in your project.

CocoaPods

If you do not already have CocoaPods installed, you can install it via Homebrew or you can install it via gem:

brew install cocoapods

# OR

sudo gem install cocoapods # Note: sudo is required if you are installing to the system gemset

Once CocoaPods is installed, add SLRDNSConfigurator to your Podfile or to your Podspec as a dependency:

# Podfile
pod 'SLRDNSConfigurator', git: 'https://github.com/madsolar8582/SLRDNSConfigurator.git', tag: '1.0.0'

# Podspec
s.dependency 'SLRDNSConfigurator', git: 'https://github.com/madsolar8582/SLRDNSConfigurator.git', tag: '1.0.0'

Usage

To use this library, you just call the APIs provided on SLRDNSConfigurator. The default network privacy context is used by CFNetwork, Network.framework, and NSURLSession, which should cover all transactions within the application unless you use custom contexts. If so, there are APIs to modify those custom contexts.

Which method of secure DNS you want to use is up to you, however, keep in mind that if the network blocks the implementation you choose, DNS will stop working until you change methods or reset the network context to no longer use secure DNS.

@import SLRDNSConfigurator;

// DNS over HTTPS
[SLRDNSConfigurator configureDefaultNetworkContextWithDoHProvider:SLRDoHProviderCloudflare];

// DNS over TLS
[SLRDNSConfigurator configureDefaultNetworkContextWithDoTProvider:SLRDoTProviderCloudflare];

// Reset Network Context
[SLRDNSConfigurator resetDefaultNetworkContext];

Contributing

Please read CONTRIBUTING for details on how to contribute.

Support

Please read SUPPORT for details on how to get help with installation or usage.

License

This project is licensed under the LGPL v3 license.

Changes

Please read the CHANGELOG for details on the changes included in each release.

Versioning

This project uses Semantic Versioning for versioning. For the versions available, see the releases page.

Release Management

This project releases monthly if there are enough changes to warrant a release. However, if there are critical defects or inadvertent non-passive changes, a one-off release will be created for each impacted release series.

After a major version release, the older release series will stop receiving updates after 60 days and are then considered obsolete (and thus unsupported).