Skip to main content

iOS Quickstart

Use this guide to add ThunderID authentication to an iOS application using the ThunderID iOS SDK.

What You Will Learn

  • Create a new Xcode project
  • Install the ThunderIDSwiftUI Swift package
  • Add working sign-in and sign-out using SwiftUI components
  • Display the signed-in user's name

Prerequisites

  • About 15 minutes
  • Xcode 15 or later
  • iOS 16+ deployment target
1

Run ThunderID

Start a local ThunderID instance. Pick the method that works best for you:

$npx thunderid

Requires Node.js 18+

Full install guide →

Once it's running, the console is available at https://localhost:8090/console.

2

Create an Application

  1. Sign in to the Console.

    Test User

    If you used the default setup, sign in to the Console as admin with the password generated during setup and printed to the setup output (unless you supplied your own).

  2. Navigate to Applications.

  3. Click Add Application.

  4. From the Choose a type page, select iOS.

  5. Enter a name (e.g. My iOS App).

  6. Select how you want to sign in users (e.g., email/password, social login, etc.).

  7. Select Theme settings.

  8. Leave Sign-In Approach set to Bring Your Own UI (the default for iOS applications).

  9. Click Create.

warning

Copy the Application ID from the General tab, under Quick Copy. You'll need it when configuring the SDK.

3

Create an iOS App

In Xcode, create a new project using the iOS > App template. Choose SwiftUI as the interface and Swift as the language.

note

If you already have an existing iOS project, skip this step.

4

Install ThunderIDSwiftUI

In Xcode, go to File > Add Package Dependencies and enter the package URL:

https://github.com/thunder-id/ios-sdks

When prompted for a version rule, select Up to Next Major Version starting at the latest release tag. When prompted to choose package products, select ThunderIDSwiftUI. This includes the core <ProductName /> client as a dependency.

5

Initialize the SDK

Open your app's entry point (the file that conforms to App) and apply the .thunderIDProvider(config:) modifier to your root view. This injects a ThunderIDState environment object into all child views.

MyApp.swift
import SwiftUI
import ThunderIDSwiftUI

@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.thunderIDProvider(config: ThunderIDConfig(
baseUrl: "https://localhost:8090",
scopes: ["openid", "profile", "email"],
applicationId: "<your-application-id>"
))
}
}
}
Configuration

Replace <your-application-id> with the Application ID from your ThunderID application settings.

Configuration Parameters

ParameterDescription
baseUrlYour ThunderID instance URL. Must use HTTPS.
scopesOAuth 2.0 scopes to request. Include "openid" at minimum.
applicationIdThe Application ID used for the app-native sign-in and sign-up flows
6

Add Sign-In and Sign-Out

The ThunderID iOS SDK provides SignedIn and SignedOut guard views for conditional rendering, a SignIn component for the embedded sign-in flow, and a SignOutButton for sign-out.

Replace the contents of ContentView.swift with:

ContentView.swift
import SwiftUI
import ThunderIDSwiftUI

struct ContentView: View {
@EnvironmentObject var state: ThunderIDState

var body: some View {
Group {
if !state.isInitialized {
ProgressView("Loading...")
} else {
SignedIn {
HomeView()
} fallback: {
AuthView()
}
}
}
}
}

Create AuthView.swift to display the sign-in form:

AuthView.swift
import SwiftUI
import ThunderIDSwiftUI

struct AuthView: View {
var body: some View {
VStack(spacing: 24) {
Text("Welcome")
.font(.largeTitle)
.bold()

SignIn(applicationId: "<your-application-id>")
.padding()
}
.padding()
}
}
7

Display User Profile Information

Create HomeView.swift to show the authenticated user's name and a sign-out button:

HomeView.swift
import SwiftUI
import ThunderIDSwiftUI

struct HomeView: View {
@EnvironmentObject var state: ThunderIDState

var body: some View {
NavigationStack {
VStack(spacing: 24) {
if let user = state.user {
Text("Welcome, \(user.displayName ?? user.email ?? "User")!")
.font(.title2)
.bold()

Text(user.email ?? "")
.foregroundStyle(.secondary)
}

SignOutButton()
.buttonStyle(.borderedProminent)
}
.padding()
.navigationTitle("Home")
}
}
}
8

Run the App

In Xcode, select an iOS 16+ simulator and press Run (⌘R).

Test credentials

You'll need a user to sign in with. If you haven't created one yet, open https://localhost:8090/console, navigate to Users, and add a test user with an email and password.

Success

You should see the sign-in form. Enter your test user credentials and tap Submit. After successful authentication, the home screen displays the user's name and a Sign Out button.

What's Next

Explore with AI

ThunderID LogoThunderID Logo

Product

DocsAPIsSDKs
© Copyright Linux Foundation Europe.For web site terms of use, trademark policy and other project policies please see https://linuxfoundation.eu/en/policies.