Need help with Superb?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

206 Stars 6 Forks MIT License 135 Commits 7 Opened issues


Pluggable HTTP authentication for Swift.

Services available


Need anything else?

Contributors list

Superb Carthage compatible

Pluggable HTTP authentication for Swift.


  • Safe, secure token storage in the iOS Keychain.
  • Automatic handling of 401 responses and reauthentication.
  • Scales to handle many concurrent requests in a thread-safe way.
  • Stays out of your way until you need it with a simple, minimal API.
  • Promotes Apple's Authentication Guidelines by "delaying sign-in as long as possible".
  • Supports adapters for any number of authentication providers.
  • Extensible without requiring any source modifications or pull requests.


  • Opinionated about user experience.


Example: GitHub OAuth Authentication

When you register the app with your OAuth provider, you will give a redirect URI. This URI must use a URL scheme that is registered for your app in your app's


Superb allows your app to support multiple authentication providers via a registration mechanism. iOS apps have a single entrypoint for URLs, so Superb searches through the registered providers to find the correct one to handle the redirect URL.

// GitHub+Providers.swift

import Superb import SuperbGitHub

extension GitHubOAuthProvider { static var shared: GitHubOAuthProvider { // Register a provider to handle callback URLs return Superb.register( GitHubOAuthProvider( clientId: "", clientSecret: "", redirectURI: URL(string: "")! ) ) } }

// AppDelegate.swift

@UIApplicationMain final class AppDelegate: UIResponder, UIApplicationDelegate { // ...

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey: Any]) -> Bool { // Pass the URL and options off to Superb. return Superb.handleAuthenticationRedirect(url, options: options) } }

Then, in our API client, we can use

to fence the code that must be run with authentication, using
// GitHubAPIClient.swift

struct GitHubAPIClient { static let oauthClient = GitHubAPIClient( requestAuthorizer: RequestAuthorizer( authorizationProvider: GitHubOAuthProvider.shared ) )

private let authorizer: RequestAuthorizerProtocol

init(requestAuthorizer: RequestAuthorizerProtocol) { authorizer = requestAuthorizer }

// An authorized request to get the current user's profile. func getProfile(completionHandler: @escaping (Result) -> Void) { let request = URLRequest(url: URL(string: "")!)

authorizer.performAuthorized(request) { result in
  switch result {
  case let .success(data, _):
    let profile = parseProfile(from: data)

  case let .failure(error):


// An unauthorized request. func getZen(completionHandler: @escaping (Result) -> Void) { let request = URLRequest(url: URL(string: "")!)

URLSession.shared.dataTask(with: request) { data, _, error in
  let result = parseZen(data, error)

} }

// later let api = GitHubAPIClient.oauthClient

api.getProfile { result in // ... }

List of Authentication Providers



Add the following to your Cartfile:

github "thoughtbot/Superb" ~> 0.2

Then run

carthage update

Follow the current instructions in Carthage's README for up to date installation instructions.

You will need to embed both

in your application.


Add the following to your Podfile:

pod "Superb", "~> 0.2.0"

You will also need to make sure you're opting into using frameworks:


Then run

pod install


Authentication always fails when using OAuth

You forgot to call

If you do not call

then your authentication provider will not have a chance to receive callback URLs.


See the CONTRIBUTING document. Thank you, contributors!


Superb is Copyright (c) 2017 thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the LICENSE file.



Superb is maintained and funded by thoughtbot, inc. The names and logos for thoughtbot are trademarks of thoughtbot, inc.

We love open source software! See our other projects or look at our product case studies and hire us to help build your iOS app.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.