Generates authentication infrastructure with Sign in with Apple, biometrics, and Keychain storage. Use when user wants to add authentication, login, or Sign in with Apple.
Generate a complete authentication flow with Sign in with Apple, biometric authentication (Face ID/Touch ID), and secure Keychain storage.
Use this skill when the user:
Search for existing auth:
Glob: **/*Auth*.swift, **/*Keychain*.swift
Grep: "ASAuthorizationController" or "LAContext"
If found, ask user:
Sign in with Apple requires:
com.apple.developer.applesigninAsk user via AskUserQuestion:
Authentication methods? (multi-select)
Session storage?
Session management?
Generate these files:
AuthenticationManager.swift - Core auth orchestrationKeychainManager.swift - Secure storageSignInWithAppleManager.swift - SIWA handlingBiometricAuthManager.swift - Face ID/Touch IDBased on configuration:
SignInWithAppleButton.swift - SwiftUI button wrapperAuthenticationView.swift - Complete auth UICheck project structure:
Sources/ exists ā Sources/Auth/App/ exists ā App/Auth/Auth/<!-- YourApp.entitlements -->
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.yourcompany.shared</string>
</array>
<key>NSFaceIDUsageDescription</key>
<string>Use Face ID to securely sign in to your account</string>
After generation, provide:
Sources/Auth/
āāā AuthenticationManager.swift # Core orchestration
āāā KeychainManager.swift # Secure storage
āāā SignInWithAppleManager.swift # SIWA delegate
āāā BiometricAuthManager.swift # Face ID/Touch ID
āāā AuthenticationState.swift # Auth state model
āāā Views/
āāā SignInWithAppleButton.swift # SwiftUI button
āāā AuthenticationView.swift # Complete UI
App Entry Point:
@main
struct MyApp: App {
@State private var authManager = AuthenticationManager() // AuthenticationManager is @Observable
var body: some Scene {
WindowGroup {
if authManager.isAuthenticated {
ContentView()
} else {
AuthenticationView()
}
}
.environment(authManager)
}
}
Sign in with Apple Button:
SignInWithAppleButtonView { result in
switch result {
case .success(let user):
print("Signed in: \(user.id)")
case .failure(let error):
print("Failed: \(error)")
}
}
Biometric Auth:
Button("Unlock with Face ID") {
Task {
if await BiometricAuthManager.shared.authenticate() {
// Authenticated
}
}
}
Xcode Capabilities:
App Store Connect:
Info.plist:
NSFaceIDUsageDescriptionSign in with Apple:
Biometrics: