L'IA sur l'appareil dans tout iOS 27 : Spotlight et Media
Dans iOS 26, le grand modèle de langage sur l’appareil vivait à l’intérieur de votre application. Vous ouvriez une LanguageModelSession, vous y attachiez des outils, et le modèle raisonnait sur le contexte que vous lui transmettiez1. iOS 27 fait remonter ce même modèle d’un cran. Apple le câble désormais dans Core Spotlight, si bien que l’index de recherche existant d’une application devient une source d’ancrage pour le modèle2, et dans AVFoundation, de sorte que l’appareil transcrit et traduit les sous-titres pendant la lecture sans que l’application écrive la moindre ligne de code d’inférence3. C’est là le titre : le modèle sur l’appareil devient un service système, et plus seulement une API embarquée dans l’application. La même intelligence que vous appelez directement depuis votre code tourne aussi sous la recherche et sous les médias, accessible à travers des frameworks que vous utilisez déjà.
Cet article couvre deux de ces surfaces système, à partir de leurs sessions WWDC26 : la recherche par LLM via Core Spotlight (session 246) et les sous-titres générés par l’IA d’Apple avec aperçu de style à l’écran (session 256). Si vous n’avez pas encore rencontré les primitives de framework derrière la première, l’explication des Foundation Models, le LLM sur l’appareil et l’article sur l’appel d’outils dans iOS 27 posent le décor.
En bref
SpotlightSearchTooladopte le protocoleToolde Foundation Models afin qu’un modèle de langage puisse rechercher directement dans l’index Core Spotlight de votre application pour générer une réponse contextuelle. Apple le propose sur iOS, iPadOS, macOS et visionOS2.- Vous configurez l’outil en une ligne environ, vous l’attachez à une
LanguageModelSession, et le modèle génère lui-même ses requêtes, les exécute sur votre index et raisonne sur les résultats2. - Une nouvelle méthode du délégué d’index,
searchableItems(forIdentifiers:), vous permet de récupérer l’intégralité duCSSearchableItem, afin que le modèle voie des métadonnées que l’index de recherche compact ne peut pas restituer2. - Les profils d’orientation cadrent les capacités de recherche de l’outil pour les modèles plus petits ; des étapes de pipeline personnalisées laissent l’index effectuer des calculs (comptages, moyennes, scores personnalisés) pour le compte du modèle2.
- Les sous-titres générés par l’IA d’Apple tournent en direct et localement pendant la lecture, sans aucun code applicatif. Ils couvrent deux voies : la transcription de la parole à partir de l’audio, et la traduction linguistique à partir de sous-titres existants3.
AVPlayerViewControllerreçoit gratuitement les sous-titres générés et le nouvel aperçu de style dans le lecteur ;AVPlayerLayeretAVCaptionRendererexposent l’API d’aperçu de style pour les interfaces de lecteur personnalisées3.
Ce qui est passé dans le système
L’histoire d’iOS 26 plaçait un modèle dans votre processus et vous donnait le protocole Tool pour l’étendre1. iOS 27 conserve ce modèle et ajoute deux endroits où le système le sollicite pour vous. Core Spotlight devient une surface de récupération que le modèle peut interroger, ce qui transforme l’index de recherche que vous fournissez déjà en contexte ancré. AVFoundation devient une surface de transcription et de traduction, ce qui signifie des sous-titres dans des langues que le média original n’a jamais embarquées.
Les deux fonctionnalités semblent sans rapport jusqu’à ce que vous remarquiez le motif partagé. Dans les deux cas, Apple possède le modèle et fait le gros du travail, et votre application possède le contenu et la surface. Vous fournissez des éléments recherchables ; le modèle écrit les requêtes. Vous lisez une vidéo ; l’appareil génère les sous-titres. L’intelligence est une capacité système partagée, et votre rôle passe de l’implémenter à lui fournir le bon contenu et à bien présenter le résultat.
La recherche par LLM via Core Spotlight
SpotlightSearchTool, un outil qui adopte le protocole Tool de Foundation Models pour qu’un modèle de langage recherche directement le contenu Core Spotlight de votre application en vue de générer une réponse.
Le cadre proposé par Apple est une application de sentiers de randonnée qui permet déjà de parcourir des parcs d’État et des sentiers, et de prendre des notes personnelles après chaque randonnée. Le développeur veut poser au modèle des questions ouvertes sur ces randonnées. Une LanguageModelSession nue répond à partir des connaissances générales du modèle, ce qui est la mauvaise source : les réponses devraient provenir des randonnées que l’application connaît réellement. L’application a déjà indexé chaque sentier dans un index de recherche Core Spotlight ; la solution consiste donc à laisser le modèle puiser dans cet index par l’appel d’outils2.
C’est ce que fait SpotlightSearchTool. Apple le présente comme un outil qui adopte le protocole Tool pour permettre à un modèle de langage de rechercher directement le contenu de votre application dans Core Spotlight en vue d’une génération de réponse contextuelle, disponible sur iOS, iPadOS, macOS et visionOS2. Le prérequis est le travail que vous auriez déjà accompli : fournir du contenu recherchable avec Core Spotlight, le sujet de la précédente session d’Apple « Supporting semantic search with Core Spotlight »24. Une fois vos éléments fournis, vous importez CoreSpotlight et FoundationModels, et Apple indique que l’outil est prêt à rechercher dans votre index en une ligne de code. Vous choisissez un modèle, soit le SystemLanguageModel, soit un modèle fourni via les nouvelles API Model Provider, puis vous ajoutez une instance de SpotlightSearchTool à votre session2.
import CoreSpotlight
import FoundationModels
// Apple: "in one line of code, the tool is ready to search
// your app's Core Spotlight index."
let session = LanguageModelSession(tools: [SpotlightSearchTool()])
let response = try await session.respond(to: "What hikes have I gone on?")
La trajectoire, pas la requête
Le détail qui mérite l’attention, c’est qui écrit la recherche. Pas vous. Apple décrit la trajectoire d’une question comme « What hikes have I gone on? » ainsi : le modèle décide qu’il a besoin de SpotlightSearchTool, génère lui-même la requête, Spotlight exécute cette requête et renvoie une description du jeu de résultats, et le modèle raisonne sur cette sortie pour générer sa réponse finale2. La phrase de clôture de la session énonce le changement sans détour : les développeurs n’écrivent plus de requêtes de recherche ; ils fournissent le contenu et laissent l’intelligence faire le reste2.
Une lacune apparaît tôt, et Apple est franc à son sujet. Certaines métadonnées de l’index Spotlight, comme le contenu textuel et le HTML, sont stockées dans une représentation très compacte que l’on peut rechercher, mais pas restituer sous une forme lisible par un modèle de langage2. Le modèle trouve les bons éléments sans pouvoir lire tout ce qui a été fourni pour eux. La solution se trouve dans le délégué d’index que vous implémentez déjà pour gérer les demandes de réindexation. Apple ajoute une méthode pour récupérer l’intégralité du CSSearchableItem par son identifiant unique, afin que le modèle puisse gérer ses réponses sur des millions de résultats potentiels sans tous les charger2.
// On your CSSearchableIndex delegate.
func searchableItems(
forIdentifiers identifiers: [String]
) async -> [CSSearchableItem] {
// Return the complete item for each id. The callback is also the
// place to attach metadata you would not donate for search but
// want the model to reason over.
identifiers.compactMap { fullItem(for: $0) }
}
Apple formule explicitement le second point : si votre application détient des métadonnées qu’il n’a pas de sens de fournir pour la recherche mais qui aideraient le modèle à raisonner, le rappel du délégué est l’endroit où définir ces attributs supplémentaires sur l’élément, afin que le modèle les voie2.
Afficher les résultats
Apple trace une ligne nette entre deux modes d’affichage. La réponse de session est une description concise du jeu de résultats, ce que veut montrer une interface de type assistant. Pour un affichage en liste, les résultats eux-mêmes sont disponibles directement sur SpotlightSearchTool, ce qu’Apple appelle la meilleure façon d’accéder aux éléments recherchables lorsque le jeu de résultats est volumineux2. Les réponses de recherche arrivent sous forme de séquence asynchrone, chacune pouvant porter un lot de résultats jusqu’à ce que l’appel d’outil se termine. Comme le modèle peut appeler l’outil plus d’une fois avant sa réponse finale, Apple recommande d’utiliser le queryToken de chaque réponse pour décider quand l’interface doit se rafraîchir2.
Personnaliser selon le modèle que vous choisissez
SpotlightSearchTool expose un large éventail de capacités, de la recherche sémantique sur le texte à la recherche structurée sur les dates, les personnes et les lieux2. Apple offre trois leviers pour ajuster cette surface au modèle que vous exécutez. Le premier est le profil d’orientation. Confier à un petit modèle l’ensemble des capacités de l’outil consomme un contexte dont il ne dispose pas ; un GuidanceProfile cadre donc l’orientation à ce dont l’application a besoin, jusqu’à la liste exacte des attributs de métadonnées que le modèle doit considérer, avec un niveau de guidage dynamique défini à la création de l’outil2. Le conseil d’Apple pour les modèles sur l’appareil, qui ont une taille de contexte plus restreinte, est une orientation ciblée pour des capacités de recherche plus simples2.
Le deuxième levier est la résolution de référence. Si l’application fournit des relations entre personnes et que l’utilisateur demande qui d’autre se trouvait sur un sentier, le modèle doit savoir à qui « cette personne » fait référence. La réponse d’Apple est un résolveur de contacts qui renvoie les informations de contact liées à l’identité de l’utilisateur, que l’outil met en correspondance avec les métadonnées de l’index2.
Le troisième levier est celui qui transforme la recherche en calcul. Pour une demande complexe comme « combien de sentiers ai-je randonnés cette année, et pour chaque mois, combien de kilomètres en moyenne ? », Apple indique que le modèle peut renoncer à une simple requête au profit d’une recherche en pipeline qui réunit des requêtes d’index et un calcul sur le jeu de résultats2. Le modèle décompose la question en étapes : une recherche des randonnées terminées, une étape de comptage qui construit un tableau par mois, puis une étape qui calcule une moyenne sur les comptages2. Les étapes de pipeline sont Generable, donc le modèle génère une étape à la demande à partir du prompt, et une application peut enregistrer ses propres étapes personnalisées2. L’exemple d’Apple est un score de bonheur calculé sur les notes de chaque élément, peut-être via une analyse de sentiment ou une notation à cinq étoiles, avec des propriétés Guide qui indiquent au modèle quels résultats privilégier2.
// Apple's example: a Generable pipeline stage that scores items so the
// model reasons over the top-scoring results, not the raw set.
@Generable
struct HappinessScoredTrail {
let item: CSSearchableItem
@Guide(description: "Prefer higher scores; 5-star hikes rank highest.")
let happinessScore: Double
}
// Register the stage on the tool's configuration.
Apple clôt la section sur la vérification plutôt que sur l’implémentation, en pointant vers le framework Evaluations pour mesurer la qualité avec laquelle le modèle appelle l’outil et la pertinence de ses réponses, avec la couverture des résultats comme exemple de métrique pour l’application de randonnée2. Cette boucle d’évaluation est un sujet à part entière, traité dans l’article sur le framework Evaluations d’Apple.
Des sous-titres générés, sur l’appareil
La surface média montre le même principe sous un autre angle. Les sous-titres générés par l’IA d’Apple sont créés en direct, localement sur l’appareil, pendant la lecture du média3. Le cadrage de la session 256 met l’accessibilité au premier plan : les sous-titres comptent pour les personnes sourdes ou malentendantes, pour celles qui suivent un dialogue parlé, et pour quiconque ne peut tout simplement pas entendre l’audio sur le moment. Lorsqu’un contenu est diffusé sans une langue que le spectateur comprend, l’appareil peut combler le vide3.
Apple décrit deux voies. La première est la transcription de la parole : l’audio source entre dans le modèle de reconnaissance vocale sur l’appareil et les sous-titres en ressortent3. La seconde est la traduction linguistique : des sous-titres existants (en anglais, dans l’exemple d’Apple) entrent dans le modèle de traduction sur l’appareil, qui produit des sous-titres dans une autre langue, comme l’italien3. Les sous-titres rédigés à la main par un créateur de contenu restent préférés et inchangés ; les sous-titres générés ne font qu’ajouter des langues3. Cette même capacité de traduction sur l’appareil est exposée directement aux développeurs dans le framework Translation.
Ce qui compte pour l’adoption : vous n’implémentez rien pour activer cela. Apple précise que les sous-titres générés sont disponibles automatiquement pendant la lecture vidéo3. Ils couvrent la diffusion en direct HTTP, y compris les chaînes de télévision en direct, la vidéo à la demande, les événements en direct comme le sport, et le contenu sur fichier tel que les médias embarqués dans l’application ou téléchargés3. Le contenu professionnel comme le contenu créé par les utilisateurs (captures de l’appareil photo de l’iPhone, vidéos des réseaux sociaux) y ont droit3.
La matrice de lancement est étroite et mérite une lecture précise. À partir d’iOS et macOS 27, des sous-titres anglais peuvent être générés à partir d’un audio anglais, ce qui est également pris en charge sur tvOS et visionOS 273. En plus de cela, plusieurs langues de sous-titres peuvent être générées à partir de sous-titres anglais sur iOS et macOS3. La transcription est donc d’abord de l’anglais vers l’anglais sur quatre plateformes, et la traduction se déploie à partir de l’anglais sur les deux plus importantes.
Où se situe réellement votre travail
Les sous-titres générés ne coûtent rien à activer, votre effort va donc dans l’interface de sélection. Le conseil d’Apple est direct : proposez une interface de sélection des sous-titres pendant la lecture3. Trois options, par ordre décroissant de ce qu’Apple vous offre :
AVPlayerViewControllersur iOS (etAVPlayerViewsur macOS) implémente entièrement la sélection des sous-titres et les commandes du lecteur. Vous n’avez rien de plus à faire3.AVLegibleMediaOptionsMenuControllerprésente les commandes et le comportement de sélection sans les commandes du lecteur, ce qui convient lorsque vous avez déjà une interface de lecteur et que seul le menu vous manque3.- Des commandes personnalisées pour la sélection de média, lorsque vous voulez que le menu s’accorde au reste de votre application3.
Dans la démo d’Apple, les options générées portent un symbole d’étincelle et le mot « Translated », afin que les utilisateurs puissent les distinguer des pistes rédigées3.
L’aperçu de style
La seconde fonctionnalité de la session est la présentation. L’app Réglages permet depuis des années de choisir et de créer des styles de sous-titres, mais le propos d’Apple est que changer de style en cours de vidéo, avec un aperçu en direct, est à la fois plus simple et plus accessible que de quitter la lecture pour aller fouiller dans les Réglages3. Les mêmes styles qu’un utilisateur a définis dans les Réglages, y compris ceux personnalisés, apparaissent désormais dans le menu de style du lecteur avec un aperçu de chacun3.
AVPlayerViewController implémente l’aperçu de style et les commandes du lecteur d’emblée3. Pour les lecteurs personnalisés, AVPlayerLayer expose une API d’aperçu de style, et AVCaptionRenderer peut fournir l’aperçu si vous prenez en charge son rendu vous-même3. Le flux AVPlayerLayer d’Apple : chaque style système porte un identifiant de profil, vous récupérez donc tous les styles par leurs identifiants de profil, vous remplissez votre interface avec leurs noms, et vous appelez la fonction d’aperçu lorsqu’un utilisateur en sélectionne un. Le nouveau sous-titre s’affiche dans le style choisi tandis que les sous-titres existants se masquent automatiquement pour ne pas interférer. Passer nil au paramètre de texte affiche un texte système localisé, et un paramètre de position décale l’aperçu pour dégager vos commandes. Vous rappelez la fonction pour chaque nouveau style, vous arrêtez l’aperçu une fois la sélection terminée (ce qui restaure les sous-titres actifs), et vous définissez le style choisi pour tous les sous-titres du système3.
Comment adopter
Pour la recherche Spotlight :
- Fournissez d’abord votre contenu à Core Spotlight ; l’outil recherche dans l’index, donc sans fourniture, il n’y a rien à rechercher24.
- Attachez
SpotlightSearchTool()à uneLanguageModelSessionet choisissez votre modèle, leSystemLanguageModelou un modèle issu des API Model Provider2. - Implémentez
searchableItems(forIdentifiers:)sur votre délégué d’index pour renvoyer les éléments complets et attacher les métadonnées réservées au modèle que l’index compact ne peut pas restituer2. - Pour une vue assistant, affichez la réponse de session ; pour une vue en liste, lisez les résultats
CSSearchableItemsur l’outil et rafraîchissez à chaquequeryTokende réponse2. - Si vous exécutez un modèle sur l’appareil, cadrez les capacités avec un
GuidanceProfile, et ne recourez aux étapes de pipeline que lorsqu’une demande nécessite un comptage ou une notation sur un grand ensemble2.
Pour les sous-titres générés :
- Rien n’active la fonctionnalité ; elle tourne automatiquement pendant la lecture3.
- Assurez-vous que votre lecteur expose une interface de sélection des sous-titres via
AVPlayerViewController,AVLegibleMediaOptionsMenuControllerou vos propres commandes3. - Ajoutez l’aperçu de style gratuitement via
AVPlayerViewController, ou câblez l’API d’aperçu d’AVPlayerLayerdans un lecteur personnalisé3. - Lisez la matrice de prise en charge avant de promettre des langues : transcription de l’anglais vers l’anglais sur quatre plateformes, traduction à partir de l’anglais sur iOS et macOS3.
FAQ
Qu’est-ce que SpotlightSearchTool dans iOS 27 ?
C’est un outil Foundation Models qui adopte le protocole Tool afin qu’un modèle de langage puisse rechercher directement dans l’index Core Spotlight de votre application et utiliser les résultats pour générer une réponse. Apple le propose sur iOS, iPadOS, macOS et visionOS. Vous attachez une instance de SpotlightSearchTool à une LanguageModelSession, et le modèle génère lui-même les requêtes de recherche au lieu que vous les écriviez2.
Dois-je écrire les requêtes de recherche ?
Non. Le cadrage d’Apple est que les développeurs n’écrivent plus de requêtes de recherche ; ils fournissent le contenu et laissent le modèle faire le reste. Le modèle décide qu’il a besoin de l’outil, génère une requête, Spotlight l’exécute et renvoie une description du jeu de résultats, et le modèle raisonne sur cette sortie pour produire sa réponse2.
Pourquoi le modèle ne voit-il pas toutes mes métadonnées fournies ?
Certaines métadonnées Spotlight, comme le contenu textuel et le HTML, sont stockées sous une forme très compacte que l’on peut rechercher, mais pas restituer de façon lisible. Pour donner au modèle l’image complète, implémentez searchableItems(forIdentifiers:) sur votre délégué d’index afin de renvoyer l’intégralité du CSSearchableItem, et utilisez ce rappel pour attacher tout attribut supplémentaire réservé au modèle2.
Dois-je implémenter quoi que ce soit pour obtenir les sous-titres générés ?
Non. Apple précise que les sous-titres générés sont disponibles automatiquement pendant la lecture vidéo, créés en direct et localement sur l’appareil. Votre travail, c’est l’interface de sélection et, en option, l’aperçu de style dans le lecteur, pas l’inférence3.
Quelles langues les sous-titres générés prennent-ils en charge au lancement ?
À partir d’iOS et macOS 27, des sous-titres anglais peuvent être générés à partir d’un audio anglais, également sur tvOS et visionOS 27. Séparément, plusieurs langues de sous-titres peuvent être générées à partir de sous-titres anglais sur iOS et macOS. La transcription est donc de l’anglais vers l’anglais sur quatre plateformes, et la traduction se déploie à partir de l’anglais sur iOS et macOS3.
Les sous-titres générés et la recherche Spotlight sont-ils privés ?
Les deux tournent sur l’appareil. Les sous-titres générés sont créés en direct et localement à mesure que le média se lit3, et SpotlightSearchTool interroge l’index Core Spotlight local de votre application via le modèle sur l’appareil12. Apple fournissant l’implémentation système, ce qui change, c’est qui la maintient, pas où elle tourne.
L’ensemble du cluster Apple Ecosystem : les Foundation Models, le LLM sur l’appareil et le protocole Tool qu’adopte SpotlightSearchTool ; le contrôle de l’appel d’outils dans iOS 27 qui régit l’agressivité avec laquelle le modèle appelle des outils comme celui-ci ; la surface parallèle des App Intents dans iOS 27 pour l’exécution en arrière-plan, la synchronisation et Spotlight ; et Core AI : exécuter des modèles sur Apple Silicon pour la couche sous le modèle système. Le hub se trouve dans la série Apple Ecosystem. Pour un contexte plus large sur iOS avec des agents IA, consultez le guide de développement d’agents iOS.
-
Apple Developer, “Foundation Models” framework overview and “Tool” protocol. The iOS 26 framework introduced the on-device model,
LanguageModelSession, guided generation via@Generable, and theToolprotocol that lets the model invoke app code mid-generation. ↩↩↩ -
Apple, WWDC26 session 246, “LLM search using Core Spotlight.” developer.apple.com/videos/play/wwdc2026/246. Apple introduces
SpotlightSearchTool, a tool adopting the Foundation ModelsToolprotocol that lets a language model search an app’s Core Spotlight index directly for contextual response generation, available on iOS, iPadOS, macOS, and visionOS. The session covers the configure/attach flow, the tool-calling trajectory, thesearchableItems(forIdentifiers:)index-delegate method for recovering fullCSSearchableIteminstances, search-reply batches withqueryToken, guidance profiles, contact-resolver reference resolution, Generable pipeline stages for computation over result sets, and evaluation via the Evaluations framework with result coverage as a metric. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, WWDC26 session 256, “Discover generated subtitles and subtitle styles.” developer.apple.com/videos/play/wwdc2026/256. Apple describes AI-generated subtitles created live and locally on device during playback, via two paths (on-device speech-to-text transcription and on-device translation from existing subtitles), available automatically with no app code. The session states the launch matrix (English-from-English transcription on iOS, macOS, tvOS, and visionOS 27; translation from English subtitles on iOS and macOS), the selection-UI options (
AVPlayerViewController,AVPlayerView,AVLegibleMediaOptionsMenuController, custom controls), and the subtitle style preview viaAVPlayerViewController,AVPlayerLayer, andAVCaptionRendererusing per-style profile IDs. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer, “Core Spotlight” framework and the
CSSearchableItemandCSSearchableIndexAPIs for donating searchable content. Session 246 names the prior “Supporting semantic search with Core Spotlight” session as the prerequisite for donating content, managing donations with a delegate and reindex extension, and performing structured and semantic search. ↩↩