Communitygithub.com

FoundationModels – On-Device LLM (iOS 26)

Integration von Apples On-Device-Sprachmodell in Apps mit dem FoundationModels-Framework. Unterstützt Textgenerierung, strukturierte Ausgabe mit @Generable, benutzerdefinierten Tool-Aufruf und Snapshot-Streaming – alles auf dem Gerät für Privatsphäre und Offline-Betrieb.

Was ist FoundationModels – On-Device LLM (iOS 26)?

Dieses Skill ermöglicht es Entwicklern, Apples On-Device-LLM (Large Language Model) über das FoundationModels-Framework in iOS‑26+‑Apps zu integrieren. Es bietet zentrale Patterns wie die Verfügbarkeitsprüfung des Modells, grundlegende und kontextbewusste Sitzungen, strukturierte Ausgabe mit dem `@Generable`-Makro, benutzerdefinierten Tool-Aufruf und Snapshot-Streaming für Echtzeit-UI-Updates. Der Fokus liegt auf Datenschutz (keine Daten verlassen das Gerät), Offline-Betrieb und Kompilierzeitsicherheit. Das Skill ist für Plattformen wie Claude Code, Cursor, Codex und ähnliche KI-Agenten geeignet. Entwickler lernen, wie sie Sitzungen korrekt erstellen, Anweisungen definieren und das 4.096‑Token-Limit berücksichtigen – inklusive Best Practices und Anti-Patterns für robuste On-Device-KI-Funktionen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/foundation-models-on-device

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

FoundationModels: On-Device LLM (iOS 26)

Patterns zur Integration von Apples On-Device-Sprachmodell in Apps mit dem FoundationModels-Framework. Deckt Textgenerierung, strukturierte Ausgabe mit @Generable, benutzerdefinierten Tool-Aufruf und Snapshot-Streaming ab – alles auf dem Gerät für Privatsphäre und Offline-Betrieb.

Wann aktivieren

  • KI-gestützte Funktionen mit Apple Intelligence auf dem Gerät entwickeln
  • Text generieren oder zusammenfassen, ohne auf eine Cloud angewiesen zu sein
  • Strukturierte Daten aus natürlicher Sprache extrahieren
  • Benutzerdefinierte Tool-Aufrufe für domänenspezifische KI-Aktionen implementieren
  • Strukturierte Antworten für Echtzeit-UI-Updates streamen
  • Datenschutzfreundliche KI benötigen (keine Daten verlassen das Gerät)

Kernmuster – Verfügbarkeitsprüfung

Vor dem Erstellen einer Sitzung immer die Modellverfügbarkeit prüfen:

struct GenerativeView: View {
    private var model = SystemLanguageModel.default

    var body: some View {
        switch model.availability {
        case .available:
            ContentView()
        case .unavailable(.deviceNotEligible):
            Text("Gerät nicht für Apple Intelligence geeignet")
        case .unavailable(.appleIntelligenceNotEnabled):
            Text("Bitte Apple Intelligence in den Einstellungen aktivieren")
        case .unavailable(.modelNotReady):
            Text("Das Modell wird heruntergeladen oder ist noch nicht bereit")
        case .unavailable(let other):
            Text("Modell nicht verfügbar: \(other)")
        }
    }
}

Kernmuster – Basissitzung

// Einzeldurchlauf: jedes Mal eine neue Sitzung erstellen
let session = LanguageModelSession()
let response = try await session.respond(to: "Welcher Monat eignet sich gut für einen Paris-Besuch?")
print(response.content)

// Mehrfachdurchlauf: Sitzung für Gesprächskontext wiederverwenden
let session = LanguageModelSession(instructions: """
    Du bist ein Koch-Assistent.
    Gib Rezeptvorschläge basierend auf den Zutaten.
    Halte Vorschläge kurz und praktisch.
    """)

let first = try await session.respond(to: "Ich habe Hühnchen und Reis")
let followUp = try await session.respond(to: "Was ist mit einer vegetarischen Option?")

Wichtige Punkte für Anweisungen:

  • Rolle des Modells definieren („Du bist ein Mentor“)
  • Aufgabe beschreiben („Hilf, Kalenderereignisse zu extrahieren“)
  • Stilpräferenzen festlegen („Antworte so kurz wie möglich“)
  • Sicherheitsmaßnahmen hinzufügen („Bei gefährlichen Anfragen antworte mit ‚Dazu kann ich nicht helfen‘“)

Kernmuster – Geführte Generierung mit @Generable

Strukturierte Swift-Typen statt roher Zeichenketten generieren:

1. Einen Generable-Typ definieren

@Generable(description: "Grundlegende Profilinformationen einer Katze")
struct CatProfile {
    var name: String

    @Guide(description: "Das Alter der Katze", .range(0...20))
    var age: Int

    @Guide(description: "Ein Ein-Satz-Profil über die Persönlichkeit der Katze")
    var profile: String
}

2. Strukturierte Ausgabe anfordern

let response = try await session.respond(
    to: "Erzeuge eine süße Katze aus dem Tierheim",
    generating: CatProfile.self
)

// Direkter Zugriff auf strukturierte Felder
print("Name: \(response.content.name)")
print("Alter: \(response.content.age)")
print("Profil: \(response.content.profile)")

Unterstützte @Guide-Einschränkungen

  • .range(0...20) – Zahlenbereich
  • .count(3) – Array-Elementanzahl
  • description: – semantische Leitlinie für die Generierung

Kernmuster – Tool-Aufruf

Das Modell kann benutzerdefinierten Code für domänenspezifische Aufgaben aufrufen:

1. Ein Tool definieren

struct RecipeSearchTool: Tool {
    let name = "recipe_search"
    let description = "Suche nach Rezepten, die zu einem bestimmten Begriff passen, und gib eine Ergebnisliste zurück."

    @Generable
    struct Arguments {
        var searchTerm: String
        var numberOfResults: Int
    }

    func call(arguments: Arguments) async throws -> ToolOutput {
        let recipes = await searchRecipes(
            term: arguments.searchTerm,
            limit: arguments.numberOfResults
        )
        return .string(recipes.map { "- \($0.name): \($0.description)" }.joined(separator: "\n"))
    }
}

2. Sitzung mit Tools erstellen

let session = LanguageModelSession(tools: [RecipeSearchTool()])
let response = try await session.respond(to: "Finde mir ein paar Nudelrezepte")

3. Tool-Fehler behandeln

do {
    let answer = try await session.respond(to: "Finde ein Rezept für Tomatensuppe.")
} catch let error as LanguageModelSession.ToolCallError {
    print(error.tool.name)
    if case .databaseIsEmpty = error.underlyingError as? RecipeSearchToolError {
        // Spezifischen Tool-Fehler behandeln
    }
}

Kernmuster – Snapshot-Streaming

Strukturierte Antworten für Echtzeit-UI mit PartiallyGenerated-Typen streamen:

@Generable
struct TripIdeas {
    @Guide(description: "Ideen für anstehende Reisen")
    var ideas: [String]
}

let stream = session.streamResponse(
    to: "Was sind einige aufregende Reiseideen?",
    generating: TripIdeas.self
)

for try await partial in stream {
    // partial: TripIdeas.PartiallyGenerated (alle Eigenschaften Optional)
    print(partial)
}

SwiftUI-Integration

@State private var partialResult: TripIdeas.PartiallyGenerated?
@State private var errorMessage: String?

var body: some View {
    List {
        ForEach(partialResult?.ideas ?? [], id: \.self) { idea in
            Text(idea)
        }
    }
    .overlay {
        if let errorMessage { Text(errorMessage).foregroundStyle(.red) }
    }
    .task {
        do {
            let stream = session.streamResponse(to: prompt, generating: TripIdeas.self)
            for try await partial in stream {
                partialResult = partial
            }
        } catch {
            errorMessage = error.localizedDescription
        }
    }
}

Wichtige Designentscheidungen

EntscheidungBegründung
Ausführung auf dem GerätDatenschutz – keine Daten verlassen das Gerät; funktioniert offline
4.096 Token-LimitEinschränkung des On-Device-Modells; große Daten auf mehrere Sitzungen aufteilen
Snapshot-Streaming (keine Deltas)Strukturierte Ausgabe freundlich; jeder Snapshot ist ein vollständiger Teilzustand
@Generable-MakroKompilierzeitsicherheit für strukturierte Generierung; erzeugt automatisch den PartiallyGenerated-Typ
Eine Anfrage pro SitzungisResponding verhindert gleichzeitige Anfragen; bei Bedarf mehrere Sitzungen erstellen
response.content (nicht .output)Korrekte API – Ergebnisse immer über die .content-Eigenschaft abrufen

Best Practices

  • model.availability immer prüfen vor dem Erstellen einer Sitzung – alle Nichtverfügbarkeitsfälle behandeln
  • instructions verwenden, um das Modellverhalten zu steuern – sie haben Vorrang vor Prompts
  • isResponding prüfen, bevor eine neue Anfrage gesendet wird – Sitzungen bearbeiten jeweils nur eine Anfrage
  • response.content für Ergebnisse verwenden – nicht .output
  • Große Eingaben aufteilen – das 4.096 Token-Limit gilt für Anweisungen + Prompt + Ausgabe zusammen
  • @Generable für strukturierte Ausgabe verwenden – stärkere Garantien als das Parsen roher Zeichenketten
  • GenerationOptions(temperature:) verwenden, um die Kreativität einzustellen (höher = kreativer)
  • Mit Instruments überwachen – Xcode Instruments zur Profilerstellung der Anfrageleistung nutzen

Anti-Patterns (Vermeidung)

  • Sitzungen erstellen, ohne vorher model.availability zu prüfen
  • Eingaben senden, die das 4.096 Token-Kontextfenster überschreiten
  • Gleichzeitige Anfragen an eine einzelne Sitzung stellen
  • .output statt .content verwenden, um auf Antwortdaten zuzugreifen
  • Rohe Zeichenkettenantworten parsen, wenn @Generable strukturierte Ausgabe möglich wäre
  • Komplexe mehrschrittige Logik in einen einzigen Prompt packen – in mehrere fokussierte Prompts aufteilen
  • Annehmen, dass das Modell immer verfügbar ist – Geräteberechtigung und Einstellungen variieren

Wann verwenden

  • On-Device-Textgenerierung für datenschutzsensible Apps
  • Strukturierte Datenextraktion aus Benutzereingaben (Formulare, natürliche Sprachbefehle)
  • KI-gestützte Funktionen, die offline funktionieren müssen
  • Streaming-UI, die generierte Inhalte schrittweise anzeigt
  • Domänenspezifische KI-Aktionen über Tool-Aufruf (Suche, Berechnung, Nachschlagen)

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Verwandte Skills