---
title: "sdk/ios"
description: "Swift-SDK für iOS und macOS mit ASWebAuthenticationSession,PKCE-S256-Autorisierungscode-Flow und Keychain-Token-Speicher."
locale: "de"
---

> Documentation Index
> Fetch the relevant documentation index at: https://vonvon.id/de/sdks/llms.txt
> Use this file to discover all available pages before exploring further.

# sdk/ios

## Zustand

Der Paketstatus lautet **Lokal implementiert und verifiziert**. Die Swift-Unit-Test-Suite für das iOS-Paket ist unter macOS erfolgreich. Das Verhalten auf einem Simulator oder Gerät sowie ein echter IdP-Roundtrip mit einer laufenden Vonvon-Instanz müssen weiterhin manuell verifiziert werden. Diese Seite dokumentiert implementiertes Verhalten; sie stellt keine Aussage zur Produktionsreife dar.

Registry-Status: UNPUBLISHED. Installieren Sie dieses SDK nur aus einem Checkout des Repository-Quellcodes; verwenden Sie keine externe Paket-Registry.

## Anforderungen

- iOS 16+ / macOS 13+
- Swift 5.9+ und Xcode 15+
- Keine Drittanbieter-Abhängigkeiten — verwendet ausschließlichApple-System-Frameworks

## Installation

Fügen Sie das Paket über den Swift Package Manager in Xcode (Datei -&gt;Paketabhängigkeiten hinzufügen) oder direkt in `Package.swift` hinzu:

```swift
// Package.swift
dependencies: [
.package(path: "../vonvon/sdk/ios"),
],
targets: [
.target(name: "YourApp", dependencies: [.product(name: "Vonvon", package: "ios")]),
]
```

## Schnellstart

```swift
import Vonvon

// 1. Configure in @main App.init. offline_access is rejected until DPoP is implemented.
Vonvon.shared.configure(options: VonvonConfiguration(
issuer: URL(string: "https://vonvon.id")!,
clientId: "your_client_id",
redirectUri: URL(string: "com.example.app://auth/callback")!,
scopes: ["openid", "profile", "email"]
))

// 2. Sign in (opens ASWebAuthenticationSession)
try await Vonvon.shared.signIn()

// 3. Handle redirect in SceneDelegate
let session = try await Vonvon.shared.handleRedirect(url: callbackUrl)

// 4. Read the current unexpired session. Expiry requires reauthorization.
if let session = try await Vonvon.shared.getSession() {
let token = try await Vonvon.shared.getAccessToken()
}

// 5. Clear local state and optionally call end_session.
try await Vonvon.shared.signOut(callEndSession: true)
```

## Kern-API

| Methode | Beschreibung |
| --- | --- |
| `configure(options:)` | Mit issuer, clientId, redirectUri, scopes initialisieren. Vor allenanderen Methoden aufrufen. |
| `signIn(options:) async throws` | ASWebAuthenticationSession mit PKCE-S256-Autorisierungs-URL öffnen. Gibtzurück, wenn die Browser-Sitzung endet. |
| `handleRedirect(url:) async throws -> VonvonSession` | OAuth-State validieren, Autorisierungscode am Token-Endpunkt eintauschen,Tokens in Keychain persistieren und eine Sitzung zurückgeben. |
| `getSession() async throws -> VonvonSession?` | Gibt die aktuelle, nicht abgelaufene iOS-Sitzung zurück; ein abgelaufener Token-Status wird gelöscht und die Methode gibt nil zurück. |
| `getAccessToken(forceRefresh:) async throws -> String` | Gibt das aktuelle, nicht abgelaufene Zugriffstoken zurück. Das SDK lehnt offline\_access ab, bis DPoP implementiert ist; nach Ablauf ist eine erneute Autorisierung erforderlich. |
| `signOut(callEndSession:) async throws` | Keychain-Tokens löschen. true übergeben, um den end\_session-Endpunkt überden Browser aufzurufen. |
| `setTokenStorage(_:) throws` | Den Standard-KeychainTokenStorage durch eine benutzerdefinierteTokenStorageAdapter-Implementierung ersetzen. |

## Speicher-Adapter

Der Standard-Speicher verwendet den Keychain mit`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly` — Tokens werdennicht mit dem iCloud-Keychain synchronisiert. Implementieren Sie das`TokenStorageAdapter`-Protokoll, um eineUnternehmens-Keychain-Richtlinie zu verwenden:

```swift
struct EnterpriseKeychain: TokenStorageAdapter {
func save(key: String, value: String) throws { /* ... */ }
func load(key: String) throws -> String? { /* ... */ }
func delete(key: String) throws { /* ... */ }
}
try Vonvon.shared.setTokenStorage(EnterpriseKeychain())
```

## Sicherheit

- Öffentlicher Client — kein Client-Secret gespeichert oder übertragen.
- Nur PKCE S256. Der Server lehnt die Plain-Challenge-Methode ab.
- Zufälliger OAuth-State wird pro Anfrage generiert; bei der Weiterleitungzur CSRF-Prävention validiert.
- PKCE-code\_verifier wird nur für die Dauer des Autorisierungsflows in denKeychain geschrieben und unmittelbar nach dem Code-Tausch gelöscht.
- ASWebAuthenticationSession wird mit prefersEphemeralWebBrowserSession =true gestartet, um die gemeinsame Nutzung von Browser-Cookies zwischenApps zu vermeiden.

## Bekannte Einschränkungen

- JWKS-gestützte ES256/RS256-ID-Token-Verifizierung, Nonce-Validierung und end\_session-Abmeldung sind implementiert und lokal getestet. Vor L4-Unterstützung ist weiterhin ein echter IdP-Roundtrip auf einem iOS-Gerät oder -Simulator erforderlich.
- Das Keychain-Verhalten muss in einem Xcode-Geräte- oder Simulatortest geprüft werden.

Source: https://vonvon.id/de/sdks/ios/index.mdx
