Magic for iOS Apps

Magic for iOS Apps

New to Magic?

Create a fully-functional Magic auth demo in minutes.

Build a demo

Reference for the Magic SDK for iOS:


The Magic SDK for iOS is your entry-point to secure, passwordless authentication for your mobile app. This guide will cover some important topics for getting started with iOS APIs and to make the most of Magic's features.

Magic can support either server-based or serverless web applications. It is up to the developers to implement the Admin SDK to validate the DID Token.


It's easy to install Magic SDK if you manage your iOS dependencies using CocoaPods. If you don't have an existing Podfile, run the following command to create one:

$ pod init

Add pod 'MagicSDK' to your Podfile:

target 'TARGET_NAME' do use_frameworks! pod 'MagicSDK' # Required for XCFramework post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES' end end end end

Run the following command:

$ pod install

To update pods to the latest:

$ pod update

Create an SDK Instance

All the examples are written in Swift. Objective-C examples will be added soon.

import UIKit import MagicSDK @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // assign the newly created Magic instance to shared property Magic.shared = Magic(apiKey: "API_KEY") // do any other necessary launch configuration } return true }

Returns via PromiseKit

Magic offers functions that returns promisified results by using PromiseKit. For more detail about promiseKit in iOS, please check PromiseKit.

So this...

magic.auth.loginWithMagicLink(configuration, response: { response in guard let result = response.result else { return print("Error:", response.error.debugDescription) } print("Result", result) }) equivalent to the follow function call:

magic.auth.loginWithMagicLink(configuration).done({ result in print("Result", result) // DIDToken }).catch({ print("Error:", error) // handle Error })

Once the authentication request is complete, the closure will be executed with either success or failure state in the result. If you choose to return as a promise, the promise will resolve with success state or reject when failure state is reached.

Server-side SDKs ?

Integrate Magic with your existing backend.