Skip to main content
Docs

iOS Quickstart

Important

Ensure that the Native API is enabled to integrate Clerk in your native application. In the Clerk Dashboard, navigate to the Native Applications page.

Create an iOS Project

To get started using Clerk with iOS, create a new project in Xcode. Select SwiftUI as your interface and Swift as your language. See the Xcode documentation for more information.

Install the Clerk iOS SDK

Follow the Swift Package Manager instructions to install Clerk as a dependency. When prompted for the package URL, enter https://github.com/clerk/clerk-ios. Be sure to add the package to your target.

Add associated domain capability

To enable seamless authentication flows, you need to add an associated domain capability to your iOS app. This allows your app to work with Clerk's authentication services.

  1. In Xcode, select your project in the Project Navigator.
  2. Select your app target.
  3. Navigate to the Signing & Capabilities tab.
  4. Select the + Capability option.
  5. Search for and add Associated Domains. It will be added as a dropdown to the Signing & Capabilities tab.
  6. Under Associated Domains, add a new entry with the value: webcredentials:{YOUR_FRONTEND_API_URL}

Note

Replace {YOUR_FRONTEND_API_URL} with your Frontend API URL, which can be found on the Native Applications page in the Clerk Dashboard.

Load Clerk

To use Clerk in your app, you must first configure and load Clerk.

  1. Inside your new project in Xcode, open your @main app file.
  2. Import Clerk.
  3. Create a reference to the shared Clerk instance.
  4. Inject the clerk instance into the SwiftUI environment using .environment(\.clerk, clerk) so your views can access it.
  5. Add a .task modifier that configures Clerk with your Clerk Publishable Key and loads it when the app starts.
ClerkQuickstartApp.swift
import SwiftUI
import Clerk

@main
struct ClerkQuickstartApp: App {
  @State private var clerk = Clerk.shared

  var body: some Scene {
    WindowGroup {
      ContentView()
        .environment(\.clerk, clerk)
        .task {
          clerk.configure(publishableKey: "YOUR_PUBLISHABLE_KEY")
          try? await clerk.load()
        }
    }
  }
}

Conditionally render content

To render content based on whether a user is authenticated or not:

  1. Open your ContentView file.
  2. Import Clerk and access the shared Clerk instance that you injected into the environment in the previous step.
  3. Replace the content of the view body with a conditional that checks for a clerk.user.
ContentView.swift
import SwiftUI
import Clerk

struct ContentView: View {
  @Environment(\.clerk) private var clerk

  var body: some View {
    VStack {
      if let user = clerk.user {
        Text("Hello, \(user.firstName ?? "User")")
      } else {
        Text("You are signed out")
      }
    }
  }
}

Use Clerk's prebuilt components

Clerk provides prebuilt SwiftUI components that handle authentication flows and user management, eliminating the need to build custom forms and flows.

Update your ContentView to use Clerk's prebuilt components. Replace the existing content with the following code:

ContentView.swift
import SwiftUI
import Clerk

struct ContentView: View {
  @Environment(\.clerk) private var clerk
  @State private var authIsPresented = false

  var body: some View {
    VStack {
      if clerk.user != nil {
        UserButton()
          .frame(width: 36, height: 36)
      } else {
        Button("Sign in") {
          authIsPresented = true
        }
      }
    }
    .sheet(isPresented: $authIsPresented) {
      AuthView()
    }
  }
}

The updated ContentView uses two key Clerk components:

  • : A comprehensive authentication view that handles sign-in and sign-up flows, including email verification, password reset, and multi-factor authentication. It's presented as a sheet when the user taps "Sign in".

  • : A circular button that displays the user's profile image. When tapped, it automatically presents the where users can manage their account, update their profile, and sign out.

Create your first user

Run your project. When you tap "Sign in", the AuthView will appear, allowing you to sign up or sign in.

Feedback

What did you think of this content?

Last updated on