Ingegneria civile e strutturale
Utilizzando l'API di Ios Core Spotlight per abilitare la ricerca dei contenuti nella tua app
Table of Contents
Introduzione
Integrare la ricerca a livello di sistema nella tua app iOS riduce drasticamente l'attrito, permettendo agli utenti di trovare contenuti senza aprire la tua app prima. Core Spotlight API è il framework integrato di Apple per l'indicizzazione del contenuto delle app nella ricerca globale Spotlight del dispositivo. Quando un utente cerca tutto dalla schermata Home o all'interno della vista di ricerca, i risultati dell'inserta delle app
Comprendere il Core Spotlight e i suoi vantaggi
Core Spotlight è un sistema di indicizzazione leggero e privacy-friendly, che vive interamente on-device, senza che i dati lascino il telefono dell’utente a meno che non utilizzi esplicitamente CloudKit. Questo lo rende ideale per contenuti personali come note, contatti, documenti o qualsiasi dato generato dall’utente.
- Innalzamento del fidanzamento[[] – Gli utenti scoprono i contenuti che potrebbero aver dimenticato, aumentando l'utilizzo di ripetizione.
- Navigazione senza problemi[[] – La mappatura di un risultato di ricerca può aprire la tua app direttamente alla schermata relativa.
- Possibilità di internet[[] – Gli elementi indicizzati rimangono ricercabili anche senza connettività internet.
- Sotto costi di implementazione[ – L'API è piccola, ben documentata, e si integra facilmente con i modelli di dati esistenti.
Core Spotlight funziona insieme NSUserActivity[] indicizzazione, ma per contenuti statici o frequentemente aggiornati, l'indicizzazione diretta CSSearchableItem ti dà un controllo più sottile.
Prerequisiti e configurazione
Prima di scrivere il codice, assicurarsi che il progetto sia configurato correttamente:
- La tua app deve essere indirizzata iOS 9 o versioni successive (l'API ha debuttato con iOS 9).
- Abilita Core Spotlight[[[]] capacità in Xcode – sotto [[]Signing & Capabilities[[]] aggiungere il diritto “Core Spotlight” .
- Importa il quadro Core Spotlight e MobileCoreServices (per i identificatori di tipo): e .
Non è necessaria alcuna configurazione server aggiuntiva o autorizzazione utente. Indicizzazione avviene in modo asincrono sullo sfondo.
Creazione e indicizzazione di oggetti ricercabili
Il nucleo del Core Spotlight è l'oggetto .
- identificatore unico[[] (ad esempio []]) – utilizzato in seguito per gestire la selezione o gli aggiornamenti.
- Un identificatore opzionale dominio[] – elementi relativi ai gruppi (ad esempio, ).
- atttributo[[] ([[]]]]] – descrive il contenuto con proprietà come [, , , , e altro ancora.
Ecco un esempio completo Swift che indicizza una singola nota:
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.")
}
}
}
Proprietà di Set di attributi
] eredita da [] e offre decine di proprietà. Per la maggior parte delle applicazioni sono essenziali:
- – breve, testo descrittivo che appare in modo prominente.
- – Un cecchino più lungo mostrato sotto il titolo.
- – Array of ] per i termini di ricerca alternativi.
- o [] – Anteprima visiva.
- – Links elementi insieme (ad esempio, note di figlio).
Per i contenuti multimediali, utilizzare proprietà specifiche del tipo come [, , o .
Aggiornamento e cancellazione Contenuto indicizzato
Quando il contenuto dell'app cambia, è necessario mantenere l'indice in sincronizzazione.
Aggiornamento di un oggetto
Chiama con lo stesso identificatore univoco – l'API sostituisce automaticamente la vecchia voce.
Delezione degli articoli
Usa o ] per rimuovere il contenuto di stanti:
CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: ["com.yourapp.note.123"]) { error in
// handle
}
Le operazioni di batch sono efficienti: passano a o . Per un reset completo, usare (raramente necessario).
Gestione dell'attività dell'utente e collegamento profondo
Quando un utente tocca un risultato Spotlight, la tua app riceve una chiamata attraverso la continuazione .Attuazione del seguente metodo delegata nel tuo o :
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
}
Stato di ripristino
Per un'esperienza più fluida, implementare ] per mostrare uno stato di caricamento. Nelle app basate sulla scena (iOS 13+), utilizzare il metodo .
Link approfondito con NSUserAttività
Se già indiciate le attività tramite ], potete aggiungere la bandiera . Tuttavia, per un controllo accurato sui titoli e le descrizioni, usare direttamente.
Migliori Pratiche per Indicizzazione Efficace
In seguito a queste linee guida, il contenuto indicizzato rimane rilevante e performante:
1. Indice solo contenuto significativo
Non indicizzare ogni minuscolo pezzo di dati. Concentrati sugli elementi gli utenti sono in grado di cercare: documenti recenti, pagine ad alto valore, o contenuti segnati.
2. Impostare le date di scadenza corrette
Per i contenuti statici, impostare ]. Per i dati sensibili al tempo (ad esempio, promemoria degli eventi), utilizzare una data realistica.
3. Utilizzare i identificatori di dominio Wisely
Gli identificatori di dominio consentono di eliminare tutti gli elementi da un gruppo in una sola volta. Ad esempio, se un utente cancella una cartella, chiama .
4. Fornire parole chiave significative
Includere sinonimi, errori comuni e nomi alternativi. Evitare sovrapposti; 5-10 parole chiave ben scelte sono sufficienti.
5. Evitare l'indicizzazione dei contenuti duplicati
Se duplicate gli elementi (ad esempio, lo stesso titolo in diversi domini), gli utenti vedono risultati confusi.
6. Operazioni batch per aggiornamenti a carica
Quando si sincronizzano molti elementi (ad esempio, dopo un ripristino del cloud), si inseriscono in array di 50–100 per evitare di bloccare il thread principale.
Prestazioni e Considerazioni della batteria
Core Spotlight gestisce un processo di sfondo a bassa priorità, ma la scarsa implementazione può scaricare le prestazioni del sistema o degrade:
- Limit reindexing frequenza[[] – Solo reindex quando i dati realmente cambiano, non su ogni lancio di app.
- Tre grandi operazioni[[] – Usa e (disponibile su ) per gli aggiornamenti atomici.
- Avoid immagini pesanti[ – dovrebbe essere piccolo (ad esempio, 64×64 punti, JPEG compresso).
- Utilizzare l'indice predefinito[[] – è sufficiente per quasi tutte le applicazioni.
La documentazione di Apple Core Spotlight[[]] sottolinea che l'indicizzazione dovrebbe essere trattata come “fuoco e dimenticare” – non aspettate sincronizzatamente i callback di completamento sul filo principale.
Testing Core Spotlight Integrazione
I risultati dei test di debug possono essere difficili perché non appaiono sempre immediatamente.
- I test del simulatore[ – Usa il Simulatore iOS (iOS 15 o versioni successive). Dopo l'indicizzazione, aspetta alcuni secondi, quindi tira giù la schermata Home per cercare.
- I test di dispositivo[[] – Sempre testare su un dispositivo fisico. L'indicizzazione di Spotlight si comporta più aggressivamente su hardware reale.
- Reimpostare l'indice[[] – Utilizzare l'app Impostazioni: General → Spotlight Search → per attivare e attivare la tua app.
- Verificare la cancellazione[[] – Dopo aver eliminato un elemento, assicurarsi che il vecchio risultato non venga più visualizzato. A volte il sistema memorizza i risultati; rinunciare a 30 secondi.
- Controllare la console di debug[[[] – Abilitare [] logging passando []] in argomenti di schema di Xcode.
Una risorsa utile è WDC 2015 “Introdurre il Core Spotlight”[[]], che copre concetti fondamentali ancora oggi applicabili.
Conclusioni
Con l’aggiunta di contenuti pertinenti e aggiornati all’indice di ricerca del sistema, fornisci un percorso senza attrito dalla ricerca al contenuto – aumentando l’impegno e la ritenzione. Inizia piccolo: indicizza il tuo contenuto più importante prima, testa a fondo, e poi espandersi per coprire gli elementi secondari. Ricorda di mantenere pulito l’indice, utilizzare identificatori unici in modo coerente e gestire l’attività utente call
Per ulteriori informazioni, consultare il sito ufficiale ]Core Spotlight Framework Reference[] e App Search Programming Guide.