Génie civil & structural
Utilisation de l'API Ios Core Spotlight pour activer la recherche de contenu dans votre application
Table of Contents
Présentation
L'API est un cadre intégré d'Apple pour l'indexation du contenu de l'application dans l'appareil. Lorsqu'un utilisateur recherche depuis l'écran d'accueil ou dans la vue Recherche, les éléments indexés de votre application apparaissent aux côtés des résultats des applications Mail, Messages et autres systèmes. Cet article fournit un guide complet et prêt à être produit pour la mise en œuvre de Core Spotlight, couvrant tout, de l'indexation de base à la liaison profonde et à l'accordage des performances.
Comprendre le rayonnement central et ses avantages
Core Spotlight est un système d'indexation léger et respectueux de la vie privée. Il vit entièrement sur un appareil – aucune donnée ne quitte le téléphone de l'utilisateur sauf si vous utilisez explicitement CloudKit. Cela le rend idéal pour des contenus personnels tels que des notes, des contacts, des documents ou toute donnée générée par l'utilisateur. Les principaux avantages sont :
- Investissement accru – Les utilisateurs découvrent du contenu qu'ils auraient pu oublier, stimulant ainsi l'utilisation répétée.
- Navigation sans couture – La saisie d'un résultat de recherche peut ouvrir votre application directement à l'écran pertinent.
- – Les éléments indexés restent consultables même sans connexion Internet.
- Coût de mise en œuvre faible – L'API est petite, bien documentée et s'intègre facilement aux modèles de données existants.
Core Spotlight fonctionne à côté de NSUserActivity indexing, mais pour des contenus statiques ou fréquemment mis à jour, l'indexation directe des éléments CSSearchable vous donne un contrôle plus fin.
Prérequis et configuration
Avant d'écrire le code, assurez-vous que votre projet est configuré correctement :
- Votre application doit cibler iOS 9 ou plus (l'API a débuté avec iOS 9).
- Activer [[[[[]][][][][][][][[[FLT:]]][[[FLT:]]][[[FLT:]][[FLT:]][[FLT:]][[FLT:]][[FLT:]][[FLT:]][[FLT:]]][[FLT:]][[FLT:]][[FLT]]][[[FLT]]][[FLT]]][[FLT]]][[FLT]][[][FLT]][[]][[[]][[[F
- Importer le cadre de projecteur de base et MobileCoreServices (pour les identifiants de type): et .
Aucune configuration supplémentaire du serveur ou autorisation de l'utilisateur n'est nécessaire. L'indexation se fait asynchronement en arrière-plan.
Création et indexation des éléments consultables
Le noyau de la lumière de base est l'objet . Chaque élément est composé de:
- Un identificateur unique[ (p. ex. ) – utilisé plus tard pour gérer la sélection ou les mises à jour.
- Un identificateur de domaine facultatif[ – groupes d'éléments liés (p. ex. ).
- Un ensemble d'attributs[ () – décrit le contenu avec des propriétés comme , , , et plus.
Voici un exemple complet de Swift qui indexe une seule note :
import CoreSpotlight
import MobileCoreServices
func indexNote(note: Note) {
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String)
attributeSet.title = note.title
attributeSet.contentDescription = note.body
attributeSet.keywords = [note.title] + note.tags
if let imageData = note.thumbnail?.pngData() {
attributeSet.thumbnailData = imageData
}
let item = CSSearchableItem(
uniqueIdentifier: "com.yourapp.note.\(note.id)",
domainIdentifier: "com.yourapp.notes",
attributeSet: attributeSet
)
// Optionally set expiration date (default is one month)
// item.expirationDate = Date.distantFuture
CSSearchableIndex.default().indexSearchableItems([item]) { error in
if let error = error {
print("Indexing error: \(error.localizedDescription)")
} else {
print("Note indexed successfully.")
}
}
}
Propriétés de l'attribut Set
Le hérite de et offre des dizaines de propriétés. Pour la plupart des applications, les éléments suivants sont essentiels:
- – Texte descriptif court qui apparaît en bonne place.
- – Un extrait plus long qui apparaît sous le titre.
- – Tableau de pour les autres termes de recherche.
- ou – Aperçu visuel.
- – Liens entre les éléments (p. ex., notes parents-enfants).
Pour le contenu multimédia, utilisez des propriétés spécifiques au type comme , ou .
Mise à jour et suppression du contenu indexé
Lorsque le contenu de votre application change, vous devez conserver l'index en synchronisation. Utilisez les mêmes méthodes :
Mise à jour d'un élément
Appelez avec le même identifiant unique – l'API remplace automatiquement l'ancienne entrée.
Suppression des éléments
Utiliser ou pour supprimer la teneur en résidus:
CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
// handle
}
Les opérations de lots sont efficaces : passez les tableaux à ou . Pour une réinitialisation complète, utilisez (rarement nécessaire).
Manipulation de l'activité de l'utilisateur et liaison profonde
Lorsqu'un utilisateur touche un résultat Spotlight, votre application reçoit un appel par la suite . Implémentez la méthode de délégation suivante dans votre ou :
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
if let userInfo = userActivity.userInfo,
let identifier = userInfo[CSSearchableItemActivityIdentifier] as? String {
// Navigate to the item with this identifier
navigateToContent(identifier: identifier)
return true
}
}
return false
}
Rétablissement de l'État
Pour une expérience plus fluide, implémentez également pour afficher un état de chargement. Dans les applications basées sur la scène (iOS 13+), utilisez la méthode .
Lien profond avec l'activité NSUser
Si vous indexez déjà les activités via , vous pouvez ajouter le drapeau . Cependant, pour un contrôle fin des titres et des descriptions, utilisez directement .
Meilleures pratiques pour une indexation efficace
En suivant ces lignes directrices, vous assurez que votre contenu indexé demeure pertinent et performant :
1. Indexer seulement le contenu significatif
Ne pas indexer chaque minuscule donnée. Focus sur les éléments que les utilisateurs sont susceptibles de rechercher : documents récents, pages à haute valeur ou contenu marqué par un signet.
2. Définir les dates d'expiration appropriées
Pour le contenu statique, défini . Pour les données sensibles au temps (p. ex., rappels d'événements), utilisez une date réaliste.
3. Utiliser les identifiants de domaine avec sagesse
Les identifiants de domaine vous permettent de supprimer tous les éléments d'un groupe à la fois. Par exemple, si un utilisateur supprime un dossier, appelez .
4. Fournir des mots-clés significatifs
Inclure les synonymes, les fautes d'orthographe courantes et les noms alternatifs. Éviter le suralimentage; 5-10 mots clés bien choisis sont suffisants.
5. Évitez d'indexer le contenu en double
Si vous dupliquez des éléments (par exemple, le même titre dans différents domaines), les utilisateurs voient des résultats confus.
6. Opérations par lots pour les mises à jour en vrac
Lors de la synchronisation de nombreux éléments (par exemple, après une restauration du nuage), les classer en tableaux de 50 à 100 pour éviter de bloquer le thread principal. Utilisez avec un tableau, pas plusieurs appels uniques.
Performance et considérations relatives aux batteries
Le projecteur de base fonctionne avec un processus de fond peu prioritaire. Mais une mauvaise mise en œuvre peut épuiser les performances de la batterie ou dégrader le système :
- Limiter la fréquence de réindexation – Reindexer uniquement lorsque les données changent réellement, pas sur chaque lancement d'application.
- Fonctionnement de gros volumes – Utilisation et (disponible sur ) pour les mises à jour atomiques.
- Éviter les images lourdes – devrait être petit (par exemple 64×64 points, JPEG compressé).
- – est suffisant pour presque toutes les applications. La création d'index personnalisés est rarement nécessaire.
Apples Core Spotlight documentation[ souligne que l'indexation doit être traitée comme -fire et oublier – n'attendez pas synchronement les callbacks d'achèvement sur le thread principal.
Tester l'intégration des projecteurs
Les résultats de la mise en évidence des débogages peuvent être délicats car ils n'apparaissent pas toujours immédiatement.
- Simulateur testing – Utilisez iOS Simulator (iOS 15 ou plus tard). Après avoir indexé, attendez quelques secondes, puis descendez l'écran d'accueil pour rechercher. Soyez conscient que les résultats peuvent prendre plus de temps dans le Simulator.
- Tests d'appareils[ – Toujours tester sur un appareil physique. L'indexation des projecteurs se comporte de manière plus agressive sur le matériel réel.
- Restaurer l'index – Utilisez l'application Paramètres: Général → Recherche Spotlight → basculer votre application hors et en marche. Cela efface l'index et force un nouveau départ.
- Vérifier la suppression – Après avoir supprimé un élément, assurez-vous que l'ancien résultat n'apparaît plus. Parfois, le système cache les résultats; donnez-le jusqu'à 30 secondes.
- Vérifier la console de débogage – Activer loging en passant dans les arguments de schéma Xcode.
Une ressource utile est WWDC 2015 -]Présentation de la lumière de base, qui couvre les concepts fondamentaux encore applicables aujourd'hui.
Conclusion
L'API Core Spotlight est un outil robuste et sous-utilisé qui peut transformer la façon dont les utilisateurs interagissent avec votre application. En ajoutant du contenu pertinent et à jour à l'index de recherche du système, vous fournissez un chemin sans friction de la recherche au contenu – en stimulant l'engagement et la rétention. Commencez petit : indexez votre contenu le plus important d'abord, testez attentivement, puis élargissez-vous pour couvrir les éléments secondaires.