Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
rshankras avatar

Auth Flow

  • 3 installs
  • 591 repo stars
  • Updated July 24, 2026
  • rshankras/claude-code-apple-skills

Generates an iOS/macOS authentication flow with Sign in with Apple, Face ID/Touch ID biometrics, and secure Keychain token storage.

About

Generates a complete authentication infrastructure combining Sign in with Apple, biometric auth, and Keychain-backed session storage. A developer uses it to add login to an app while detecting and integrating with existing auth code.

  • Sign in with Apple plus Face ID/Touch ID biometric login
  • Secure Keychain storage with conflict detection for existing auth

Auth Flow by the numbers

  • 3 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #887 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill auth-flow

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3
repo stars591
Last updatedJuly 24, 2026
Repositoryrshankras/claude-code-apple-skills

What it does

Generates an iOS/macOS authentication flow with Sign in with Apple, Face ID/Touch ID biometrics, and secure Keychain token storage.

Files

SKILL.mdMarkdownGitHub ↗

Auth Flow Generator

Generate a complete authentication flow with Sign in with Apple, biometric authentication (Face ID/Touch ID), and secure Keychain storage.

When This Skill Activates

Use this skill when the user:

  • Asks to "add authentication" or "add login"
  • Mentions "Sign in with Apple" or "SIWA"
  • Wants "Face ID login" or "biometric auth"
  • Asks about "Keychain" or "secure storage"
  • Mentions "user session" or "auth token"

Pre-Generation Checks

1. Project Context Detection

  • [ ] Check for existing auth implementations
  • [ ] Check for AuthenticationServices framework usage
  • [ ] Verify entitlements file exists
  • [ ] Identify source file locations

2. Conflict Detection

Search for existing auth:

Glob: **/*Auth*.swift, **/*Keychain*.swift
Grep: "ASAuthorizationController" or "LAContext"

If found, ask user:

  • Replace existing implementation?
  • Extend with additional methods?

3. Required Capabilities

Sign in with Apple requires:

  • Add "Sign in with Apple" capability in Xcode
  • Configure in App Store Connect
  • Add entitlement: com.apple.developer.applesignin

Configuration Questions

Ask user via AskUserQuestion:

1. Authentication methods? (multi-select)

  • Sign in with Apple
  • Biometrics (Face ID/Touch ID)
  • Both

2. Session storage?

  • Keychain (secure, persists reinstall)
  • UserDefaults (simple, cleared on reinstall)

3. Session management?

  • Auto-refresh tokens
  • Manual refresh
  • No token refresh needed

Generation Process

Step 1: Create Core Files

Generate these files: 1. AuthenticationManager.swift - Core auth orchestration 2. KeychainManager.swift - Secure storage 3. SignInWithAppleManager.swift - SIWA handling 4. BiometricAuthManager.swift - Face ID/Touch ID

Step 2: Create SwiftUI Components

Based on configuration:

  • SignInWithAppleButton.swift - SwiftUI button wrapper
  • AuthenticationView.swift - Complete auth UI

Step 3: Determine File Location

Check project structure:

  • If Sources/ exists → Sources/Auth/
  • If App/ exists → App/Auth/
  • Otherwise → Auth/

Entitlements Required

Sign in with Apple

<!-- YourApp.entitlements -->
<key>com.apple.developer.applesignin</key>
<array>
    <string>Default</string>
</array>

Keychain Sharing (optional)

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.yourcompany.shared</string>
</array>

Info.plist Required

Face ID Usage Description

<key>NSFaceIDUsageDescription</key>
<string>Use Face ID to securely sign in to your account</string>

Output Format

After generation, provide:

Files Created

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

Integration Steps

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
        }
    }
}

Required Setup

1. Xcode Capabilities:

  • Add "Sign in with Apple" capability
  • Enable Keychain Sharing (if needed)

2. App Store Connect:

  • Configure Sign in with Apple for your App ID

3. Info.plist:

  • Add NSFaceIDUsageDescription

Testing Instructions

Sign in with Apple:

  • Use Simulator for basic testing
  • Test on device for full flow
  • Use sandbox Apple ID for testing

Biometrics:

  • Simulator: Features > Face ID > Enrolled
  • Test enrolled/not enrolled states
  • Test failed authentication

References

  • auth-patterns.md - Security best practices
  • templates/ - All template files
  • Apple Docs: Authentication Services, LocalAuthentication

Related skills

Mobile Developmentappsecsecrets

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.