Sign in with Apple
This guide will teach you how to add native Sign in with Apple to your Clerk apps on Apple platforms.
Add your Native Application
Add your iOS application to the Native Applications page in the Clerk dashboard. You will need your iOS app's App ID Prefix and Bundle ID.
Enable Apple as a social connection
- In the Clerk Dashboard, navigate to the SSO Connections page.
- Select Add connection and select For all users.
- In the Choose provider dropdown, select Apple.
- Ensure that Enable for sign-up and sign-in is toggled on.
Add the Sign in with Apple capability to your app
Add the Sign in with Apple capability to your app.
Obtain an Apple ID Credential
To authenticate with Apple and Clerk, you need to obtain an Apple ID Credential.
To obtain an Apple ID Credential, you can do one of the following:
- Use one of Apple's built-in Sign in with Apple buttons.
- Use Clerk's
SignInWithAppleHelper
class. - Obtain it manually by following the Apple docs.
Build your sign-in flow
Once you have obtained your Apple ID Credential, you can use it to authenticate with Clerk by calling SignIn.authenticateWithIdToken(provider:idToken:)
with a provider of .apple
and the idToken
you have obtained.
The following example uses Apple's built-in SignInWithAppleButton
to obtain an Apple ID Credential and calls SignIn.authenticateWithIdToken(provider:idToken:)
to authenticate with Clerk.
import SwiftUI
import Clerk
import AuthenticationServices
struct SignInWithAppleView: View {
var body: some View {
// Use Apple's built-in SignInWithAppleButton
SignInWithAppleButton { request in
request.requestedScopes = [.email, .fullName]
request.nonce = UUID().uuidString // Setting the nonce is mandatory
} onCompletion: { result in
Task {
// Access the Apple ID Credential
guard let credential = try result.get().credential as? ASAuthorizationAppleIDCredential else {
dump("Unable to get credential of type ASAuthorizationAppleIDCredential")
return
}
// Access the necessary identity token on the Apple ID Credential
guard let idToken = credential.identityToken.flatMap({ String(data: $0, encoding: .utf8) }) else {
dump("Unable to get ID token from Apple ID Credential.")
return
}
// Authenticate with Clerk
let authResult = try await SignIn.authenticateWithIdToken(provider: .apple, idToken: idToken)
}
}
}
}
Feedback
Last updated on