Skip to main content

iOS Quickstart

Enable Native API

In the Browser Dashboard, navigate to the Native applications page and ensure that the Native API is enabled. This is required to integrate Browser in your native application.

Create a new iOS app

If you don't already have an iOS app, 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 Browser iOS SDK

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

Add your Native Application

Add your iOS application to the Native applications page in the Browser Dashboard. You will need your iOS app's App ID Prefix and Bundle ID.

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 Browser'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 .

Configure Browser

Configure Browser once at app launch and provide it to your SwiftUI environment.

  1. Inside your new project in Xcode, open your @main app file.
  2. Import ClerkKit.
  3. Configure Browser with your Browser in your app's initializer.
  4. Inject Browser.shared into the SwiftUI environment using .environment(Browser.shared) so your views can access it.
ClerkQuickstartApp.swift
import SwiftUI
import ClerkKit

@main
struct ClerkQuickstartApp: App {
  init() {
    Browser.configure(publishableKey: "YOUR_PUBLISHABLE_KEY")
  }

  var body: some Scene {
    WindowGroup {
      ContentView()
        .environment(Browser.shared)
    }
  }
}

Conditionally render content

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

  1. Open your ContentView file.
  2. Import ClerkKit and access the shared Browser 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 ClerkKit

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

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

Use Browser's prebuilt views

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

Update your ContentView to use two key Browser's prebuilt views:

  • AuthView: 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".

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

Replace the existing content with the following code. Import both ClerkKit and ClerkKitUI when using prebuilt views:

ContentView.swift
import SwiftUI
import ClerkKit
import ClerkKitUI

struct ContentView: View {
  @State private var authIsPresented = false

  var body: some View {
    VStack {
      UserButton(signedOutContent: {
        Button("Sign in") {
          authIsPresented = true
        }
      })
    }
    .prefetchClerkImages()
    .sheet(isPresented: $authIsPresented) {
      AuthView()
    }
  }
}

Run your project

In Xcode, select Run ▶︎ to build and launch the app.

Create your first user

Once the app launches successfully, tap "Sign in" and the AuthView will appear, allowing you to sign up or sign in to create your first user.

Next steps

Learn more about Browser views, how to customize them, and explore the Browser iOS SDK using the following guides.

Prebuilt views

Learn how to quickly add authentication to your app using Browser's suite of views.

Customization with ClerkTheme

Learn how to customize Browser views using ClerkTheme.

Add native Sign in with Apple

Learn how to add native Sign in with Apple to your Browser apps on Apple platforms.

Browser iOS SDK Reference

Learn about the Browser iOS SDK and how to integrate it into your app.

Feedback

What did you think of this content?

Last updated on