Aller au contenu

Créer une fonction IA privée en Swift avec Foundation Models, SwiftUI et App Intents

Guide Apple Developer orienté production sur Foundation Models, SwiftUI, App Intents, Swift Testing, la confidentialité, l'évaluation et les solutions de repli.

Aya Mensah
Aya Mensah· Senior Editor · iPhone
5 septembre 2026Mis à jour 5 septembre 2026 8 min de lecture
Créer une fonction IA privée en Swift avec Foundation Models, SwiftUI et App Intents

Le framework Foundation Models d'Apple permet d'intégrer des fonctions de modèle de langage dans une application Swift native, tandis qu'App Intents expose les actions utiles aux expériences système. Ce guide propose une architecture orientée production avec SwiftUI, sortie structurée, confidentialité, tests, accessibilité et solutions de repli mesurables.

Ce qu'Apple a fait évoluer pour les développeurs

À la WWDC26, Apple a présenté de nouvelles capacités de Foundation Models concernant les modèles, la vision, la gestion du contexte, la recherche sémantique, les évaluations et les traitements côté serveur. Consultez la session officielle Apple avant l'adoption, car les noms et disponibilités des API peuvent évoluer.

Apple Developer Foundation Models framework
Commencez par une fonctionnalité limitée et mesurable avant d'étendre le flux du modèle.

1. Définir un résultat utilisateur précis

Ne commencez pas par un chatbot générique. Choisissez une tâche mesurable : résumer des notes de version, classer des retours, extraire des champs structurés ou produire un brouillon contrôlé par l'utilisateur.

8.8/10

Note finale

Avantages

  • Intégration native Swift et expériences système
  • Traitement local respectueux de la confidentialité lorsqu'il est disponible
  • Génération structurée, outils, sessions et évaluations
  • App Intents expose des actions au-delà de l'interface de l'application

Inconvénients

  • Disponibilité variable selon appareils, langues et régions
  • Les sorties génératives nécessitent validation et protections produit
  • Les nouvelles API peuvent évoluer entre bêta et version finale

2. Construire la couche modèle SwiftUI

ReleaseNotesModel.swift
import FoundationModelsimport Observation @MainActor@Observablefinal class ReleaseNotesModel {    private let session = LanguageModelSession()    var summary = ""     func summarize(_ notes: String) async throws {        let response = try await session.respond(            to: "Summarize these release notes for an iOS developer: \(notes)"        )        summary = response.content    }}

Une couche de modèle volontairement limitée, adaptée à l'amélioration progressive.

Q=0.35A+0.25R+0.20L+0.20PQ = 0.35A + 0.25R + 0.20L + 0.20P
Un score d'évaluation pratique combinant précision, fiabilité, latence et confidentialité.

3. Connecter les actions avec App Intents

App Intents décrit les actions et les entités de manière structurée afin que les expériences système compatibles puissent les découvrir. Commencez par la documentation officielle App Intents et conservez des paramètres clairs.

Session officielle Apple Developer WWDC26 sur Foundation Models.
Un flux de développement pratique : prototyper, tester, mesurer et itérer. Jakub Zerdzicki via Pexels

4. Tester le comportement plutôt que la formulation

La formulation générée peut changer alors que l'exigence produit reste stable. Testez les faits obligatoires, le contenu interdit, les contraintes structurées, l'annulation, l'indisponibilité du modèle et la solution manuelle.

ReleaseNotesModelTests.swift
import Testing@testable import DeveloperAssistant @Test("Generated summaries keep the essential migration warning")func summaryContainsMigrationWarning() async throws {    let result = try await fixtureSummary()    #expect(result.localizedCaseInsensitiveContains("migration"))}

Assertion Swift Testing centrée sur une exigence produit essentielle.

5. Traiter la disponibilité comme un état produit

Une fonctionnalité fondée sur un modèle ne doit pas se résumer à un indicateur activé ou désactivé. Construisez une machine à états explicite pour les modes disponible, temporairement indisponible, restreint, en téléchargement, en échec et solution de repli. SwiftUI peut ainsi expliquer la situation au lieu d’afficher une attente sans fin.

AssistantAvailability.swift
import FoundationModels enum AssistantAvailability {    case ready    case unavailable(reason: String)} func assistantAvailability() -> AssistantAvailability {    let model = SystemLanguageModel.default     switch model.availability {    case .available:        return .ready    case .unavailable(let reason):        return .unavailable(reason: String(describing: reason))    }}

Transformer la disponibilité du framework en état produit compréhensible.

  • Afficher la raison de l’indisponibilité avec des termes compréhensibles.
  • Conserver la navigation, les données et le flux manuel utilisables sans le modèle.
  • Revérifier la disponibilité lorsque l’application redevient active.
  • Mesurer les états agrégés sans collecter les requêtes ou contenus privés.

6. Préférer les sorties structurées au parsing fragile

Le texte libre convient aux brouillons, mais la logique produit doit consommer des valeurs contraintes dès que possible. Apple documente ces flux dans son guide Foundation Models . Définissez un contrat réduit, validez chaque champ et rejetez les valeurs contraires aux règles métier.

Pour un assistant de notes de version, le contrat peut contenir un résumé, les plateformes concernées, l’urgence de migration, les actions requises et les sources. L’interface affiche alors des sections prévisibles et localise les libellés indépendamment de la génération.

Choisir la bonne forme de sortie
Cas d’usageSortie recommandéeValidation
Brouillon éditorialTexte contraint avec sourcesLongueur, couverture, affirmations interdites
Champs d’interfaceSortie structurée typéeSchéma, plages, énumérations, champs requis
SuggestionsListe courte et classéeDéduplication, pertinence, destinations sûres
Action destructiveJamais exécutée directementAperçu puis confirmation explicite

7. Encadrer strictement les outils

Les outils peuvent relier le modèle au calendrier, à une base locale, au réseau ou à des actions de l’application. Considérez les arguments proposés comme des entrées non fiables. Validez types et plages, appliquez les autorisations hors du modèle et exigez une confirmation pour les achats, suppressions, publications, messages ou changements de compte.

  • Exposer uniquement les outils nécessaires à la tâche en cours.
  • Retourner des résultats courts et typés plutôt que des dossiers privés complets.
  • Séparer les outils en lecture seule de ceux qui modifient des données.
  • Journaliser le nom de l’outil, la latence et la catégorie d’erreur.
  • Ne jamais placer de clé API, jeton ou politique interne dans une requête.

8. Rendre App Intents utile en dehors de l’application

App Intents peut exposer une capacité ciblée aux expériences système compatibles. Suivez le guide de création d’un premier App Intent , localisez titres et descriptions, simplifiez les paramètres et retournez un résultat utile même sans l’interface complète.

SummarizeReleaseNotesIntent.swift
import AppIntents struct SummarizeReleaseNotesIntent: AppIntent {    static let title: LocalizedStringResource = "Summarize Release Notes"    static let description = IntentDescription(        "Creates a concise draft while preserving migration warnings."    )     @Parameter(title: "Release notes")    var notes: String     func perform() async throws -> some IntentResult & ReturnsValue<String> {        let summary = try await ReleaseNotesService.shared.summarize(notes)        return .result(value: summary)    }}

Un App Intent minimal qui délègue la logique métier à un service testable.

L’intent ne doit pas dupliquer l’orchestration du modèle. Placez requêtes, validation, persistance et télémétrie dans un service réutilisable par SwiftUI, App Intents et les tests afin d’éviter des comportements contradictoires.

9. Construire un jeu d’évaluation avant d’ajuster les requêtes

Le jeu d’évaluation doit représenter les entrées réelles : textes courts ou longs, langues mélangées, contexte manquant, données sensibles et instructions adverses. Enregistrez les faits attendus et les affirmations inacceptables plutôt qu’un paragraphe de référence unique.

EvaluationCase.swift
struct EvaluationCase: Codable {    let id: String    let input: String    let requiredFacts: [String]    let prohibitedClaims: [String]} func score(_ output: String, against test: EvaluationCase) -> Double {    let required = test.requiredFacts.filter(output.localizedCaseInsensitiveContains)    let violations = test.prohibitedClaims.filter(output.localizedCaseInsensitiveContains)    let recall = Double(required.count) / Double(max(test.requiredFacts.count, 1))    return max(0, recall - Double(violations.count) * 0.25)}

Une couche de notation déterministe pour les faits requis et les affirmations interdites.

S=0.40F+0.20C+0.15U+0.15A+0.10ES = 0.40F + 0.20C + 0.15U + 0.15A + 0.10E
Exemple de score de publication : factualité, respect des contraintes, utilité, accessibilité et efficacité.
  • Conserver un jeu de régression figé pour chaque version publiée.
  • Ajouter les échecs réels après suppression des données personnelles.
  • Comparer la voie IA à la solution manuelle, pas seulement à l’ancienne requête.
  • Mesurer la latence médiane et extrême, les annulations et la réussite du repli.

10. Intégrer confidentialité et sécurité dans le flux de données

Dessinez le trajet complet des données : saisie, mémoire, stockage local, session du modèle, outils, analytics, rapports de panne, serveur et suppression. Classez chaque champ et décidez ce qui ne doit jamais quitter l’appareil. Une promesse de confidentialité n’est crédible que si l’architecture et les journaux l’imposent.

Revue de confidentialité par catégorie
CatégorieTraitement par défautContrôle requis
Documentation publiqueTraitement possibleConserver source et version
Données de compteMinimiser et isolerFinalité et contrôle d’accès
Secrets et identifiantsJamais dans une requêteTrousseau ou stockage serveur
TélémétrieAgrégée par défautConsentement, durée, suppression

11. Intégrer l’accessibilité à chaque état généré

Le contenu généré doit rester utilisable avec Dynamic Type, VoiceOver, contraste renforcé, réduction des animations, clavier et contrôle de sélection. Annoncez les changements utiles, stabilisez le focus à l’arrivée du résultat et identifiez clairement un brouillon généré.

  • Employer des titres sémantiques et des libellés d’accessibilité concis.
  • Permettre la pause des médias, animations et mises à jour automatiques.
  • Fournir alternatives textuelles et transcriptions pour chaque média.
  • Tester les chaînes françaises et anglaises aux tailles d’accessibilité.
  • Conserver la sélection et le focus après régénération ou rejet.

12. Localiser le comportement, pas seulement les libellés

Les versions française et anglaise exigent des cas d’évaluation distincts : noms, dates, unités, ponctuation, terminologie et résumé acceptable diffèrent. Rendez la langue explicite et ne traduisez jamais silencieusement un contenu privé par un service non annoncé.

Ressources Apple Developer officielles utilisées pour valider le parcours technique.
1 / 2

Ressources Apple Developer officielles utilisées pour valider le parcours technique.

13. Définir un budget de performance et d’énergie

Mesurez démarrage à froid, délai avant le premier résultat utile, durée totale, pression mémoire, annulation et impact batterie sur le plus ancien appareil pris en charge. Annulez le travail lorsque la vue disparaît et ne mettez en cache que les contenus pouvant être conservés.

14. Observer les échecs sans enregistrer les contenus privés

Les tableaux de bord doivent indiquer la disponibilité, la version exécutée, le résultat de la validation, l’acceptation par l’utilisateur et la réussite de la solution de repli. Utilisez des catégories d’erreur expurgées plutôt que les requêtes et réponses brutes.

  • Taux de disponibilité par système, appareil, langue et région.
  • Taux d’échec de validation et de nouvelle tentative par version.
  • Latences P50, P95 et P99 avec le taux d’annulation.
  • Taux de réussite du repli et taux de correction signalée.
  • Sessions sans panne et alertes mémoire autour des opérations.

Une boucle de développement mesurée

Prototyper un résultat, exécuter des tests reproductibles, analyser les échecs et améliorer le contrat produit.
Transcription

Visuel complémentaire : un flux de développement représentant implémentation, tests, mesure et itération. Aucune instruction orale n’est nécessaire pour comprendre ce média.

15. Checklist de mise en production

Avant TestFlight

  1. Vérifier la disponibilité sur chaque famille d’appareils.
  2. Exécuter le jeu d’évaluation figé en français et en anglais.
  3. Tester hors ligne, annulation, arrière-plan et faible mémoire.
  4. Contrôler les permissions des outils et les confirmations.
  5. Auditer analytics, conservation et suppression.
  6. Terminer les tests VoiceOver, Dynamic Type et réduction des animations.
  7. Comparer les sources avec la documentation du SDK actuel.

Règle éditoriale : mettre ce guide à jour lorsque Apple modifie les API, leur disponibilité ou les exigences de plateforme.

Questions fréquentes

Tous les iPhone pris en charge peuvent-ils exécuter Foundation Models ?

Non. La disponibilité dépend du système, du matériel compatible, de la langue, de la région, de l’état d’Apple Intelligence et de la capacité utilisée. Vérifiez-la à l’exécution et fournissez une solution complète.

Faut-il enregistrer automatiquement le texte généré ?

Généralement pas avant validation et contrôle utilisateur. Conservez uniquement les données nécessaires, expliquez la durée de conservation et permettez la modification ou la suppression.

Comment tester une sortie non déterministe ?

Testez les faits requis, les affirmations interdites, la validité du schéma, les règles de sécurité, la latence et la solution de repli sur un jeu de données représentatif.

Quand un App Intent doit-il demander confirmation ?

Demandez une confirmation explicite avant toute action destructive, financière, sensible, éditoriale, de messagerie ou de modification de compte. L’autorisation reste extérieure au modèle.

Ressources officielles pour poursuivre

Commencez par la documentation Foundation Models .

Consultez la documentation App Intents .

Utilisez la documentation Swift Testing .

Si une application exige un autre fournisseur de modèle, consultez la session Apple sur l’intégration des fournisseurs et expliquez clairement le nouveau trajet des données.

Checklist de production

  • Fournir une solution accessible sans IA.
  • Tester les langues et régions prises en charge.
  • Mesurer latence, annulation et erreurs.
  • Conserver les sources et un journal de mise à jour.

Consulter la documentation officielle Foundation Models.

Verdict final

Notre verdict

8.8/10
Recommandé

Une base native solide avec une solution de repli de même qualité

Foundation Models, SwiftUI, App Intents et Swift Testing forment une pile Apple crédible. La qualité dépend néanmoins d'un périmètre précis, des contrôles de disponibilité, des évaluations, de l'accessibilité et d'une gestion transparente des données.

Community rating

8.8/10

How would you rate this verdict?

Community score 8.8/10 from 5 votes

Aya Mensah

Aya Mensah

Senior Editor · iPhone

Aya has covered Apple since the original iPhone. She specialises in hands-on iPhone reviews and smartphone comparisons for African readers.

iPhone Comparisons Camera
View full profile
Partager cet article

0 commentaires

Loading…

Les commentaires sont modérés. Merci de rester courtois.

Les commentaires sont soumis à modération avant publication.

Continuer la lecture