Autumn Sale50% offCOMPOT
ButtonsPro ComponentiOS 16.0+Xcode 15+

Sign in with Apple Button

Native Apple Authentication button following Apple Human Interface Guidelines.

SwiftUI Implementation

Pure Vanilla Swift • No Dependencies
appleSignInButton.swift
import SwiftUI
import AuthenticationServices

// Import AuthenticationServices
// Add "Sign in with Apple" capability.
// For styling reference and guidance visit: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple#Creating-a-custom-Sign-in-with-Apple-button

struct AppleSignInButton: View {
    @Environment(\\.colorScheme) private var colorScheme
    
    let label: SignInWithAppleButton.Label
    let scope: [ASAuthorization.Scope]
    let height: Double
    let cornerRadius: Double
    
    private func handleSuccess(with authorization: ASAuthorization) {
        if let userCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            print("Successfuly authenticated user: \\(userCredential.user)")
            // Your code to handle success.
        }
    }
    
    private func handleError(with error: Error) {
        print("Could not authenticate user: \\(error.localizedDescription)")
        // Your code to handle failure.
    }
    
    var body: some View {
        SignInWithAppleButton(label) {request in
            request.requestedScopes = scope
        } onCompletion: { result in
            switch result {
            case .success(let authorization):
                handleSuccess(with: authorization)
            case .failure(let error):
                handleError(with: error)
            }
        }
        .frame(height: height)
        .cornerRadius(cornerRadius)
        .shadow(color: Color.gray, radius: 3)
        .signInWithAppleButtonStyle(colorScheme == .dark ? .white : .black)
    }
}

struct UseAppleSignInButton:  View {
    
    var body: some View {
        VStack(alignment: .center, spacing: 8) {
            AppleSignInButton(label: .signIn, scope: [.fullName, .email], height: 44, cornerRadius: 0)
            AppleSignInButton(label: .signUp, scope: [.fullName, .email], height: 44, cornerRadius: 12)
            AppleSignInButton(label: .continue, scope: [.fullName, .email], height: 44, cornerRadius: 25)
        }
        .padding()
    }
}

#Preview {
    UseAppleSignInButton()
}

Ready to copy and paste directly into any Xcode project running iOS 16.0+.

Recommended Use Cases

  • First-run onboarding flows and feature introductions
  • App settings, preferences, and account configuration screens

Component Details

Category
Buttons
iOS Compatibility
iOS 16.0+
Xcode Version
Xcode 15+
Platform
iOS
License Tier
Pro
Themes & Contexts
settingsonboardingaccount
Keywords
signauthenticate
C

Compot for iOS

Native SwiftUI playground app

Preview all 130+ components interactively on your device and copy code straight to Xcode with 1 tap.

Get Compot on the App Store