iOS Uygulamanız İçin Spotlight Arama: Core Spotlight Kullanımı

Emre Çakır
Kariyer.net Tech
Published in
3 min readJun 26, 2024

Spotlight araması, parmağınızı telefonunuzun kilit ekranından ya da ana ekrandan yukarıdan aşağıya doğru çektiğinizde beliren global bir arama ekranıdır. Core Spotlight framework’ünü kullanarak uygulamanız ile ilgili içerikleri indeksleyip Spotlight arama ekranında gösterebilirsiniz. Core Spotlight framework’ ü iOS 9 ve sonrasında kullanılabilir.

Core Spotlight Framework’ünü İçe Aktarma

Uygulamanız ile ilgili içerikleri Spotlight ta aranabilir yapmak için öncelikle CoreSportlight framework ünü import etmeniz gerekli. Ardından her bir içerik için CSSearchableItem class ından bir obje oluşturmanız gerekli:

import CoreSpotlight

let searchableItem = CSSearchableItem(uniqueIdentifier: String?,
domainIdentifier: String?,
attributeSet: CSSearchableItemAttributeSet)

Parametreler:

  • uniqueIdentifier: Bu içeriği indekslemek ve ya dizinden silmek için kullanacağımız için GEREKLİDİR.
  • domainIdentifier: Bu içeriğin ‘alan’ veya sahibini temsil eden isteğe bağlı bir tanımlayıcıdır. Hesap bazlı bir uygulamanızda, hesap silindiğinde o hesapla ile index’ lenmiş içerikleri silmek isteyebilirsiniz. Bu durumda <hesap-id>.<uygulama-adı> biçiminde olmalıdır. deleteSearchableItemsWithDomainIdentifiers metodunu kullanarak bu alan tanımlayıcısına sahip tüm öğeleri silebilirsiniz.
  • attributeSet: Öğeye ait meta verileri içerir

Bunların dışında expirationDate adında Date tipinde bir değişkene daha sahiptir.

searchableItem.expirationDate -> Aranabilir içeriklerim bir son kullanma tarihi veya geçerlilik süresi vardır. Varsayılan olarak 1 ay olarak ayarlanmıştır. Eğer Spotlight Aramasında daimi kalmasını istiyorsanız bu değişkene;

searchableItem.expirationDate = Date.distantFuture

şeklinde atama yapabilirsiniz.

CSSearchableItemAttributeSet Oluşturma

Ardından CSSearchableItemAttributeSet class’ ından bir obje oluşturmamız gerekli ve bu oluşturduğumuz objeyi searchableItem objesini intialize ederken attributeSet parametresine atamanız gerekmektedir. Örnek parametreler:

  • title: içeriğin başlığı
  • contentDescription: İçeriğin açıklaması
  • keywords: Bu içerik ile ilgili arama yapılırken içerik ile ilişkilendirilen anahtar kelime listesi
  • thumbnailData: İçeriğin küçük resmi, eğer herhangi bir thumbnailData sı atamaz iseniz uygulamanızın kendi ikonu görünecektir

Örnek Kod

Aşağıda bir CSSearchableItem objesi oluşturan ve bunu spotlight index lerine ekleyen kodu göreceksiniz.

import CoreSpotlight
import UIKit

final class CoreSpotlightManager {
static func addItem(subs: SubscriptionModel, image: UIImage?) {
let itemAttribute = CSSearchableItemAttributeSet(contentType: .text)
itemAttribute.title = subs.name
let contentDescription: String = subs.getFormattedSubscriptionPaymentDate() + " (\(subs.price.amount))"
itemAttribute.contentDescription = contentDescription
if let image {
itemAttribute.thumbnailData = image.pngData()
}

let searchableItem = CSSearchableItem(uniqueIdentifier: subs.id.uuidString,
domainIdentifier: "com.subscription.tracker",
attributeSet: itemAttribute)

CSSearchableIndex.default().indexSearchableItems([searchableItem]) { (error) -> Void in
if let error = error {
print("Core Spotlight Error: \(error.localizedDescription)")
}
}
}
}

Eğer bir içeriği spotlight aramalarından kaldırmak istiyorsak aşağıdaki fonksiyonu kullanabilirsiniz.

    static func deleteItem(identifier: String) {
CSSearchableIndex.default().deleteSearchableItems(withIdentifiers: [identifier])
}

İşte bu kadar, şimdi sıra geldi spotlight arama ekranından içeriğinize tıklandığında ilgili ekrana yönlendirmeye.

İlgili Ekrana Yönlendirme

  • SceneDelegate.swift dosyanıza aşağıdaki fonksiyonu ekleyerek, contentinizin identifier’ ını kullanarak uygulamanız ilk açıdığında ilgili sayfaya yönlendirmesini sağlayabilirsiniz.
import CoreSpotlight

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let userActivity = connectionOptions.userActivities.first,
let itemIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
// Go to your screen
}
}
  • Eğer uygulamanız arka planda çalışır durumdayken herhangi bir içeriğe tıklandıysa, SceneDelegate.swift dosyanıza aşağıdaki kod parçacığını eklemeniz gerekmektedir.
import CoreSpotlight

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if userActivity.activityType == CSSearchableItemActionType,
let itemIdentifier = userActivity.userInfo?[CSSearchableItemActivityIdentifier] as? String {
// Go to your screen
}
}

Sonuç

Spotlight araması sayesinde kullanıcılarınızın uygulamanızdaki içeriklere daha hızlı erişmesini sağlayabilirsiniz. Daha fazla bilgi için Apple’ın Core Spotlight dökümantasyonuna göz atabilirsiniz.

--

--